Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / fmap / dal / feature / impl / dynobjectutils / ComputeAvailableValuesFromTable.java @ 46195

History | View | Annotate | Download (3.17 KB)

1
package org.gvsig.fmap.dal.feature.impl.dynobjectutils;
2

    
3
import org.gvsig.fmap.dal.DALLocator;
4
import org.gvsig.fmap.dal.DataManager;
5
import org.gvsig.fmap.dal.DataStoreParameters;
6
import org.gvsig.fmap.dal.feature.Feature;
7
import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
8
import org.gvsig.fmap.dal.feature.FeatureSet;
9
import org.gvsig.fmap.dal.feature.FeatureStore;
10
import org.gvsig.tools.dispose.DisposableIterator;
11
import org.gvsig.tools.dynobject.AbstractDynMethod;
12
import org.gvsig.tools.dynobject.DynField_v2;
13
import org.gvsig.tools.dynobject.DynObject;
14
import org.gvsig.tools.dynobject.DynObjectValueItem;
15
import org.gvsig.tools.dynobject.exception.DynMethodException;
16

    
17
public class ComputeAvailableValuesFromTable extends AbstractDynMethod {
18

    
19
    public ComputeAvailableValuesFromTable(String methodName, String description) {
20
        super(methodName,description);
21
    }
22

    
23
    @Override
24
    public Object invoke(DynObject self, Object[] args) throws DynMethodException {
25
        if (!(self instanceof FacadeOfAFeature)) {
26
            return null;
27
        }
28

    
29
        DynField_v2 field = (DynField_v2) args[0];
30
        String attrValueName = (String) field.getTags().get("attrValueName");
31
        String attrLabelName = (String) field.getTags().get("attrLabelName");
32
        String storeName = (String) field.getTags().get("storeName");
33

    
34
        Feature feature = ((FacadeOfAFeature) self).getFeature();
35
        return this.getAvailableValues(feature, storeName, attrLabelName, attrValueName);
36
    }
37

    
38
    private DynObjectValueItem[] getAvailableValues(Feature feature, String storeName, String attrLabelName, String attrValueName) throws ComputeAvailableValuesFromTableException {
39
        try {
40
            DataManager manager = DALLocator.getDataManager();
41

    
42
            FeatureStore mystore = feature.getStore();
43
            DataStoreParameters storeParmeters = mystore.getExplorer().get(storeName);
44
            FeatureStore store = (FeatureStore) manager.openStore(mystore.getProviderName(), storeParmeters);
45
            FeatureSet set = store.getFeatureSet();
46
            DynObjectValueItem[] values = new DynObjectValueItem[(int)(set.getSize())];
47
            int n = 0;
48
            DisposableIterator it = set.fastIterator();
49
            while( it.hasNext() ) {
50
                Feature f = (Feature) it.next();
51
                values[n++] =  new DynObjectValueItem(f.getString(attrValueName), f.getString(attrLabelName));
52
            }
53
            return values;
54
        } catch (Exception ex) {
55
            throw new ComputeAvailableValuesFromTableException(storeName, ex);
56
        }
57
    }
58

    
59
    private static class ComputeAvailableValuesFromTableException extends DynMethodException {
60

    
61
        private final static String MESSAGE_FORMAT = "Can't retrieve available values from %(storename)s.";
62
        private final static String MESSAGE_KEY = "_ComputeAvailableValuesFromTableException";
63
        private static final long serialVersionUID = -3248317756866564508L;
64

    
65
        public ComputeAvailableValuesFromTableException(String storename, Throwable cause) {
66
            super(MESSAGE_FORMAT, MESSAGE_KEY, serialVersionUID);
67
            setValue("storename", storename);
68
            this.initCause(cause);
69
        }
70
    }
71

    
72
}