Revision 43983 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
DefaultExpressionEvaluatorManager.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl; |
2 | 2 |
|
3 |
import java.util.Collections;
|
|
3 |
import java.util.Collection; |
|
4 | 4 |
import java.util.HashMap; |
5 | 5 |
import java.util.Map; |
6 |
import org.apache.commons.lang3.StringUtils; |
|
7 | 6 |
import org.gvsig.expressionevaluator.Code; |
8 | 7 |
import org.gvsig.expressionevaluator.CodeBuilder; |
9 | 8 |
import org.gvsig.expressionevaluator.Compiler; |
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluator;
|
|
9 |
import org.gvsig.expressionevaluator.Expression; |
|
11 | 10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
12 |
import org.gvsig.expressionevaluator.Function; |
|
13 | 11 |
import org.gvsig.expressionevaluator.Interpreter; |
14 | 12 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
15 | 13 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
16 | 14 |
import org.gvsig.expressionevaluator.SymbolTable; |
17 |
import org.gvsig.expressionevaluator.impl.function.numeric.ACosFunction; |
|
18 |
import org.gvsig.expressionevaluator.impl.function.numeric.ASinFunction; |
|
19 |
import org.gvsig.expressionevaluator.impl.function.numeric.ATanFunction; |
|
20 |
import org.gvsig.expressionevaluator.impl.function.numeric.AbsFunction; |
|
21 |
import org.gvsig.expressionevaluator.impl.function.numeric.BitAndFunction; |
|
22 |
import org.gvsig.expressionevaluator.impl.function.numeric.BitOrFunction; |
|
23 |
import org.gvsig.expressionevaluator.impl.function.numeric.BitXorFunction; |
|
24 |
import org.gvsig.expressionevaluator.impl.function.numeric.CeilFunction; |
|
25 |
import org.gvsig.expressionevaluator.impl.function.numeric.CosFunction; |
|
26 |
import org.gvsig.expressionevaluator.impl.function.numeric.CoshFunction; |
|
27 |
import org.gvsig.expressionevaluator.impl.function.numeric.CotFunction; |
|
28 |
import org.gvsig.expressionevaluator.impl.function.numeric.DegreesFunction; |
|
29 |
import org.gvsig.expressionevaluator.impl.function.numeric.ExpFunction; |
|
30 |
import org.gvsig.expressionevaluator.impl.function.numeric.FloorFunction; |
|
31 |
import org.gvsig.expressionevaluator.impl.function.numeric.Log10Function; |
|
32 |
import org.gvsig.expressionevaluator.impl.function.numeric.LogFunction; |
|
33 |
import org.gvsig.expressionevaluator.impl.function.numeric.PiFunction; |
|
34 |
import org.gvsig.expressionevaluator.impl.function.numeric.PowFunction; |
|
35 |
import org.gvsig.expressionevaluator.impl.function.numeric.RadiansFunction; |
|
36 |
import org.gvsig.expressionevaluator.impl.function.numeric.RandFunction; |
|
37 |
import org.gvsig.expressionevaluator.impl.function.numeric.RoundFunction; |
|
38 |
import org.gvsig.expressionevaluator.impl.function.numeric.SignFunction; |
|
39 |
import org.gvsig.expressionevaluator.impl.function.numeric.SinFunction; |
|
40 |
import org.gvsig.expressionevaluator.impl.function.numeric.SinhFunction; |
|
41 |
import org.gvsig.expressionevaluator.impl.function.numeric.SqrtFunction; |
|
42 |
import org.gvsig.expressionevaluator.impl.function.numeric.TanFunction; |
|
43 |
import org.gvsig.expressionevaluator.impl.function.numeric.TanhFunction; |
|
44 |
import org.gvsig.expressionevaluator.impl.function.numeric.ZeroFunction; |
|
45 |
import org.gvsig.expressionevaluator.impl.function.obj.GetattrFunction; |
|
46 |
import org.gvsig.expressionevaluator.impl.function.obj.InvokeMethodFunction; |
|
47 |
import org.gvsig.expressionevaluator.impl.function.operator.AddOperator; |
|
48 |
import org.gvsig.expressionevaluator.impl.function.operator.AndOperator; |
|
49 |
import org.gvsig.expressionevaluator.impl.function.operator.DivOperator; |
|
50 |
import org.gvsig.expressionevaluator.impl.function.operator.EqOperator; |
|
51 |
import org.gvsig.expressionevaluator.impl.function.operator.GeOperator; |
|
52 |
import org.gvsig.expressionevaluator.impl.function.operator.GtOperator; |
|
53 |
import org.gvsig.expressionevaluator.impl.function.operator.LeOperator; |
|
54 |
import org.gvsig.expressionevaluator.impl.function.operator.LtOperator; |
|
55 |
import org.gvsig.expressionevaluator.impl.function.operator.ModOperator; |
|
56 |
import org.gvsig.expressionevaluator.impl.function.operator.MulOperator; |
|
57 |
import org.gvsig.expressionevaluator.impl.function.operator.NeOperator; |
|
58 |
import org.gvsig.expressionevaluator.impl.function.operator.NotOperator; |
|
59 |
import org.gvsig.expressionevaluator.impl.function.operator.OrOperator; |
|
60 |
import org.gvsig.expressionevaluator.impl.function.operator.SubstOperator; |
|
61 |
import org.gvsig.expressionevaluator.impl.function.predicate.IlikeOperator; |
|
62 |
import org.gvsig.expressionevaluator.impl.function.predicate.LikeOperator; |
|
63 |
import org.gvsig.expressionevaluator.impl.function.spatial.STAreaFunction; |
|
64 |
import org.gvsig.expressionevaluator.impl.function.spatial.STAsTextFunction; |
|
65 |
import org.gvsig.expressionevaluator.impl.function.spatial.STBufferFunction; |
|
66 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCentroidFunction; |
|
67 |
import org.gvsig.expressionevaluator.impl.function.spatial.STContainsFunction; |
|
68 |
import org.gvsig.expressionevaluator.impl.function.spatial.STConvexHullFunction; |
|
69 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCoveredByFunction; |
|
70 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCoversFunction; |
|
71 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCrossesFunction; |
|
72 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDifferenceFunction; |
|
73 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDimensionFunction; |
|
74 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDisjointFunction; |
|
75 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDistanceFunction; |
|
76 |
import org.gvsig.expressionevaluator.impl.function.spatial.STEndPointFunction; |
|
77 |
import org.gvsig.expressionevaluator.impl.function.spatial.STEnvelopeFunction; |
|
78 |
import org.gvsig.expressionevaluator.impl.function.spatial.STGeomFromTextFunction; |
|
79 |
import org.gvsig.expressionevaluator.impl.function.spatial.STGeometryNFunction; |
|
80 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIntersectionFunction; |
|
81 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIntersectsFunction; |
|
82 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIsSimpleFunction; |
|
83 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIsValidFunction; |
|
84 |
import org.gvsig.expressionevaluator.impl.function.spatial.STNumGeometriesFunction; |
|
85 |
import org.gvsig.expressionevaluator.impl.function.spatial.STNumPointsFunction; |
|
86 |
import org.gvsig.expressionevaluator.impl.function.spatial.STOverlapsFunction; |
|
87 |
import org.gvsig.expressionevaluator.impl.function.spatial.STPointNFunction; |
|
88 |
import org.gvsig.expressionevaluator.impl.function.spatial.STStartPointFunction; |
|
89 |
import org.gvsig.expressionevaluator.impl.function.spatial.STTouchesFunction; |
|
90 |
import org.gvsig.expressionevaluator.impl.function.spatial.STUnionFunction; |
|
91 |
import org.gvsig.expressionevaluator.impl.function.spatial.STWithinFunction; |
|
92 |
import org.gvsig.expressionevaluator.impl.function.spatial.STXFunction; |
|
93 |
import org.gvsig.expressionevaluator.impl.function.spatial.STYFunction; |
|
94 |
import org.gvsig.expressionevaluator.impl.function.spatial.STZFunction; |
|
95 |
import org.gvsig.expressionevaluator.impl.function.string.AsciiFunction; |
|
96 |
import org.gvsig.expressionevaluator.impl.function.string.CharFunction; |
|
97 |
import org.gvsig.expressionevaluator.impl.function.string.ConcatFunction; |
|
98 |
import org.gvsig.expressionevaluator.impl.function.string.InstrFunction; |
|
99 |
import org.gvsig.expressionevaluator.impl.function.string.LTrimFunction; |
|
100 |
import org.gvsig.expressionevaluator.impl.function.string.LeftFunction; |
|
101 |
import org.gvsig.expressionevaluator.impl.function.string.LengthFunction; |
|
102 |
import org.gvsig.expressionevaluator.impl.function.string.LocateFunction; |
|
103 |
import org.gvsig.expressionevaluator.impl.function.string.LowerFunction; |
|
104 |
import org.gvsig.expressionevaluator.impl.function.string.LpadFunction; |
|
105 |
import org.gvsig.expressionevaluator.impl.function.string.PositionFunction; |
|
106 |
import org.gvsig.expressionevaluator.impl.function.string.RTrimFunction; |
|
107 |
import org.gvsig.expressionevaluator.impl.function.string.RepeatFunction; |
|
108 |
import org.gvsig.expressionevaluator.impl.function.string.ReplaceFunction; |
|
109 |
import org.gvsig.expressionevaluator.impl.function.string.RightFunction; |
|
110 |
import org.gvsig.expressionevaluator.impl.function.string.RpadFunction; |
|
111 |
import org.gvsig.expressionevaluator.impl.function.string.SpaceFunction; |
|
112 |
import org.gvsig.expressionevaluator.impl.function.string.SubstringFunction; |
|
113 |
import org.gvsig.expressionevaluator.impl.function.string.TrimFunction; |
|
114 |
import org.gvsig.expressionevaluator.impl.function.string.UpperFunction; |
|
115 |
import org.gvsig.fmap.dal.EvaluatorFactory; |
|
116 |
import org.gvsig.expressionevaluator.integration.DefaultEvaluatorFactory; |
|
117 |
import org.gvsig.expressionevaluator.integration.DefaultExpressionEvaluator; |
|
15 |
import org.gvsig.expressionevaluator.impl.symboltable.OGCSymbolTable; |
|
16 |
import org.gvsig.expressionevaluator.impl.symboltable.SQLSymbolTable; |
|
118 | 17 |
|
119 | 18 |
|
120 | 19 |
public class DefaultExpressionEvaluatorManager implements ExpressionEvaluatorManager { |
121 | 20 |
|
122 | 21 |
private Double accuracy; |
123 |
private final Map<String,Function> functions; |
|
124 |
private final Map<String,Function> operators; |
|
22 |
private final Map<String,SymbolTable>symbolTables; |
|
125 | 23 |
|
126 | 24 |
public DefaultExpressionEvaluatorManager() { |
127 |
this.functions = new HashMap<>();
|
|
128 |
this.operators = new HashMap<>();
|
|
129 |
initFunctionsAndOperators();
|
|
25 |
this.symbolTables = new HashMap<>();
|
|
26 |
this.registerSymbolTable(new SQLSymbolTable());
|
|
27 |
this.registerSymbolTable(new OGCSymbolTable());
|
|
130 | 28 |
} |
131 | 29 |
|
132 |
private void initFunctionsAndOperators() { |
|
133 |
this.addFunction(new GetattrFunction()); |
|
134 |
this.addFunction(new InvokeMethodFunction()); |
|
135 |
|
|
136 |
this.addOperator(new AndOperator()); |
|
137 |
this.addOperator(new AddOperator()); |
|
138 |
this.addOperator(new DivOperator()); |
|
139 |
this.addOperator(new EqOperator()); |
|
140 |
this.addOperator(new GeOperator()); |
|
141 |
this.addOperator(new GtOperator()); |
|
142 |
this.addOperator(new LeOperator()); |
|
143 |
this.addOperator(new LtOperator()); |
|
144 |
this.addOperator(new ModOperator()); |
|
145 |
this.addOperator(new NeOperator()); |
|
146 |
this.addOperator(new ModOperator()); |
|
147 |
this.addOperator(new MulOperator()); |
|
148 |
this.addOperator(new NeOperator()); |
|
149 |
this.addOperator(new NotOperator()); |
|
150 |
this.addOperator(new OrOperator()); |
|
151 |
this.addOperator(new SubstOperator()); |
|
152 |
|
|
153 |
this.addOperator(new IlikeOperator()); |
|
154 |
this.addOperator(new LikeOperator()); |
|
155 |
|
|
156 |
this.addFunction(new ACosFunction()); |
|
157 |
this.addFunction(new ASinFunction()); |
|
158 |
this.addFunction(new ATanFunction()); |
|
159 |
this.addFunction(new AbsFunction()); |
|
160 |
this.addFunction(new BitAndFunction()); |
|
161 |
this.addFunction(new BitOrFunction()); |
|
162 |
this.addFunction(new BitXorFunction()); |
|
163 |
this.addFunction(new CeilFunction()); |
|
164 |
this.addFunction(new CosFunction()); |
|
165 |
this.addFunction(new CoshFunction()); |
|
166 |
this.addFunction(new CotFunction()); |
|
167 |
this.addFunction(new DegreesFunction()); |
|
168 |
this.addFunction(new ExpFunction()); |
|
169 |
this.addFunction(new FloorFunction()); |
|
170 |
this.addFunction(new Log10Function()); |
|
171 |
this.addFunction(new LogFunction()); |
|
172 |
this.addFunction(new PiFunction()); |
|
173 |
this.addFunction(new PowFunction()); |
|
174 |
this.addFunction(new RadiansFunction()); |
|
175 |
this.addFunction(new RandFunction()); |
|
176 |
this.addFunction(new RoundFunction()); |
|
177 |
this.addFunction(new SignFunction()); |
|
178 |
this.addFunction(new SinFunction()); |
|
179 |
this.addFunction(new SinhFunction()); |
|
180 |
this.addFunction(new SqrtFunction()); |
|
181 |
this.addFunction(new TanFunction()); |
|
182 |
this.addFunction(new TanhFunction()); |
|
183 |
this.addFunction(new ZeroFunction()); |
|
184 |
this.addFunction(new LogFunction()); |
|
185 |
|
|
186 |
this.addFunction(new AsciiFunction()); |
|
187 |
this.addFunction(new CharFunction()); |
|
188 |
this.addFunction(new ConcatFunction()); |
|
189 |
this.addFunction(new InstrFunction()); |
|
190 |
this.addFunction(new LTrimFunction()); |
|
191 |
this.addFunction(new LeftFunction()); |
|
192 |
this.addFunction(new LengthFunction()); |
|
193 |
this.addFunction(new LocateFunction()); |
|
194 |
this.addFunction(new LowerFunction()); |
|
195 |
this.addFunction(new LpadFunction()); |
|
196 |
this.addFunction(new PositionFunction()); |
|
197 |
this.addFunction(new RTrimFunction()); |
|
198 |
this.addFunction(new RepeatFunction()); |
|
199 |
this.addFunction(new ReplaceFunction()); |
|
200 |
this.addFunction(new RightFunction()); |
|
201 |
this.addFunction(new RpadFunction()); |
|
202 |
this.addFunction(new SpaceFunction()); |
|
203 |
this.addFunction(new SubstringFunction()); |
|
204 |
this.addFunction(new TrimFunction()); |
|
205 |
this.addFunction(new UpperFunction()); |
|
206 |
|
|
207 |
this.addFunction(new STAreaFunction()); |
|
208 |
this.addFunction(new STAsTextFunction()); |
|
209 |
this.addFunction(new STBufferFunction()); |
|
210 |
this.addFunction(new STCentroidFunction()); |
|
211 |
this.addFunction(new STContainsFunction()); |
|
212 |
this.addFunction(new STConvexHullFunction()); |
|
213 |
this.addFunction(new STCoveredByFunction()); |
|
214 |
this.addFunction(new STCoversFunction()); |
|
215 |
this.addFunction(new STCrossesFunction()); |
|
216 |
this.addFunction(new STDifferenceFunction()); |
|
217 |
this.addFunction(new STDimensionFunction()); |
|
218 |
this.addFunction(new STDisjointFunction()); |
|
219 |
this.addFunction(new STDistanceFunction()); |
|
220 |
this.addFunction(new STEndPointFunction()); |
|
221 |
this.addFunction(new STEnvelopeFunction()); |
|
222 |
this.addFunction(new STGeomFromTextFunction()); |
|
223 |
this.addFunction(new STGeometryNFunction()); |
|
224 |
this.addFunction(new STIntersectionFunction()); |
|
225 |
this.addFunction(new STIntersectsFunction()); |
|
226 |
this.addFunction(new STIsSimpleFunction()); |
|
227 |
this.addFunction(new STIsValidFunction()); |
|
228 |
this.addFunction(new STNumGeometriesFunction()); |
|
229 |
this.addFunction(new STNumPointsFunction()); |
|
230 |
this.addFunction(new STOverlapsFunction()); |
|
231 |
this.addFunction(new STPointNFunction()); |
|
232 |
this.addFunction(new STStartPointFunction()); |
|
233 |
this.addFunction(new STTouchesFunction()); |
|
234 |
this.addFunction(new STUnionFunction()); |
|
235 |
this.addFunction(new STWithinFunction()); |
|
236 |
this.addFunction(new STXFunction()); |
|
237 |
this.addFunction(new STYFunction()); |
|
238 |
this.addFunction(new STZFunction()); |
|
239 |
|
|
240 |
} |
|
241 |
|
|
242 | 30 |
@Override |
243 |
public Map<String, Function> getAllFunctions() {
|
|
244 |
return Collections.unmodifiableMap(functions);
|
|
31 |
public SymbolTable getSymbolTable(String name) {
|
|
32 |
return this.symbolTables.get(name.toUpperCase());
|
|
245 | 33 |
} |
246 | 34 |
|
247 | 35 |
@Override |
248 |
public Map<String, Function> getAllOperators() {
|
|
249 |
return Collections.unmodifiableMap(operators);
|
|
36 |
public Collection<SymbolTable> getSymbolTables() {
|
|
37 |
return this.symbolTables.values();
|
|
250 | 38 |
} |
251 | 39 |
|
252 | 40 |
@Override |
253 |
public void addFunction(Function function) {
|
|
254 |
this.functions.put(function.name().toUpperCase(), function);
|
|
41 |
public final void registerSymbolTable(SymbolTable symbolTable) {
|
|
42 |
this.symbolTables.put(symbolTable.getName().toUpperCase(),symbolTable);
|
|
255 | 43 |
} |
256 | 44 |
|
257 |
public void addOperator(Function function) { |
|
258 |
this.operators.put(function.name().toUpperCase(), function); |
|
259 |
} |
|
260 |
|
|
261 |
public void removeFunction(String name) { |
|
262 |
if( StringUtils.isEmpty(name) ) { |
|
263 |
return; |
|
264 |
} |
|
265 |
this.functions.remove(name.toUpperCase()); |
|
266 |
} |
|
267 |
|
|
268 | 45 |
@Override |
269 | 46 |
public Object evaluate(String source) { |
270 | 47 |
DefaultInterpreter interpreter = new DefaultInterpreter(); |
... | ... | |
328 | 105 |
} |
329 | 106 |
|
330 | 107 |
@Override |
331 |
public ExpressionEvaluator createEvaluator(String expression) { |
|
332 |
DefaultExpressionEvaluator e = new DefaultExpressionEvaluator(); |
|
333 |
e.setSource(expression); |
|
334 |
return e; |
|
335 |
} |
|
336 |
|
|
337 |
@Override |
|
338 |
public ExpressionEvaluator createEvaluator() { |
|
339 |
return new DefaultExpressionEvaluator(); |
|
340 |
} |
|
341 |
|
|
342 |
@Override |
|
343 |
public EvaluatorFactory createEvaluatorFactory() { |
|
344 |
return new DefaultEvaluatorFactory(); |
|
345 |
} |
|
346 |
|
|
347 |
@Override |
|
348 | 108 |
public Double getAccuracy() { |
349 | 109 |
return this.accuracy; |
350 | 110 |
} |
... | ... | |
353 | 113 |
public void setAccuracy(Double accuracy) { |
354 | 114 |
this.accuracy = accuracy; |
355 | 115 |
} |
356 |
|
|
116 |
|
|
117 |
@Override |
|
118 |
public Expression createExpression() { |
|
119 |
DefaultExpression e = new DefaultExpression(); |
|
120 |
return e; |
|
121 |
} |
|
122 |
|
|
357 | 123 |
} |
124 |
|
Also available in: Unified diff