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 | 42776 | jjdelcerro | package org.gvsig.fmap.dal.swing.impl.dynobjectutils; |
---|---|---|---|
2 | |||
3 | import java.util.Formatter; |
||
4 | 42792 | jbadia | |
5 | 42776 | jjdelcerro | import javax.swing.DefaultComboBoxModel; |
6 | 42792 | jbadia | |
7 | 42776 | jjdelcerro | 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 | 42792 | jbadia | import org.slf4j.Logger; |
23 | import org.slf4j.LoggerFactory; |
||
24 | 42776 | jjdelcerro | |
25 | public class CreateComboModelFromTable extends AbstractDynMethod { |
||
26 | 42792 | jbadia | |
27 | public static final Logger logger = LoggerFactory.getLogger(CreateComboModelFromTable.class); |
||
28 | 42776 | jjdelcerro | |
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 | 42792 | jbadia | logger.debug("Error while creating ComboModelFromTable:", ex);
|
80 | 42776 | jjdelcerro | } |
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 | } |