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

View differences:

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