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