svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / dynobjectutils / CreateComboModelFromTable.java @ 42792
History | View | Annotate | Download (4.26 KB)
1 |
package org.gvsig.fmap.dal.swing.impl.dynobjectutils; |
---|---|
2 |
|
3 |
import java.util.Formatter; |
4 |
|
5 |
import javax.swing.DefaultComboBoxModel; |
6 |
|
7 |
import org.apache.commons.lang3.StringUtils; |
8 |
import org.gvsig.fmap.dal.DALLocator; |
9 |
import org.gvsig.fmap.dal.DataManager; |
10 |
import org.gvsig.fmap.dal.DataStoreParameters; |
11 |
import org.gvsig.fmap.dal.feature.Feature; |
12 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
13 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
14 |
import org.gvsig.tools.dataTypes.CoercionException; |
15 |
import org.gvsig.tools.dispose.DisposableIterator; |
16 |
import org.gvsig.tools.dynobject.AbstractDynMethod; |
17 |
import org.gvsig.tools.dynobject.DynField_v2; |
18 |
import org.gvsig.tools.dynobject.DynObject; |
19 |
import org.gvsig.tools.dynobject.DynObjectValueItem; |
20 |
import org.gvsig.tools.dynobject.Tags; |
21 |
import org.gvsig.tools.dynobject.exception.DynMethodException; |
22 |
import org.slf4j.Logger; |
23 |
import org.slf4j.LoggerFactory; |
24 |
|
25 |
public class CreateComboModelFromTable extends AbstractDynMethod { |
26 |
|
27 |
public static final Logger logger = LoggerFactory.getLogger(CreateComboModelFromTable.class); |
28 |
|
29 |
private static final String DAL_foreingCode = "DAL.foreingCode"; |
30 |
private static final String DAL_foreingDescriptionMask = "DAL.foreingDescriptionMask"; |
31 |
private static final String DAL_foreingDescriptionFields = "DAL.foreingDescriptionFields"; |
32 |
private static final String DAL_pageSize = "DAL.pageSize"; |
33 |
|
34 |
public CreateComboModelFromTable(String methodName, String description) { |
35 |
super(methodName, description);
|
36 |
} |
37 |
|
38 |
public Object invoke(DynObject self, Object[] args) throws DynMethodException { |
39 |
DefaultComboBoxModel model = new DefaultComboBoxModel(); |
40 |
try {
|
41 |
DynField_v2 field = (DynField_v2) args[0];
|
42 |
String foreignCodeName = (String) field.getTags().get(DAL_foreingCode); |
43 |
int pageSize;
|
44 |
try {
|
45 |
pageSize = field.getTags().getInt(DAL_pageSize); |
46 |
} catch (CoercionException ex) {
|
47 |
pageSize = 100;
|
48 |
} |
49 |
if (pageSize < 100) { |
50 |
pageSize = 100;
|
51 |
} |
52 |
Tags tags = field.getTags(); |
53 |
String[] foreingDescriptionFieldNames = null; |
54 |
String foreingDescriptionMask = (String) tags.get(DAL_foreingDescriptionMask); |
55 |
String fieldNames = (String) tags.get(DAL_foreingDescriptionFields); |
56 |
if (!StringUtils.isEmpty(fieldNames)) {
|
57 |
foreingDescriptionFieldNames = fieldNames.split(",");
|
58 |
} |
59 |
if (StringUtils.isEmpty(foreingDescriptionMask)
|
60 |
&& foreingDescriptionFieldNames != null
|
61 |
&& foreingDescriptionFieldNames.length == 1) {
|
62 |
foreingDescriptionMask = "%s";
|
63 |
} |
64 |
|
65 |
DataManager manager = DALLocator.getDataManager(); |
66 |
DataStoreParameters params = manager.createStoreParameters(tags); |
67 |
FeatureStore store = (FeatureStore) manager.openStore((String) tags.get("dal.openstore.provider"), params); |
68 |
FeatureSet set = store.getFeatureSet(); |
69 |
DisposableIterator it = set.fastIterator(); |
70 |
while (it.hasNext()) {
|
71 |
Feature f = (Feature) it.next(); |
72 |
DynObjectValueItem item = new DynObjectValueItem(
|
73 |
f.get(foreignCodeName), |
74 |
this.getDescription(f, foreingDescriptionFieldNames, foreingDescriptionMask)
|
75 |
); |
76 |
model.addElement(item); |
77 |
} |
78 |
} catch (Exception ex) { |
79 |
logger.debug("Error while creating ComboModelFromTable:", ex);
|
80 |
} |
81 |
return model;
|
82 |
} |
83 |
|
84 |
private String getDescription(Feature feature, String[] foreingDescriptionFieldNames, String foreingDescriptionMask) { |
85 |
if (StringUtils.isEmpty(foreingDescriptionMask) || foreingDescriptionFieldNames == null) { |
86 |
return ""; |
87 |
} |
88 |
Object[] values = new Object[foreingDescriptionFieldNames.length]; |
89 |
for (int i = 0; i < values.length; i++) { |
90 |
values[i] = feature.get(foreingDescriptionFieldNames[i]); |
91 |
} |
92 |
Formatter f = new Formatter(); |
93 |
try {
|
94 |
String description = f.format(foreingDescriptionMask, values).toString();
|
95 |
return description;
|
96 |
} catch (Exception ex) { |
97 |
// TODO: log error
|
98 |
return ""; |
99 |
} |
100 |
} |
101 |
|
102 |
} |