Revision 45366
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectCountFunction.java | ||
---|---|---|
34 | 34 |
import org.gvsig.fmap.dal.DataManager; |
35 | 35 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT; |
36 | 36 |
import org.gvsig.fmap.dal.DataStore; |
37 |
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator;
|
|
37 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
38 | 38 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
39 | 39 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
40 | 40 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
41 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator; |
|
41 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
|
|
42 | 42 |
import org.gvsig.tools.dispose.DisposeUtils; |
43 | 43 |
|
44 | 44 |
/** |
... | ... | |
114 | 114 |
} else { |
115 | 115 |
FeatureQuery query = featureStore.createFeatureQuery(); |
116 | 116 |
Code where2 = removeOuterTablesReferences(interpreter, where); |
117 |
ExpressionEvaluator filter = new DefaultExpressionEvaluator(where2.toString()); |
|
118 |
filter.getSymbolTable().addSymbolTable(interpreter.getSymbolTable());
|
|
117 |
ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
|
|
118 |
filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
|
|
119 | 119 |
query.addFilter(filter); |
120 | 120 |
query.retrievesAllAttributes(); |
121 | 121 |
set = featureStore.getFeatureSet(query); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/InsertIntoTableFunction.java | ||
---|---|---|
46 | 46 |
import org.gvsig.fmap.dal.DataManager; |
47 | 47 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
48 | 48 |
import org.gvsig.fmap.dal.DataStore; |
49 |
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator;
|
|
49 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
50 | 50 |
import static org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable.SYMBOL_CURRENT_TABLE; |
51 | 51 |
import org.gvsig.fmap.dal.expressionevaluator.TableAttributeHandler; |
52 | 52 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
... | ... | |
56 | 56 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
57 | 57 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
58 | 58 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQueryOrder; |
59 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator; |
|
59 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
|
|
60 | 60 |
import org.gvsig.tools.dispose.DisposeUtils; |
61 | 61 |
import org.gvsig.tools.exception.BaseException; |
62 | 62 |
|
... | ... | |
185 | 185 |
FeatureQuery query = sourceStore.createFeatureQuery(); |
186 | 186 |
if (where != null) { |
187 | 187 |
removeOuterTablesReferences(interpreter, where); |
188 |
ExpressionEvaluator filter = new DefaultExpressionEvaluator(where.toString()); |
|
189 |
filter.getSymbolTable().addSymbolTable(interpreter.getSymbolTable());
|
|
188 |
ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where.toString());
|
|
189 |
filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
|
|
190 | 190 |
query.addFilter(filter); |
191 | 191 |
} |
192 | 192 |
if (queryOrder != null) { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFunction.java | ||
---|---|---|
47 | 47 |
import org.gvsig.fmap.dal.DataManager; |
48 | 48 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
49 | 49 |
import org.gvsig.fmap.dal.DataStore; |
50 |
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator;
|
|
50 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
51 | 51 |
import static org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable.SYMBOL_CURRENT_TABLE; |
52 | 52 |
import org.gvsig.fmap.dal.expressionevaluator.TableAttributeHandler; |
53 | 53 |
import org.gvsig.fmap.dal.feature.Feature; |
54 | 54 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
55 | 55 |
import org.gvsig.fmap.dal.feature.FeatureQueryOrder; |
56 | 56 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
57 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator; |
|
57 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
|
|
58 | 58 |
import org.gvsig.expressionevaluator.Code.Callable; |
59 | 59 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
60 | 60 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureQueryOrder; |
... | ... | |
181 | 181 |
FeatureQuery query = featureStore.createFeatureQuery(); |
182 | 182 |
if (where != null) { |
183 | 183 |
Code where2 = removeOuterTablesReferences(interpreter, where); |
184 |
ExpressionEvaluator filter = new DefaultExpressionEvaluator(where2.toString()); |
|
185 |
filter.getSymbolTable().addSymbolTable(interpreter.getSymbolTable());
|
|
184 |
ExpressionEvaluator filter = new DefaultFeatureExpressionEvaluator(where2.toString());
|
|
185 |
filter.toSymbolTable().addSymbolTable(interpreter.getSymbolTable());
|
|
186 | 186 |
query.addFilter(filter); |
187 | 187 |
} |
188 | 188 |
if (queryOrder != null) { |
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/DefaultFeatureQueryOrder.java | ||
---|---|---|
30 | 30 |
import java.util.NoSuchElementException; |
31 | 31 |
import org.apache.commons.lang3.StringUtils; |
32 | 32 |
import org.gvsig.expressionevaluator.Expression; |
33 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
33 | 34 |
import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException; |
34 | 35 |
import org.gvsig.fmap.dal.feature.Feature; |
35 | 36 |
import org.gvsig.fmap.dal.feature.FeatureQueryOrder; |
36 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator; |
|
37 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
|
|
37 | 38 |
import org.gvsig.tools.ToolsLocator; |
38 | 39 |
import org.gvsig.tools.dynobject.DynStruct; |
39 | 40 |
import org.gvsig.tools.evaluator.Evaluator; |
... | ... | |
107 | 108 |
throws PersistenceException { |
108 | 109 |
state.set("attributeName", this.attributeName); |
109 | 110 |
state.set("ascending", this.ascending); |
110 |
if(evaluator instanceof Persistent){
|
|
111 |
if(evaluator instanceof ExpressionEvaluator){
|
|
111 | 112 |
state.set("evaluator", evaluator); |
112 | 113 |
} else { |
113 | 114 |
state.setNull("evaluator"); |
... | ... | |
198 | 199 |
|
199 | 200 |
public Object add(Expression expr, boolean ascending) { |
200 | 201 |
|
201 |
Evaluator evaluator = new DefaultExpressionEvaluator(expr); |
|
202 |
Evaluator evaluator = new DefaultFeatureExpressionEvaluator(expr);
|
|
202 | 203 |
FeatureQueryOrderMember member = new FeatureQueryOrderMemberImpl( |
203 | 204 |
evaluator, |
204 | 205 |
ascending); |
... | ... | |
354 | 355 |
public static void registerPersistent() { |
355 | 356 |
DynStruct definitionMember |
356 | 357 |
= ToolsLocator.getPersistenceManager() |
357 |
.addDefinition(FeatureQueryOrderMember.class, |
|
358 |
.addDefinition(FeatureQueryOrderMemberImpl.class,
|
|
358 | 359 |
"FeatureQueryOrderMember", |
359 | 360 |
"FeatureQueryOrderMember Persistent definition", |
360 | 361 |
null, |
361 | 362 |
null); |
362 | 363 |
|
363 | 364 |
definitionMember.addDynFieldString("attributeName").setClassOfValue(String.class).setMandatory(false); |
364 |
definitionMember.addDynFieldObject("expression").setClassOfValue(Expression.class).setMandatory(false);
|
|
365 |
definitionMember.addDynFieldObject("evaluator").setClassOfValue(ExpressionEvaluator.class).setMandatory(false);
|
|
365 | 366 |
definitionMember.addDynFieldBoolean("ascending").setMandatory(false); |
366 | 367 |
|
367 | 368 |
DynStruct definition |
... | ... | |
372 | 373 |
null, |
373 | 374 |
null); |
374 | 375 |
|
375 |
definition.addDynFieldList("members").setClassOfItems(FeatureQueryOrderMember.class); |
|
376 |
definition.addDynFieldList("members").setClassOfItems(FeatureQueryOrderMemberImpl.class);
|
|
376 | 377 |
|
377 | 378 |
} |
378 | 379 |
|
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/DefaultFeatureQuery.java | ||
---|---|---|
36 | 36 |
import org.gvsig.fmap.dal.DataTypes; |
37 | 37 |
import org.gvsig.fmap.dal.exception.DataException; |
38 | 38 |
import org.gvsig.fmap.dal.exception.InitializeException; |
39 |
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator;
|
|
39 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
40 | 40 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
41 | 41 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
42 | 42 |
import org.gvsig.fmap.dal.feature.FeatureQueryOrder; |
43 | 43 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
44 | 44 |
import org.gvsig.fmap.dal.feature.FeatureType; |
45 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator; |
|
45 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
|
|
46 | 46 |
import org.gvsig.tools.ToolsLocator; |
47 | 47 |
import org.gvsig.tools.dynobject.DynStruct; |
48 | 48 |
import org.gvsig.tools.evaluator.AndEvaluator; |
... | ... | |
356 | 356 |
@Override |
357 | 357 |
public Expression getExpressionFilter() { |
358 | 358 |
if( this.filter instanceof ExpressionEvaluator ) { |
359 |
return ((ExpressionEvaluator)this.filter).getExpression();
|
|
359 |
return ((ExpressionEvaluator)this.filter).toExpression();
|
|
360 | 360 |
} |
361 | 361 |
return null; |
362 | 362 |
} |
... | ... | |
367 | 367 |
this.clearFilter(); |
368 | 368 |
return; |
369 | 369 |
} |
370 |
Evaluator x = new DefaultExpressionEvaluator(filter); |
|
370 |
Evaluator x = new DefaultFeatureExpressionEvaluator(filter);
|
|
371 | 371 |
this.setFilter(x); |
372 | 372 |
} |
373 | 373 |
|
... | ... | |
404 | 404 |
|
405 | 405 |
@Override |
406 | 406 |
public void addFilter(Expression filter) { |
407 |
Evaluator x = new DefaultExpressionEvaluator(filter); |
|
407 |
Evaluator x = new DefaultFeatureExpressionEvaluator(filter);
|
|
408 | 408 |
this.addFilter(x); |
409 | 409 |
} |
410 | 410 |
|
... | ... | |
494 | 494 |
clone.extraColumn = extraColumn.getCopy(); |
495 | 495 |
|
496 | 496 |
if( this.filter instanceof ExpressionEvaluator ) { |
497 |
Expression exp = ((ExpressionEvaluator)this.filter).getExpression();
|
|
498 |
clone.filter = new DefaultExpressionEvaluator(exp); |
|
497 |
Expression exp = ((ExpressionEvaluator)this.filter).toExpression();
|
|
498 |
clone.filter = new DefaultFeatureExpressionEvaluator(exp);
|
|
499 | 499 |
} |
500 | 500 |
|
501 | 501 |
if (groupByColumns!=null) { |
... | ... | |
566 | 566 |
state.set("attributeNames", this.attributeNames); |
567 | 567 |
|
568 | 568 |
ArrayList<Expression> filterList = new ArrayList<>(); |
569 |
if (this.filter instanceof DefaultExpressionEvaluator) { |
|
570 |
DefaultExpressionEvaluator filterExpression = (DefaultExpressionEvaluator) this.filter;
|
|
571 |
filterList.add(filterExpression.getExpression());
|
|
569 |
if (this.filter instanceof DefaultFeatureExpressionEvaluator) {
|
|
570 |
DefaultFeatureExpressionEvaluator filterExpression = (DefaultFeatureExpressionEvaluator) this.filter;
|
|
571 |
filterList.add(filterExpression.toExpression());
|
|
572 | 572 |
} else if (this.filter instanceof AndEvaluator) { |
573 | 573 |
AndEvaluator filterAnd = (AndEvaluator) this.filter; |
574 | 574 |
List<Evaluator> evaluators = filterAnd.getEvaluators(); |
575 | 575 |
for (Evaluator evaluator : evaluators) { |
576 |
if (evaluator instanceof DefaultExpressionEvaluator) { |
|
577 |
DefaultExpressionEvaluator expressionEvaluator = (DefaultExpressionEvaluator) evaluator;
|
|
578 |
filterList.add(expressionEvaluator.getExpression());
|
|
576 |
if (evaluator instanceof DefaultFeatureExpressionEvaluator) {
|
|
577 |
DefaultFeatureExpressionEvaluator expressionEvaluator = (DefaultFeatureExpressionEvaluator) evaluator;
|
|
578 |
filterList.add(expressionEvaluator.toExpression());
|
|
579 | 579 |
} else { |
580 | 580 |
filterList.clear(); |
581 | 581 |
LOGGER.warn(StringUtils.join("Filters in this FeatureQuery will not persist:", this.toString())); |
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/DefaultExpressionEvaluator.java | ||
---|---|---|
1 |
package org.gvsig.fmap.dal.impl.expressionevaluator; |
|
2 |
|
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.HashSet; |
|
5 |
import java.util.List; |
|
6 |
import java.util.Set; |
|
7 |
import org.gvsig.expressionevaluator.Code; |
|
8 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
9 |
import org.gvsig.expressionevaluator.Expression; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
12 |
import org.gvsig.expressionevaluator.Function; |
|
13 |
import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl; |
|
14 |
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator; |
|
15 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable; |
|
16 |
import org.gvsig.fmap.dal.feature.Feature; |
|
17 |
import org.gvsig.tools.evaluator.AbstractEvaluator; |
|
18 |
import org.gvsig.tools.evaluator.Evaluator; |
|
19 |
import org.gvsig.tools.evaluator.EvaluatorData; |
|
20 |
import org.gvsig.tools.evaluator.EvaluatorException; |
|
21 |
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo; |
|
22 |
import org.gvsig.tools.exception.BaseException; |
|
23 |
import org.gvsig.tools.lang.Cloneable; |
|
24 |
import org.slf4j.Logger; |
|
25 |
import org.slf4j.LoggerFactory; |
|
26 |
|
|
27 |
@SuppressWarnings("UseSpecificCatch") |
|
28 |
public class DefaultExpressionEvaluator |
|
29 |
extends AbstractEvaluator |
|
30 |
implements ExpressionEvaluator, Cloneable |
|
31 |
{ |
|
32 |
|
|
33 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExpressionEvaluator.class); |
|
34 |
|
|
35 |
private static class DescriptionAdapter implements Description { |
|
36 |
|
|
37 |
Function function; |
|
38 |
|
|
39 |
public DescriptionAdapter(Function function) { |
|
40 |
this.function = function; |
|
41 |
} |
|
42 |
|
|
43 |
@Override |
|
44 |
public String getName() { |
|
45 |
return this.function.name(); |
|
46 |
} |
|
47 |
|
|
48 |
@Override |
|
49 |
public String getDescription() { |
|
50 |
return this.function.description(); |
|
51 |
} |
|
52 |
|
|
53 |
@Override |
|
54 |
public String getTemplate() { |
|
55 |
return this.function.template(); |
|
56 |
} |
|
57 |
|
|
58 |
@Override |
|
59 |
public int getDataTypeCategories() { |
|
60 |
switch (this.function.group()) { |
|
61 |
case Function.GROUP_STRING: |
|
62 |
return Description.DATATYPE_CATEGORY_STRING; |
|
63 |
case Function.GROUP_BOOLEAN: |
|
64 |
return Description.DATATYPE_CATEGORY_BOOLEAN; |
|
65 |
case Function.GROUP_DATETIME: |
|
66 |
return Description.DATATYPE_CATEGORY_DATETIME; |
|
67 |
case Function.GROUP_NUMERIC: |
|
68 |
return Description.DATATYPE_CATEGORY_NUMBER; |
|
69 |
case Function.GROUP_OGC: |
|
70 |
return Description.DATATYPE_CATEGORY_ALL; |
|
71 |
default: |
|
72 |
return Description.DATATYPE_CATEGORY_ALL; |
|
73 |
} |
|
74 |
} |
|
75 |
|
|
76 |
} |
|
77 |
|
|
78 |
private FeatureSymbolTable featureSymbolTable; |
|
79 |
private SymbolTable symbolTable; |
|
80 |
private Expression expression; |
|
81 |
private Description[] availableOperators; |
|
82 |
private Description[] availableFunctions; |
|
83 |
|
|
84 |
public DefaultExpressionEvaluator(String source) { |
|
85 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
86 |
this.symbolTable = manager.createSymbolTable(); |
|
87 |
this.featureSymbolTable = new FeatureSymbolTableImpl(); |
|
88 |
this.symbolTable.addSymbolTable(this.featureSymbolTable); |
|
89 |
|
|
90 |
this.expression = manager.createExpression(); |
|
91 |
this.expression.setPhrase(source); |
|
92 |
} |
|
93 |
|
|
94 |
public DefaultExpressionEvaluator(Expression expression) { |
|
95 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
96 |
this.symbolTable = manager.createSymbolTable(); |
|
97 |
this.featureSymbolTable = new FeatureSymbolTableImpl(); |
|
98 |
this.symbolTable.addSymbolTable(this.featureSymbolTable); |
|
99 |
|
|
100 |
this.expression = expression; |
|
101 |
} |
|
102 |
|
|
103 |
@Override |
|
104 |
public String getName() { |
|
105 |
return "Genereric expression"; |
|
106 |
} |
|
107 |
|
|
108 |
@Override |
|
109 |
public String getDescription() { |
|
110 |
return this.expression.getPhrase(); |
|
111 |
} |
|
112 |
|
|
113 |
@Override |
|
114 |
public String getSQL() { |
|
115 |
return this.expression.getPhrase(); |
|
116 |
} |
|
117 |
|
|
118 |
@Override |
|
119 |
public Expression getExpression() { |
|
120 |
return expression; |
|
121 |
} |
|
122 |
|
|
123 |
@Override |
|
124 |
public SymbolTable getSymbolTable() { |
|
125 |
return this.symbolTable; |
|
126 |
} |
|
127 |
|
|
128 |
@Override |
|
129 |
public Object evaluate(EvaluatorData data) throws EvaluatorException { |
|
130 |
this.featureSymbolTable.setFeature((Feature) data); |
|
131 |
Object v = this.expression.execute(this.symbolTable); |
|
132 |
return v; |
|
133 |
} |
|
134 |
|
|
135 |
@Override |
|
136 |
public EvaluatorFieldsInfo getFieldsInfo() { |
|
137 |
final Set<String> names = new HashSet<>(); |
|
138 |
try { |
|
139 |
this.expression.getCode().accept((Object code) -> { |
|
140 |
if (code instanceof Code.Identifier) { |
|
141 |
Code.Identifier identifier = (Code.Identifier) code; |
|
142 |
names.add(identifier.name()); |
|
143 |
} |
|
144 |
}); |
|
145 |
EvaluatorFieldsInfo info = new EvaluatorFieldsInfo(); |
|
146 |
for (String name : names) { |
|
147 |
info.addFieldValue(name); |
|
148 |
} |
|
149 |
return info; |
|
150 |
} catch (BaseException ex) { |
|
151 |
throw new RuntimeException("Can't calculate fields information.", ex); |
|
152 |
} |
|
153 |
} |
|
154 |
|
|
155 |
@Override |
|
156 |
public Description[] getAvailableOperators() { |
|
157 |
if (availableOperators == null) { |
|
158 |
List<Description> l = new ArrayList<>(); |
|
159 |
for (Function function : getSymbolTable()) { |
|
160 |
if (function.isOperator()) { |
|
161 |
l.add(new DescriptionAdapter(function)); |
|
162 |
} |
|
163 |
} |
|
164 |
this.availableOperators = l.toArray(new Description[l.size()]); |
|
165 |
} |
|
166 |
return availableOperators; |
|
167 |
} |
|
168 |
|
|
169 |
@Override |
|
170 |
public Description[] getAvailableFunctions() { |
|
171 |
if (availableFunctions == null) { |
|
172 |
List<Description> l = new ArrayList<>(); |
|
173 |
for (Function function : getSymbolTable()) { |
|
174 |
if (!function.isOperator()) { |
|
175 |
l.add(new DescriptionAdapter(function)); |
|
176 |
} |
|
177 |
} |
|
178 |
this.availableFunctions = l.toArray(new Description[l.size()]); |
|
179 |
} |
|
180 |
return availableFunctions; |
|
181 |
} |
|
182 |
|
|
183 |
@Override |
|
184 |
public Evaluator clone() throws CloneNotSupportedException { |
|
185 |
DefaultExpressionEvaluator other = (DefaultExpressionEvaluator) super.clone(); |
|
186 |
other.expression = this.expression.clone(); |
|
187 |
other.availableFunctions = null; |
|
188 |
other.availableOperators = null; |
|
189 |
|
|
190 |
if (this.featureSymbolTable != null) { |
|
191 |
other.featureSymbolTable = this.featureSymbolTable.clone(); |
|
192 |
} |
|
193 |
if (this.symbolTable != null) { |
|
194 |
other.symbolTable = this.symbolTable.clone(); |
|
195 |
} |
|
196 |
return other; |
|
197 |
} |
|
198 |
|
|
199 |
} |
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/DefaultEvaluatorFactory.java | ||
---|---|---|
11 | 11 |
|
12 | 12 |
@Override |
13 | 13 |
public Evaluator createEvaluator(String phrase) { |
14 |
Evaluator e = new DefaultExpressionEvaluator(phrase); |
|
14 |
Evaluator e = new DefaultFeatureExpressionEvaluator(phrase);
|
|
15 | 15 |
return e; |
16 | 16 |
} |
17 | 17 |
|
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/DefaultFeatureExpressionEvaluator.java | ||
---|---|---|
1 |
package org.gvsig.fmap.dal.impl.expressionevaluator; |
|
2 |
|
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.HashSet; |
|
5 |
import java.util.List; |
|
6 |
import java.util.Set; |
|
7 |
import org.gvsig.expressionevaluator.Code; |
|
8 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
9 |
import org.gvsig.expressionevaluator.Expression; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
12 |
import org.gvsig.expressionevaluator.Function; |
|
13 |
import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl; |
|
14 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
15 |
import org.gvsig.expressionevaluator.impl.DefaultExpression; |
|
16 |
import org.gvsig.expressionevaluator.spi.BaseExpressionEvaluator; |
|
17 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable; |
|
18 |
import org.gvsig.fmap.dal.feature.Feature; |
|
19 |
import org.gvsig.tools.ToolsLocator; |
|
20 |
import org.gvsig.tools.dynobject.DynStruct; |
|
21 |
import org.gvsig.tools.evaluator.AbstractEvaluator; |
|
22 |
import org.gvsig.tools.evaluator.Evaluator; |
|
23 |
import org.gvsig.tools.evaluator.EvaluatorData; |
|
24 |
import org.gvsig.tools.evaluator.EvaluatorException; |
|
25 |
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo; |
|
26 |
import org.gvsig.tools.exception.BaseException; |
|
27 |
import org.gvsig.tools.lang.Cloneable; |
|
28 |
import org.gvsig.tools.persistence.PersistenceManager; |
|
29 |
import org.gvsig.tools.persistence.PersistentState; |
|
30 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
|
31 |
import org.slf4j.Logger; |
|
32 |
import org.slf4j.LoggerFactory; |
|
33 |
|
|
34 |
@SuppressWarnings("UseSpecificCatch") |
|
35 |
public class DefaultFeatureExpressionEvaluator |
|
36 |
extends AbstractEvaluator |
|
37 |
implements ExpressionEvaluator, Cloneable |
|
38 |
{ |
|
39 |
|
|
40 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureExpressionEvaluator.class); |
|
41 |
|
|
42 |
private static class DescriptionAdapter implements Description { |
|
43 |
|
|
44 |
Function function; |
|
45 |
|
|
46 |
public DescriptionAdapter(Function function) { |
|
47 |
this.function = function; |
|
48 |
} |
|
49 |
|
|
50 |
@Override |
|
51 |
public String getName() { |
|
52 |
return this.function.name(); |
|
53 |
} |
|
54 |
|
|
55 |
@Override |
|
56 |
public String getDescription() { |
|
57 |
return this.function.description(); |
|
58 |
} |
|
59 |
|
|
60 |
@Override |
|
61 |
public String getTemplate() { |
|
62 |
return this.function.template(); |
|
63 |
} |
|
64 |
|
|
65 |
@Override |
|
66 |
public int getDataTypeCategories() { |
|
67 |
switch (this.function.group()) { |
|
68 |
case Function.GROUP_STRING: |
|
69 |
return Description.DATATYPE_CATEGORY_STRING; |
|
70 |
case Function.GROUP_BOOLEAN: |
|
71 |
return Description.DATATYPE_CATEGORY_BOOLEAN; |
|
72 |
case Function.GROUP_DATETIME: |
|
73 |
return Description.DATATYPE_CATEGORY_DATETIME; |
|
74 |
case Function.GROUP_NUMERIC: |
|
75 |
return Description.DATATYPE_CATEGORY_NUMBER; |
|
76 |
case Function.GROUP_OGC: |
|
77 |
return Description.DATATYPE_CATEGORY_ALL; |
|
78 |
default: |
|
79 |
return Description.DATATYPE_CATEGORY_ALL; |
|
80 |
} |
|
81 |
} |
|
82 |
|
|
83 |
} |
|
84 |
|
|
85 |
private FeatureSymbolTable featureSymbolTable; |
|
86 |
private SymbolTable symbolTable; |
|
87 |
private Expression expression; |
|
88 |
private Description[] availableOperators; |
|
89 |
private Description[] availableFunctions; |
|
90 |
|
|
91 |
public DefaultFeatureExpressionEvaluator() { |
|
92 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
93 |
this.symbolTable = manager.createSymbolTable(); |
|
94 |
this.featureSymbolTable = new FeatureSymbolTableImpl(); |
|
95 |
this.symbolTable.addSymbolTable(this.featureSymbolTable); |
|
96 |
this.availableOperators = null; |
|
97 |
this.availableFunctions = null; |
|
98 |
} |
|
99 |
|
|
100 |
public DefaultFeatureExpressionEvaluator(String source) { |
|
101 |
this(); |
|
102 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
103 |
this.expression = manager.createExpression(); |
|
104 |
this.expression.setPhrase(source); |
|
105 |
} |
|
106 |
|
|
107 |
public DefaultFeatureExpressionEvaluator(Expression expression) { |
|
108 |
this(); |
|
109 |
this.expression = expression; |
|
110 |
} |
|
111 |
|
|
112 |
@Override |
|
113 |
public String getName() { |
|
114 |
return "Genereric expression"; |
|
115 |
} |
|
116 |
|
|
117 |
@Override |
|
118 |
public String getDescription() { |
|
119 |
return this.expression.getPhrase(); |
|
120 |
} |
|
121 |
|
|
122 |
@Override |
|
123 |
public String getSQL() { |
|
124 |
return this.expression.getPhrase(); |
|
125 |
} |
|
126 |
|
|
127 |
@Override |
|
128 |
public Expression toExpression() { |
|
129 |
return expression; |
|
130 |
} |
|
131 |
|
|
132 |
@Override |
|
133 |
public SymbolTable toSymbolTable() { |
|
134 |
return this.symbolTable; |
|
135 |
} |
|
136 |
|
|
137 |
@Override |
|
138 |
public Object evaluate(EvaluatorData data) throws EvaluatorException { |
|
139 |
this.featureSymbolTable.setFeature((Feature) data); |
|
140 |
Object v = this.expression.execute(this.symbolTable); |
|
141 |
return v; |
|
142 |
} |
|
143 |
|
|
144 |
@Override |
|
145 |
public EvaluatorFieldsInfo getFieldsInfo() { |
|
146 |
final Set<String> names = new HashSet<>(); |
|
147 |
try { |
|
148 |
this.expression.getCode().accept((Object code) -> { |
|
149 |
if (code instanceof Code.Identifier) { |
|
150 |
Code.Identifier identifier = (Code.Identifier) code; |
|
151 |
names.add(identifier.name()); |
|
152 |
} |
|
153 |
}); |
|
154 |
EvaluatorFieldsInfo info = new EvaluatorFieldsInfo(); |
|
155 |
for (String name : names) { |
|
156 |
info.addFieldValue(name); |
|
157 |
} |
|
158 |
return info; |
|
159 |
} catch (BaseException ex) { |
|
160 |
throw new RuntimeException("Can't calculate fields information.", ex); |
|
161 |
} |
|
162 |
} |
|
163 |
|
|
164 |
@Override |
|
165 |
public Description[] getAvailableOperators() { |
|
166 |
if (availableOperators == null) { |
|
167 |
List<Description> l = new ArrayList<>(); |
|
168 |
for (Function function : toSymbolTable()) { |
|
169 |
if (function.isOperator()) { |
|
170 |
l.add(new DescriptionAdapter(function)); |
|
171 |
} |
|
172 |
} |
|
173 |
this.availableOperators = l.toArray(new Description[l.size()]); |
|
174 |
} |
|
175 |
return availableOperators; |
|
176 |
} |
|
177 |
|
|
178 |
@Override |
|
179 |
public Description[] getAvailableFunctions() { |
|
180 |
if (availableFunctions == null) { |
|
181 |
List<Description> l = new ArrayList<>(); |
|
182 |
for (Function function : toSymbolTable()) { |
|
183 |
if (!function.isOperator()) { |
|
184 |
l.add(new DescriptionAdapter(function)); |
|
185 |
} |
|
186 |
} |
|
187 |
this.availableFunctions = l.toArray(new Description[l.size()]); |
|
188 |
} |
|
189 |
return availableFunctions; |
|
190 |
} |
|
191 |
|
|
192 |
@Override |
|
193 |
public Evaluator clone() throws CloneNotSupportedException { |
|
194 |
DefaultFeatureExpressionEvaluator other = (DefaultFeatureExpressionEvaluator) super.clone(); |
|
195 |
other.expression = this.expression.clone(); |
|
196 |
other.availableFunctions = null; |
|
197 |
other.availableOperators = null; |
|
198 |
|
|
199 |
if (this.featureSymbolTable != null) { |
|
200 |
other.featureSymbolTable = this.featureSymbolTable.clone(); |
|
201 |
} |
|
202 |
if (this.symbolTable != null) { |
|
203 |
other.symbolTable = this.symbolTable.clone(); |
|
204 |
} |
|
205 |
return other; |
|
206 |
} |
|
207 |
|
|
208 |
@Override |
|
209 |
public void saveToState(PersistentState ps) throws PersistenceException { |
|
210 |
ps.set("expression", expression); |
|
211 |
} |
|
212 |
|
|
213 |
@Override |
|
214 |
public void loadFromState(PersistentState state) throws PersistenceException { |
|
215 |
this.expression = (Expression) state.get("expression"); |
|
216 |
} |
|
217 |
|
|
218 |
public static void registerPersistence() { |
|
219 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
|
220 |
if (manager.getDefinition("DefaultFeatureExpressionEvaluator") == null) { |
|
221 |
DynStruct definition = manager.addDefinition(DefaultFeatureExpressionEvaluator.class, |
|
222 |
"DefaultFeatureExpressionEvaluator", "DefaultFeatureExpressionEvaluator persistence definition", null, null); |
|
223 |
definition.addDynFieldObject("expression").setClassOfValue(DefaultExpression.class).setMandatory(false); |
|
224 |
} |
|
225 |
} |
|
226 |
|
|
227 |
} |
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/DefaultDataManager.java | ||
---|---|---|
79 | 79 |
import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProviderFactory; |
80 | 80 |
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider; |
81 | 81 |
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices; |
82 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator; |
|
82 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator;
|
|
83 | 83 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression; |
84 | 84 |
import org.gvsig.fmap.dal.raster.impl.RasterStoreFactory; |
85 | 85 |
import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory; |
... | ... | |
841 | 841 |
@Override |
842 | 842 |
@Deprecated |
843 | 843 |
public Evaluator createExpresion(Expression expression) throws InitializeException { |
844 |
DefaultExpressionEvaluator exp = new DefaultExpressionEvaluator(expression);
|
|
844 |
DefaultFeatureExpressionEvaluator exp = new DefaultFeatureExpressionEvaluator(expression);
|
|
845 | 845 |
return exp; |
846 | 846 |
} |
847 | 847 |
|
... | ... | |
855 | 855 |
|
856 | 856 |
@Override |
857 | 857 |
public Evaluator createFilter(Expression expression) throws InitializeException { |
858 |
DefaultExpressionEvaluator exp = new DefaultExpressionEvaluator(expression);
|
|
858 |
DefaultFeatureExpressionEvaluator exp = new DefaultFeatureExpressionEvaluator(expression);
|
|
859 | 859 |
return exp; |
860 | 860 |
} |
861 | 861 |
|
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/DALDefaultImplLibrary.java | ||
---|---|---|
62 | 62 |
import org.gvsig.fmap.dal.feature.spi.memory.MemoryResource; |
63 | 63 |
import org.gvsig.fmap.dal.feature.spi.memory.MemoryResourceParameters; |
64 | 64 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression; |
65 |
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureExpressionEvaluator; |
|
65 | 66 |
import org.gvsig.fmap.dal.resource.impl.DefaultResourceManager; |
66 | 67 |
import org.gvsig.fmap.dal.resource.spi.MultiResource; |
67 | 68 |
import org.gvsig.fmap.dal.resource.spi.MultiResourceParameters; |
... | ... | |
132 | 133 |
DefaultFeatureSelection.registerPersistent(); |
133 | 134 |
DefaultForeingKey.registerPersistenceDefinition(); |
134 | 135 |
DefaultFeatureExtraColumns.registerPersistent(); |
136 |
DefaultFeatureExpressionEvaluator.registerPersistence(); |
|
135 | 137 |
|
136 | 138 |
DefaultFeatureStore.registerPersistenceDefinition(); |
137 | 139 |
DefaultDataServerExplorerPool.registerPersistenceDefinition(); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/DefaultSearchParameters.java | ||
---|---|---|
136 | 136 |
|
137 | 137 |
@Override |
138 | 138 |
public String toString() { |
139 |
if (this.query != null && this.query.getExpressionFilter() != null) { |
|
139 |
if (this.query != null) { // && this.query.getExpressionFilter() != null) {
|
|
140 | 140 |
try { |
141 | 141 |
StringBuilder builder = new StringBuilder(); |
142 |
builder.append(this.query.getExpressionFilter().getPhrase()); |
|
142 |
if (this.query.getExpressionFilter() != null) { |
|
143 |
builder.append(this.query.getExpressionFilter().getPhrase()); |
|
144 |
} |
|
143 | 145 |
boolean has = true; |
144 | 146 |
for (EditableFeatureAttributeDescriptor col : this.query.getExtraColumn().getColumns()) { |
145 | 147 |
if (has) { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/featureform/swing/impl/DefaultJFeaturesForm.java | ||
---|---|---|
54 | 54 |
import org.gvsig.fmap.dal.DataStore; |
55 | 55 |
import org.gvsig.fmap.dal.StoresRepository; |
56 | 56 |
import org.gvsig.fmap.dal.exception.DataException; |
57 |
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator;
|
|
57 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
58 | 58 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
59 | 59 |
import org.gvsig.fmap.dal.feature.Feature; |
60 | 60 |
import org.gvsig.fmap.dal.feature.FacadeOfAFeature; |
... | ... | |
810 | 810 |
if( currentQuery!=null ) { |
811 | 811 |
Evaluator filter = currentQuery.getFilter(); |
812 | 812 |
if( filter instanceof ExpressionEvaluator ) { |
813 |
Expression expression = ((ExpressionEvaluator)filter).getExpression();
|
|
813 |
Expression expression = ((ExpressionEvaluator)filter).toExpression();
|
|
814 | 814 |
searchPanel.setFilter(expression); |
815 | 815 |
searchPanel.search(); |
816 | 816 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/ExpressionEvaluator.java | ||
---|---|---|
1 |
package org.gvsig.fmap.dal.expressionevaluator; |
|
2 |
|
|
3 |
import org.gvsig.expressionevaluator.Expression; |
|
4 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
5 |
import org.gvsig.tools.evaluator.EvaluatorWithDescriptions; |
|
6 |
|
|
7 |
/** |
|
8 |
* |
|
9 |
* @author jjdelcerro |
|
10 |
*/ |
|
11 |
public interface ExpressionEvaluator extends EvaluatorWithDescriptions { |
|
12 |
|
|
13 |
/** |
|
14 |
* Get a SQL representation of the evaluator. |
|
15 |
* |
|
16 |
* This funcion can return a non-sql compatible expression. |
|
17 |
* |
|
18 |
* @return the SQL string. |
|
19 |
*/ |
|
20 |
@Override |
|
21 |
public String getSQL(); |
|
22 |
|
|
23 |
public Expression getExpression(); |
|
24 |
|
|
25 |
public SymbolTable getSymbolTable(); |
|
26 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionEvaluator.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl; |
|
2 |
|
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.Collection; |
|
5 |
import java.util.HashSet; |
|
6 |
import java.util.List; |
|
7 |
import java.util.Set; |
|
8 |
import org.gvsig.expressionevaluator.Code; |
|
9 |
import org.gvsig.expressionevaluator.Expression; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
12 |
import org.gvsig.expressionevaluator.Function; |
|
13 |
import org.gvsig.expressionevaluator.SupportToExpression; |
|
14 |
import org.gvsig.expressionevaluator.SupportToSymbolTable; |
|
15 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
16 |
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable; |
|
17 |
import org.gvsig.tools.ToolsLocator; |
|
18 |
import org.gvsig.tools.dynobject.DynStruct; |
|
19 |
import org.gvsig.tools.evaluator.AbstractEvaluator; |
|
20 |
import org.gvsig.tools.evaluator.Evaluator; |
|
21 |
import org.gvsig.tools.evaluator.EvaluatorData; |
|
22 |
import org.gvsig.tools.evaluator.EvaluatorException; |
|
23 |
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo; |
|
24 |
import org.gvsig.tools.evaluator.EvaluatorWithDescriptions; |
|
25 |
import org.gvsig.tools.exception.BaseException; |
|
26 |
import org.gvsig.tools.lang.Cloneable; |
|
27 |
import org.gvsig.tools.persistence.PersistenceManager; |
|
28 |
import org.gvsig.tools.persistence.Persistent; |
|
29 |
import org.gvsig.tools.persistence.PersistentState; |
|
30 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
|
31 |
import org.gvsig.tools.util.ListBuilder; |
|
32 |
import org.slf4j.Logger; |
|
33 |
import org.slf4j.LoggerFactory; |
|
34 |
|
|
35 |
@SuppressWarnings("UseSpecificCatch") |
|
36 |
public class DefaultExpressionEvaluator |
|
37 |
extends AbstractEvaluator |
|
38 |
implements EvaluatorWithDescriptions, Cloneable, SupportToExpression, Persistent, SupportToSymbolTable |
|
39 |
{ |
|
40 |
|
|
41 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExpressionEvaluator.class); |
|
42 |
|
|
43 |
private static class DescriptionAdapter implements Description { |
|
44 |
|
|
45 |
Function function; |
|
46 |
|
|
47 |
public DescriptionAdapter(Function function) { |
|
48 |
this.function = function; |
|
49 |
} |
|
50 |
|
|
51 |
@Override |
|
52 |
public String getName() { |
|
53 |
return this.function.name(); |
|
54 |
} |
|
55 |
|
|
56 |
@Override |
|
57 |
public String getDescription() { |
|
58 |
return this.function.description(); |
|
59 |
} |
|
60 |
|
|
61 |
@Override |
|
62 |
public String getTemplate() { |
|
63 |
return this.function.template(); |
|
64 |
} |
|
65 |
|
|
66 |
@Override |
|
67 |
public int getDataTypeCategories() { |
|
68 |
switch (this.function.group()) { |
|
69 |
case Function.GROUP_STRING: |
|
70 |
return Description.DATATYPE_CATEGORY_STRING; |
|
71 |
case Function.GROUP_BOOLEAN: |
|
72 |
return Description.DATATYPE_CATEGORY_BOOLEAN; |
|
73 |
case Function.GROUP_DATETIME: |
|
74 |
return Description.DATATYPE_CATEGORY_DATETIME; |
|
75 |
case Function.GROUP_NUMERIC: |
|
76 |
return Description.DATATYPE_CATEGORY_NUMBER; |
|
77 |
case Function.GROUP_OGC: |
|
78 |
return Description.DATATYPE_CATEGORY_ALL; |
|
79 |
default: |
|
80 |
return Description.DATATYPE_CATEGORY_ALL; |
|
81 |
} |
|
82 |
} |
|
83 |
|
|
84 |
} |
|
85 |
|
|
86 |
private static class DataSymbolTable extends AbstractSymbolTable { |
|
87 |
|
|
88 |
EvaluatorData data; |
|
89 |
|
|
90 |
public DataSymbolTable() { |
|
91 |
super(); |
|
92 |
} |
|
93 |
|
|
94 |
public void setData(EvaluatorData data) { |
|
95 |
this.data = data; |
|
96 |
} |
|
97 |
|
|
98 |
@Override |
|
99 |
public boolean exists(String name) { |
|
100 |
return data.hasDataValue(name); |
|
101 |
} |
|
102 |
|
|
103 |
@Override |
|
104 |
public Object value(String name) { |
|
105 |
return data.getDataValue(name); |
|
106 |
} |
|
107 |
|
|
108 |
@Override |
|
109 |
public Collection<String> localvariables() { |
|
110 |
List<String> names = ListBuilder.create(data.getDataNames()); |
|
111 |
return names; |
|
112 |
} |
|
113 |
|
|
114 |
@Override |
|
115 |
public DataSymbolTable clone() throws CloneNotSupportedException { |
|
116 |
SymbolTable other = super.clone(); |
|
117 |
return (DataSymbolTable) other; |
|
118 |
} |
|
119 |
|
|
120 |
} |
|
121 |
|
|
122 |
private DataSymbolTable dataSymbolTable; |
|
123 |
private SymbolTable symbolTable; |
|
124 |
private Expression expression; |
|
125 |
private Description[] availableOperators; |
|
126 |
private Description[] availableFunctions; |
|
127 |
|
|
128 |
public DefaultExpressionEvaluator(String source) { |
|
129 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
130 |
this.symbolTable = manager.createSymbolTable(); |
|
131 |
this.dataSymbolTable = new DataSymbolTable(); |
|
132 |
this.symbolTable.addSymbolTable(this.dataSymbolTable); |
|
133 |
|
|
134 |
this.expression = manager.createExpression(); |
|
135 |
this.expression.setPhrase(source); |
|
136 |
} |
|
137 |
|
|
138 |
public DefaultExpressionEvaluator(Expression expression) { |
|
139 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
140 |
this.symbolTable = manager.createSymbolTable(); |
|
141 |
this.dataSymbolTable = new DataSymbolTable(); |
|
142 |
this.symbolTable.addSymbolTable(this.dataSymbolTable); |
|
143 |
|
|
144 |
this.expression = expression; |
|
145 |
} |
|
146 |
|
|
147 |
@Override |
|
148 |
public String getName() { |
|
149 |
return "Genereric expression"; |
|
150 |
} |
|
151 |
|
|
152 |
@Override |
|
153 |
public String getDescription() { |
|
154 |
return this.expression.getPhrase(); |
|
155 |
} |
|
156 |
|
|
157 |
@Override |
|
158 |
public String getSQL() { |
|
159 |
return this.expression.getPhrase(); |
|
160 |
} |
|
161 |
|
|
162 |
@Override |
|
163 |
public Expression toExpression() { |
|
164 |
return expression; |
|
165 |
} |
|
166 |
|
|
167 |
@Override |
|
168 |
public SymbolTable toSymbolTable() { |
|
169 |
return this.symbolTable; |
|
170 |
} |
|
171 |
|
|
172 |
@Override |
|
173 |
public Object evaluate(EvaluatorData data) throws EvaluatorException { |
|
174 |
this.dataSymbolTable.setData(data); |
|
175 |
Object v = this.expression.execute(this.symbolTable); |
|
176 |
return v; |
|
177 |
} |
|
178 |
|
|
179 |
@Override |
|
180 |
public EvaluatorFieldsInfo getFieldsInfo() { |
|
181 |
final Set<String> names = new HashSet<>(); |
|
182 |
try { |
|
183 |
this.expression.getCode().accept((Object code) -> { |
|
184 |
if (code instanceof Code.Identifier) { |
|
185 |
Code.Identifier identifier = (Code.Identifier) code; |
|
186 |
names.add(identifier.name()); |
|
187 |
} |
|
188 |
}); |
|
189 |
EvaluatorFieldsInfo info = new EvaluatorFieldsInfo(); |
|
190 |
for (String name : names) { |
|
191 |
info.addFieldValue(name); |
|
192 |
} |
|
193 |
return info; |
|
194 |
} catch (BaseException ex) { |
|
195 |
throw new RuntimeException("Can't calculate fields information.", ex); |
|
196 |
} |
|
197 |
} |
|
198 |
|
|
199 |
@Override |
|
200 |
public Description[] getAvailableOperators() { |
|
201 |
if (availableOperators == null) { |
|
202 |
List<Description> l = new ArrayList<>(); |
|
203 |
for (Function function : toSymbolTable()) { |
|
204 |
if (function.isOperator()) { |
|
205 |
l.add(new DescriptionAdapter(function)); |
|
206 |
} |
|
207 |
} |
|
208 |
this.availableOperators = l.toArray(new Description[l.size()]); |
|
209 |
} |
|
210 |
return availableOperators; |
|
211 |
} |
|
212 |
|
|
213 |
@Override |
|
214 |
public Description[] getAvailableFunctions() { |
|
215 |
if (availableFunctions == null) { |
|
216 |
List<Description> l = new ArrayList<>(); |
|
217 |
for (Function function : toSymbolTable()) { |
|
218 |
if (!function.isOperator()) { |
|
219 |
l.add(new DescriptionAdapter(function)); |
|
220 |
} |
|
221 |
} |
|
222 |
this.availableFunctions = l.toArray(new Description[l.size()]); |
|
223 |
} |
|
224 |
return availableFunctions; |
|
225 |
} |
|
226 |
|
|
227 |
@Override |
|
228 |
public Evaluator clone() throws CloneNotSupportedException { |
|
229 |
DefaultExpressionEvaluator other = (DefaultExpressionEvaluator) super.clone(); |
|
230 |
other.expression = this.expression.clone(); |
|
231 |
other.availableFunctions = null; |
|
232 |
other.availableOperators = null; |
|
233 |
|
|
234 |
if (this.dataSymbolTable != null) { |
|
235 |
other.dataSymbolTable = this.dataSymbolTable.clone(); |
|
236 |
} |
|
237 |
if (this.symbolTable != null) { |
|
238 |
other.symbolTable = this.symbolTable.clone(); |
|
239 |
} |
|
240 |
return other; |
|
241 |
} |
|
242 |
|
|
243 |
@Override |
|
244 |
public void saveToState(PersistentState state) throws PersistenceException { |
|
245 |
|
|
246 |
state.set("expression", expression); |
|
247 |
} |
|
248 |
|
|
249 |
@Override |
|
250 |
public void loadFromState(PersistentState state) throws PersistenceException { |
|
251 |
expression = (Expression) state.get("expression"); |
|
252 |
availableFunctions = null; |
|
253 |
availableOperators = null; |
|
254 |
|
|
255 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
256 |
this.symbolTable = manager.createSymbolTable(); |
|
257 |
this.dataSymbolTable = new DataSymbolTable(); |
|
258 |
this.symbolTable.addSymbolTable(this.dataSymbolTable); |
|
259 |
|
|
260 |
} |
|
261 |
|
|
262 |
|
|
263 |
public static void registerPersistence() { |
|
264 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
|
265 |
if (manager.getDefinition("DefaultExpressionEvaluator") == null) { |
|
266 |
DynStruct definition = manager.addDefinition(DefaultExpressionEvaluator.class, |
|
267 |
"DefaultExpressionEvaluator", "DefaultExpressionEvaluator persistence definition", null, null); |
|
268 |
definition.addDynFieldObject("expression").setClassOfValue(DefaultExpression.class).setMandatory(false); |
|
269 |
} |
|
270 |
} |
|
271 |
|
|
272 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpression.java | ||
---|---|---|
6 | 6 |
import org.gvsig.expressionevaluator.Code; |
7 | 7 |
import org.gvsig.expressionevaluator.Compiler; |
8 | 8 |
import org.gvsig.expressionevaluator.Expression; |
9 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
9 | 10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
10 | 11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
11 | 12 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
... | ... | |
351 | 352 |
|
352 | 353 |
@Override |
353 | 354 |
public Evaluator toEvaluator() { |
354 |
DefaultExpressionEvaluator evaluator = new DefaultExpressionEvaluator(this);
|
|
355 |
ExpressionEvaluator evaluator = this.manager.createExpressionEvaluator(this);
|
|
355 | 356 |
return evaluator; |
356 | 357 |
} |
357 | 358 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionEvaluatorManager.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl; |
2 | 2 |
|
3 |
import org.gvsig.expressionevaluator.spi.BaseExpressionEvaluator; |
|
3 | 4 |
import java.io.InputStream; |
4 | 5 |
import java.io.StringWriter; |
5 | 6 |
import java.net.URI; |
... | ... | |
30 | 31 |
import org.gvsig.expressionevaluator.SymbolTable; |
31 | 32 |
import org.gvsig.expressionevaluator.SymbolTableFactory; |
32 | 33 |
import org.gvsig.expressionevaluator.Compiler; |
34 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
33 | 35 |
import org.gvsig.expressionevaluator.Formatter; |
34 | 36 |
import org.gvsig.expressionevaluator.GrammarSet; |
35 | 37 |
import org.gvsig.expressionevaluator.ReprMethod; |
... | ... | |
480 | 482 |
public void registerExpressionBuilderFormatter(Formatter<ExpressionBuilder.Value> formatter) { |
481 | 483 |
this.expressionBuilderFormatter = formatter; |
482 | 484 |
} |
485 |
|
|
486 |
@Override |
|
487 |
public ExpressionEvaluator createExpressionEvaluator(Expression expression) { |
|
488 |
return new BaseExpressionEvaluator(expression); |
|
489 |
} |
|
483 | 490 |
|
484 | 491 |
} |
485 | 492 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/ExpressionEvaluatorImplLibrary.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl; |
2 | 2 |
|
3 |
import org.gvsig.expressionevaluator.spi.BaseExpressionEvaluator; |
|
3 | 4 |
import org.gvsig.expressionevaluator.DataTypes; |
4 | 5 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLibrary; |
5 | 6 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
... | ... | |
57 | 58 |
manager.registerGrammar(new BasicGrammarFactory()); |
58 | 59 |
|
59 | 60 |
DefaultExpression.registerPersistence(); |
60 |
DefaultExpressionEvaluator.registerPersistence();
|
|
61 |
BaseExpressionEvaluator.registerPersistence();
|
|
61 | 62 |
|
62 | 63 |
DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager(); |
63 | 64 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionEvaluatorManager.java | ||
---|---|---|
87 | 87 |
public List<ClassLoader> getClassLoaders(); |
88 | 88 |
|
89 | 89 |
public void populateSymbolTable(SymbolTable aSymbolTable); |
90 |
|
|
91 |
public ExpressionEvaluator createExpressionEvaluator(Expression expression); |
|
90 | 92 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/spi/BaseExpressionEvaluator.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.spi; |
|
2 |
|
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.Collection; |
|
5 |
import java.util.HashSet; |
|
6 |
import java.util.List; |
|
7 |
import java.util.Set; |
|
8 |
import org.gvsig.expressionevaluator.Code; |
|
9 |
import org.gvsig.expressionevaluator.Expression; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluator; |
|
11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
12 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
13 |
import org.gvsig.expressionevaluator.Function; |
|
14 |
import org.gvsig.expressionevaluator.SupportToExpression; |
|
15 |
import org.gvsig.expressionevaluator.SupportToSymbolTable; |
|
16 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
17 |
import org.gvsig.tools.ToolsLocator; |
|
18 |
import org.gvsig.tools.dynobject.DynStruct; |
|
19 |
import org.gvsig.tools.evaluator.AbstractEvaluator; |
|
20 |
import org.gvsig.tools.evaluator.Evaluator; |
|
21 |
import org.gvsig.tools.evaluator.EvaluatorData; |
|
22 |
import org.gvsig.tools.evaluator.EvaluatorException; |
|
23 |
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo; |
|
24 |
import org.gvsig.tools.exception.BaseException; |
|
25 |
import org.gvsig.tools.lang.Cloneable; |
|
26 |
import org.gvsig.tools.persistence.PersistenceManager; |
|
27 |
import org.gvsig.tools.persistence.PersistentState; |
|
28 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
|
29 |
import org.gvsig.tools.util.ListBuilder; |
|
30 |
import org.slf4j.Logger; |
|
31 |
import org.slf4j.LoggerFactory; |
|
32 |
|
|
33 |
@SuppressWarnings("UseSpecificCatch") |
|
34 |
public class BaseExpressionEvaluator |
|
35 |
extends AbstractEvaluator |
|
36 |
implements ExpressionEvaluator, Cloneable, SupportToExpression, SupportToSymbolTable |
|
37 |
{ |
|
38 |
|
|
39 |
private static final Logger LOGGER = LoggerFactory.getLogger(BaseExpressionEvaluator.class); |
|
40 |
|
|
41 |
private static class DescriptionAdapter implements Description { |
|
42 |
|
|
43 |
Function function; |
|
44 |
|
|
45 |
public DescriptionAdapter(Function function) { |
|
46 |
this.function = function; |
|
47 |
} |
|
48 |
|
|
49 |
@Override |
|
50 |
public String getName() { |
|
51 |
return this.function.name(); |
|
52 |
} |
|
53 |
|
|
54 |
@Override |
|
55 |
public String getDescription() { |
|
56 |
return this.function.description(); |
|
57 |
} |
|
58 |
|
|
59 |
@Override |
|
60 |
public String getTemplate() { |
|
61 |
return this.function.template(); |
|
62 |
} |
|
63 |
|
|
64 |
@Override |
|
65 |
public int getDataTypeCategories() { |
|
66 |
switch (this.function.group()) { |
|
67 |
case Function.GROUP_STRING: |
|
68 |
return Description.DATATYPE_CATEGORY_STRING; |
|
69 |
case Function.GROUP_BOOLEAN: |
|
70 |
return Description.DATATYPE_CATEGORY_BOOLEAN; |
|
71 |
case Function.GROUP_DATETIME: |
|
72 |
return Description.DATATYPE_CATEGORY_DATETIME; |
|
73 |
case Function.GROUP_NUMERIC: |
|
74 |
return Description.DATATYPE_CATEGORY_NUMBER; |
|
75 |
case Function.GROUP_OGC: |
|
76 |
return Description.DATATYPE_CATEGORY_ALL; |
|
77 |
default: |
|
78 |
return Description.DATATYPE_CATEGORY_ALL; |
|
79 |
} |
|
80 |
} |
|
81 |
|
|
82 |
} |
|
83 |
|
|
84 |
private static class DataSymbolTable extends AbstractSymbolTable { |
|
85 |
|
|
86 |
EvaluatorData data; |
|
87 |
|
|
88 |
public DataSymbolTable() { |
|
89 |
super(); |
|
90 |
} |
|
91 |
|
|
92 |
public void setData(EvaluatorData data) { |
|
93 |
this.data = data; |
|
94 |
} |
|
95 |
|
|
96 |
@Override |
|
97 |
public boolean exists(String name) { |
|
98 |
return data.hasDataValue(name); |
|
99 |
} |
|
100 |
|
|
101 |
@Override |
|
102 |
public Object value(String name) { |
|
103 |
return data.getDataValue(name); |
|
104 |
} |
|
105 |
|
|
106 |
@Override |
|
107 |
public Collection<String> localvariables() { |
|
108 |
List<String> names = ListBuilder.create(data.getDataNames()); |
|
109 |
return names; |
|
110 |
} |
|
111 |
|
|
112 |
@Override |
|
113 |
public DataSymbolTable clone() throws CloneNotSupportedException { |
|
114 |
SymbolTable other = super.clone(); |
|
115 |
return (DataSymbolTable) other; |
|
116 |
} |
|
117 |
|
|
118 |
} |
|
119 |
|
|
120 |
private DataSymbolTable dataSymbolTable; |
|
121 |
private SymbolTable symbolTable; |
|
122 |
private Expression expression; |
|
123 |
private Description[] availableOperators; |
|
124 |
private Description[] availableFunctions; |
|
125 |
|
|
126 |
public BaseExpressionEvaluator(String source) { |
|
127 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
128 |
this.symbolTable = manager.createSymbolTable(); |
|
129 |
this.dataSymbolTable = new DataSymbolTable(); |
|
130 |
this.symbolTable.addSymbolTable(this.dataSymbolTable); |
|
131 |
|
|
132 |
this.expression = manager.createExpression(); |
|
133 |
this.expression.setPhrase(source); |
|
134 |
} |
|
135 |
|
|
136 |
public BaseExpressionEvaluator(Expression expression) { |
|
137 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
138 |
this.symbolTable = manager.createSymbolTable(); |
|
139 |
this.dataSymbolTable = new DataSymbolTable(); |
|
140 |
this.symbolTable.addSymbolTable(this.dataSymbolTable); |
|
141 |
|
|
142 |
this.expression = expression; |
|
143 |
} |
|
144 |
|
|
145 |
@Override |
|
146 |
public String getName() { |
|
147 |
return "Genereric expression"; |
|
148 |
} |
|
149 |
|
|
150 |
@Override |
|
151 |
public String getDescription() { |
|
152 |
return this.expression.getPhrase(); |
|
153 |
} |
|
154 |
|
|
155 |
@Override |
|
156 |
public String getSQL() { |
|
157 |
return this.expression.getPhrase(); |
|
158 |
} |
|
159 |
|
|
160 |
@Override |
|
161 |
public Expression toExpression() { |
|
162 |
return expression; |
|
163 |
} |
|
164 |
|
|
165 |
@Override |
|
166 |
public SymbolTable toSymbolTable() { |
|
167 |
return this.symbolTable; |
|
168 |
} |
|
169 |
|
|
170 |
@Override |
|
171 |
public Object evaluate(EvaluatorData data) throws EvaluatorException { |
|
172 |
this.dataSymbolTable.setData(data); |
|
173 |
Object v = this.expression.execute(this.symbolTable); |
|
174 |
return v; |
|
175 |
} |
|
176 |
|
|
177 |
@Override |
|
178 |
public EvaluatorFieldsInfo getFieldsInfo() { |
|
179 |
final Set<String> names = new HashSet<>(); |
|
180 |
try { |
|
181 |
this.expression.getCode().accept((Object code) -> { |
|
182 |
if (code instanceof Code.Identifier) { |
|
183 |
Code.Identifier identifier = (Code.Identifier) code; |
|
184 |
names.add(identifier.name()); |
|
185 |
} |
|
186 |
}); |
|
187 |
EvaluatorFieldsInfo info = new EvaluatorFieldsInfo(); |
|
188 |
for (String name : names) { |
|
189 |
info.addFieldValue(name); |
|
190 |
} |
|
191 |
return info; |
|
192 |
} catch (BaseException ex) { |
|
193 |
throw new RuntimeException("Can't calculate fields information.", ex); |
|
194 |
} |
|
195 |
} |
|
196 |
|
|
197 |
@Override |
|
198 |
public Description[] getAvailableOperators() { |
|
199 |
if (availableOperators == null) { |
|
200 |
List<Description> l = new ArrayList<>(); |
|
201 |
for (Function function : toSymbolTable()) { |
|
202 |
if (function.isOperator()) { |
|
203 |
l.add(new DescriptionAdapter(function)); |
|
204 |
} |
|
205 |
} |
|
206 |
this.availableOperators = l.toArray(new Description[l.size()]); |
|
207 |
} |
|
208 |
return availableOperators; |
|
209 |
} |
|
210 |
|
|
211 |
@Override |
|
212 |
public Description[] getAvailableFunctions() { |
|
213 |
if (availableFunctions == null) { |
|
214 |
List<Description> l = new ArrayList<>(); |
|
215 |
for (Function function : toSymbolTable()) { |
|
216 |
if (!function.isOperator()) { |
|
217 |
l.add(new DescriptionAdapter(function)); |
|
218 |
} |
|
219 |
} |
|
220 |
this.availableFunctions = l.toArray(new Description[l.size()]); |
|
221 |
} |
|
222 |
return availableFunctions; |
|
223 |
} |
|
224 |
|
|
225 |
@Override |
|
226 |
public Evaluator clone() throws CloneNotSupportedException { |
|
227 |
BaseExpressionEvaluator other = (BaseExpressionEvaluator) super.clone(); |
|
228 |
other.expression = this.expression.clone(); |
|
229 |
other.availableFunctions = null; |
|
230 |
other.availableOperators = null; |
|
231 |
|
|
232 |
if (this.dataSymbolTable != null) { |
|
233 |
other.dataSymbolTable = this.dataSymbolTable.clone(); |
|
234 |
} |
|
235 |
if (this.symbolTable != null) { |
|
236 |
other.symbolTable = this.symbolTable.clone(); |
|
237 |
} |
|
238 |
return other; |
|
239 |
} |
|
240 |
|
|
241 |
@Override |
|
242 |
public void saveToState(PersistentState state) throws PersistenceException { |
|
243 |
|
|
244 |
state.set("expression", expression); |
|
245 |
} |
|
246 |
|
|
247 |
@Override |
|
248 |
public void loadFromState(PersistentState state) throws PersistenceException { |
|
249 |
expression = (Expression) state.get("expression"); |
|
250 |
availableFunctions = null; |
|
251 |
availableOperators = null; |
|
252 |
|
|
253 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
254 |
this.symbolTable = manager.createSymbolTable(); |
|
255 |
this.dataSymbolTable = new DataSymbolTable(); |
|
256 |
this.symbolTable.addSymbolTable(this.dataSymbolTable); |
|
257 |
|
|
258 |
} |
|
259 |
|
|
260 |
|
|
261 |
public static void registerPersistence() { |
|
262 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
|
263 |
if (manager.getDefinition("DefaultExpressionEvaluator") == null) { |
|
264 |
DynStruct definition = manager.addDefinition(BaseExpressionEvaluator.class, |
|
265 |
"DefaultExpressionEvaluator", "DefaultExpressionEvaluator persistence definition", null, null); |
|
266 |
definition.addDynFieldObject("expression").setClassOfValue(Expression.class).setMandatory(false); |
|
267 |
} |
|
268 |
} |
|
269 |
|
|
270 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionEvaluator.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator; |
|
2 |
|
|
3 |
import org.gvsig.tools.evaluator.EvaluatorWithDescriptions; |
|
4 |
import org.gvsig.tools.persistence.Persistent; |
|
5 |
|
|
6 |
/** |
|
7 |
* |
|
8 |
* @author jjdelcerro |
|
9 |
*/ |
|
10 |
public interface ExpressionEvaluator extends EvaluatorWithDescriptions, Persistent, SupportToExpression, SupportToSymbolTable { |
|
11 |
|
|
12 |
/** |
|
13 |
* Get a SQL representation of the evaluator. |
|
14 |
* |
|
15 |
* This funcion can return a non-sql compatible expression. |
|
16 |
* |
|
17 |
* @return the SQL string. |
|
18 |
*/ |
|
19 |
@Override |
|
20 |
public String getSQL(); |
|
21 |
|
|
22 |
} |
Also available in: Unified diff