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 @ 42775

History | View | Annotate | Download (3.24 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
import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
17

    
18
public class ComputeAvailableValuesFromTable extends AbstractDynMethod {
19

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

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

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

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

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

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

    
60
    private static class ComputeAvailableValuesFromTableException extends DynMethodException {
61

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

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

    
73
}