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 |
} |