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 / impl / expressionevaluator / DALSymbolTable.java @ 44653
History | View | Annotate | Download (4.3 KB)
1 | 44253 | jjdelcerro | package org.gvsig.fmap.dal.impl.expressionevaluator; |
---|---|---|---|
2 | |||
3 | import java.util.List; |
||
4 | import org.apache.commons.lang3.Range; |
||
5 | import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
||
6 | import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
||
7 | import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
||
8 | import org.gvsig.expressionevaluator.Interpreter; |
||
9 | import org.gvsig.expressionevaluator.spi.AbstractFunction; |
||
10 | import org.gvsig.expressionevaluator.spi.AbstractSymbolTable; |
||
11 | import org.gvsig.fmap.dal.DALLocator; |
||
12 | import org.gvsig.fmap.dal.DataManager; |
||
13 | import org.gvsig.fmap.dal.DataStore; |
||
14 | import org.gvsig.fmap.dal.feature.Feature; |
||
15 | import org.gvsig.fmap.dal.feature.FeatureQuery; |
||
16 | import org.gvsig.fmap.dal.feature.FeatureStore; |
||
17 | |||
18 | /**
|
||
19 | *
|
||
20 | * @author jjdelcerro
|
||
21 | */
|
||
22 | @SuppressWarnings("UseSpecificCatch") |
||
23 | public class DALSymbolTable extends AbstractSymbolTable { |
||
24 | |||
25 | public static final String FUNCTION_FEATURES = "FEATURES"; |
||
26 | 44259 | jjdelcerro | |
27 | 44253 | jjdelcerro | public static class FeaturesFunction extends AbstractFunction { |
28 | |||
29 | public FeaturesFunction() {
|
||
30 | super(
|
||
31 | "Data access",
|
||
32 | FUNCTION_FEATURES, |
||
33 | Range.between(1, 3), |
||
34 | "Return a list of the features selecteds with filter in the store.",
|
||
35 | 44259 | jjdelcerro | FUNCTION_FEATURES + "({{store_name}}, filter, order)",
|
36 | 44253 | jjdelcerro | new String[]{ |
37 | "store - data store name to be used",
|
||
38 | "where - Optional. String value with a filter expression",
|
||
39 | "order - Optional. String value with the order. must be a string with the names of separate fields with commas"
|
||
40 | }, |
||
41 | "LIST"
|
||
42 | ); |
||
43 | } |
||
44 | |||
45 | @Override
|
||
46 | public Object call(Interpreter interpreter, Object[] args) throws Exception { |
||
47 | String storeName = getStr(args, 0); |
||
48 | String where = null; |
||
49 | String order = null; |
||
50 | switch (args.length) {
|
||
51 | case 2: |
||
52 | where = getStr(args, 1);
|
||
53 | break;
|
||
54 | case 3: |
||
55 | where = getStr(args, 1);
|
||
56 | order = getStr(args, 2);
|
||
57 | break;
|
||
58 | } |
||
59 | try {
|
||
60 | DataStore store = this.getStore(storeName);
|
||
61 | 44259 | jjdelcerro | if (store == null || !(store instanceof FeatureStore)) { |
62 | throw new ExpressionRuntimeException("Cant locate the store '" + storeName + "' in function '" + FUNCTION_FEATURES + "'."); |
||
63 | 44253 | jjdelcerro | } |
64 | 44259 | jjdelcerro | if (!(store instanceof FeatureStore)) { |
65 | throw new ExpressionRuntimeException("The store'" + storeName + "' is not valid for function '" + FUNCTION_FEATURES + "', a FeatureStore is required."); |
||
66 | 44253 | jjdelcerro | } |
67 | FeatureStore featureStore = (FeatureStore) store; |
||
68 | List<Feature> features;
|
||
69 | if (where == null && order == null) { |
||
70 | features = featureStore.getFeatures(); |
||
71 | } else {
|
||
72 | FeatureQuery query = featureStore.createFeatureQuery(); |
||
73 | if (where != null) { |
||
74 | query.addFilter(where); |
||
75 | } |
||
76 | if (order != null) { |
||
77 | query.getOrder().add(order); |
||
78 | } |
||
79 | query.retrievesAllAttributes(); |
||
80 | features = featureStore.getFeatures(query); |
||
81 | } |
||
82 | return features;
|
||
83 | 44259 | jjdelcerro | } catch (ExpressionRuntimeException ex) {
|
84 | 44253 | jjdelcerro | throw ex;
|
85 | } catch (Exception ex) { |
||
86 | 44259 | jjdelcerro | throw new ExpressionRuntimeException("Problems calling '" + FUNCTION_FEATURES + "' function", ex); |
87 | 44253 | jjdelcerro | } |
88 | } |
||
89 | |||
90 | protected DataStore getStore(String storeName) { |
||
91 | DataManager dataManager = DALLocator.getDataManager(); |
||
92 | 44304 | jjdelcerro | DataStore store = dataManager.getStoresRepository().getStore(storeName); |
93 | 44253 | jjdelcerro | return store;
|
94 | } |
||
95 | } |
||
96 | |||
97 | @SuppressWarnings("OverridableMethodCallInConstructor") |
||
98 | public DALSymbolTable() {
|
||
99 | super(DataManager.DAL_SYMBOL_TABLE);
|
||
100 | |||
101 | this.addFunction(new FeaturesFunction()); |
||
102 | } |
||
103 | |||
104 | public static void selfRegister() { |
||
105 | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
||
106 | manager.registerSymbolTable(new DALSymbolTableFactory());
|
||
107 | 44259 | jjdelcerro | } |
108 | 44253 | jjdelcerro | |
109 | } |