Statistics
| Revision:

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
}