svn-gvsig-desktop / 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 / ExpressionBuilder.java @ 44644
History | View | Annotate | Download (14.7 KB)
1 | 44006 | jjdelcerro | package org.gvsig.expressionevaluator; |
---|---|---|---|
2 | 43020 | jjdelcerro | |
3 | import java.util.List; |
||
4 | 44198 | jjdelcerro | import java.util.Map; |
5 | import org.gvsig.tools.util.PropertiesSupport; |
||
6 | import org.gvsig.tools.util.PropertiesSupportHelper; |
||
7 | 43020 | jjdelcerro | |
8 | public interface ExpressionBuilder { |
||
9 | |||
10 | 44198 | jjdelcerro | public static final String OPERATOR_NOT = "NOT"; |
11 | 44207 | jjdelcerro | public static final String OPERATOR_NEGATE = "NEGATE"; |
12 | 44198 | jjdelcerro | public static final String OPERATOR_IS = "IS"; |
13 | public static final String OPERATOR_AND = "AND"; |
||
14 | public static final String OPERATOR_OR = "OR"; |
||
15 | 44207 | jjdelcerro | public static final String OPERATOR_EQ = "="; |
16 | public static final String OPERATOR_NE = "<>"; |
||
17 | public static final String OPERATOR_GT = ">"; |
||
18 | public static final String OPERATOR_GE = ">="; |
||
19 | public static final String OPERATOR_LT = "<"; |
||
20 | public static final String OPERATOR_LE = "<="; |
||
21 | 44198 | jjdelcerro | public static final String OPERATOR_LIKE = "LIKE"; |
22 | public static final String OPERATOR_ILIKE = "ILIKE"; |
||
23 | 44207 | jjdelcerro | public static final String OPERATOR_ADD = "+"; |
24 | public static final String OPERATOR_SUBST = "-"; |
||
25 | public static final String OPERATOR_MULT = "*"; |
||
26 | public static final String OPERATOR_DIV = "/"; |
||
27 | public static final String OPERATOR_MOD = "%"; |
||
28 | public static final String OPERATOR_CONCAT = "||"; |
||
29 | public static final String OPERATOR_REGEXP = "~"; |
||
30 | public static final String OPERATOR_AND2 = "&&"; |
||
31 | 44198 | jjdelcerro | |
32 | public static final String FUNCTION_IIF = "IIF"; |
||
33 | public static final String FUNCTION_IFNULL = "IFNULL"; |
||
34 | |||
35 | public static final String FUNCTION_LEFT = "LEFT"; |
||
36 | public static final String FUNCTION_RIGHT = "RIGHT"; |
||
37 | public static final String FUNCTION_LOCATE = "LOCATE"; |
||
38 | public static final String FUNCTION_POSITION = "POSITION"; |
||
39 | public static final String FUNCTION_LPAD = "LPAD"; |
||
40 | public static final String FUNCTION_RPAD = "RPAD"; |
||
41 | public static final String FUNCTION_LTRIM = "LTRIM"; |
||
42 | public static final String FUNCTION_RTRIM = "RTRIM"; |
||
43 | public static final String FUNCTION_TRIM = "TRIM"; |
||
44 | public static final String FUNCTION_REPEAT = "REPEAT"; |
||
45 | public static final String FUNCTION_REPLACE = "REPLACE"; |
||
46 | public static final String FUNCTION_ASCII = "ASCII"; |
||
47 | public static final String FUNCTION_LENGHT = "LENGHT"; |
||
48 | public static final String FUNCTION_INSTR = "INSTR"; |
||
49 | public static final String FUNCTION_LOWER = "LOWER"; |
||
50 | public static final String FUNCTION_UPPER = "UPPER"; |
||
51 | public static final String FUNCTION_SPACE = "SPACE"; |
||
52 | public static final String FUNCTION_SUBSTRING = "SUBSTRING"; |
||
53 | 44644 | jjdelcerro | public static final String FUNCTION_ABS = "ABS"; |
54 | 44198 | jjdelcerro | public static final String FUNCTION_ACOS = "ACOS"; |
55 | public static final String FUNCTION_ASIN = "ASIN"; |
||
56 | public static final String FUNCTION_ATAN = "ATAN"; |
||
57 | public static final String FUNCTION_COS = "COS"; |
||
58 | public static final String FUNCTION_COSH = "COSH"; |
||
59 | public static final String FUNCTION_COT = "COT"; |
||
60 | public static final String FUNCTION_BITAND = "BITAND"; |
||
61 | public static final String FUNCTION_BITOR = "BITOR"; |
||
62 | public static final String FUNCTION_BITXOR = "BITXOR"; |
||
63 | public static final String FUNCTION_CEIL = "CEIL"; |
||
64 | public static final String FUNCTION_DEGREES = "DEGREES"; |
||
65 | public static final String FUNCTION_EXP = "EXP"; |
||
66 | public static final String FUNCTION_FLOOR = "FLOOR"; |
||
67 | public static final String FUNCTION_LOG = "LOG"; |
||
68 | public static final String FUNCTION_LOG10 = "LOG10"; |
||
69 | public static final String FUNCTION_PI = "PI"; |
||
70 | public static final String FUNCTION_POWER = "POWER"; |
||
71 | public static final String FUNCTION_RADIANS = "RADIANS"; |
||
72 | public static final String FUNCTION_RAND = "RAND"; |
||
73 | public static final String FUNCTION_ROUND = "ROUND"; |
||
74 | public static final String FUNCTION_SQRT = "SQRT"; |
||
75 | public static final String FUNCTION_SIGN = "SIGN"; |
||
76 | public static final String FUNCTION_SIN = "SIN"; |
||
77 | public static final String FUNCTION_SINH = "SINH"; |
||
78 | public static final String FUNCTION_TAN = "TAN"; |
||
79 | public static final String FUNCTION_TANH = "TANH"; |
||
80 | public static final String FUNCTION_ZERO = "ZERO"; |
||
81 | public static final String FUNCTION_CHR = "CHR"; |
||
82 | public static final String FUNCTION_DATE = "DATE"; |
||
83 | 44266 | jjdelcerro | public static final String FUNCTION_DATEDIFF = "DATEDIFF"; |
84 | public static final String FUNCTION_DATEADD = "DATEADD"; |
||
85 | 44198 | jjdelcerro | public static final String FUNCTION_NOW = "NOW"; |
86 | public static final String FUNCTION_TIME = "TIME"; |
||
87 | public static final String FUNCTION_TIMESTAMP = "TIMESTAMP"; |
||
88 | |||
89 | public static final String FUNCTION_CAST = "CAST"; |
||
90 | public static final String FUNCTION_DECODE = "DECODE"; |
||
91 | public static final String FUNCTION_TODOUBLE = "TODOUBLE"; |
||
92 | public static final String FUNCTION_TOFLOAT = "TOFLOAT"; |
||
93 | public static final String FUNCTION_TOINTEGER = "TOINTEGER"; |
||
94 | public static final String FUNCTION_TOLONG = "TOLONG"; |
||
95 | public static final String FUNCTION_TOSTR = "TOSTR"; |
||
96 | |||
97 | 44206 | jjdelcerro | public static final String FUNCTION_INCR = "INCR"; |
98 | public static final String FUNCTION_DECR = "DECR"; |
||
99 | |||
100 | 44207 | jjdelcerro | public static final String FUNCTION_RANGE = "RANGE"; |
101 | 44269 | omartinez | public static final String FUNCTION_EVAL = "EVAL"; |
102 | 44262 | jjdelcerro | public static final String FUNCTION_LIST = "LIST"; |
103 | 44376 | jjdelcerro | public static final String FUNCTION_TUPLE = "TUPLE"; |
104 | 44207 | jjdelcerro | |
105 | 44644 | jjdelcerro | public static final int PARAMETER_TYPE_CONSTANT = 0; |
106 | public static final int PARAMETER_TYPE_VARIABLE = 1; |
||
107 | 44198 | jjdelcerro | |
108 | 43020 | jjdelcerro | public interface VisitorFilter { |
109 | boolean accept(Visitable visitable);
|
||
110 | } |
||
111 | |||
112 | public interface Visitor { |
||
113 | public void visit(Visitable value); |
||
114 | } |
||
115 | |||
116 | public interface Visitable { |
||
117 | public void accept(Visitor visitor, VisitorFilter filter); |
||
118 | } |
||
119 | |||
120 | 44198 | jjdelcerro | public interface Value extends Visitable, PropertiesSupport { |
121 | public String toString(Formatter<Value> formatter); |
||
122 | 44376 | jjdelcerro | public void replace(Value target, Value replacement); |
123 | 43020 | jjdelcerro | } |
124 | |||
125 | public interface Group extends Value { |
||
126 | 44198 | jjdelcerro | public Value value();
|
127 | 43020 | jjdelcerro | } |
128 | |||
129 | public interface Constant extends Value { |
||
130 | 44198 | jjdelcerro | public Object value(); |
131 | 43020 | jjdelcerro | } |
132 | |||
133 | public interface Custom extends Value { |
||
134 | 44198 | jjdelcerro | public Object value(); |
135 | 43020 | jjdelcerro | public Custom add(Variable variable);
|
136 | public Custom add(Parameter parameter);
|
||
137 | } |
||
138 | |||
139 | public interface Variable extends Value, Comparable<Variable> { |
||
140 | 44198 | jjdelcerro | public String name(); |
141 | 43020 | jjdelcerro | } |
142 | |||
143 | public interface Parameter extends Value { |
||
144 | public Parameter as_constant();
|
||
145 | public Parameter as_variable();
|
||
146 | 43093 | jjdelcerro | public Parameter value(Object value); |
147 | public Parameter name(String value); |
||
148 | 44644 | jjdelcerro | public int type(); |
149 | 44198 | jjdelcerro | public String name(); |
150 | public Object value(); |
||
151 | 43020 | jjdelcerro | public boolean is_constant(); |
152 | public boolean is_variable(); |
||
153 | } |
||
154 | 43093 | jjdelcerro | |
155 | 44198 | jjdelcerro | public interface Function extends Value { |
156 | public String name(); |
||
157 | public List<Value> parameters(); |
||
158 | public Function parameter(Value parameter);
|
||
159 | 43093 | jjdelcerro | } |
160 | 43020 | jjdelcerro | |
161 | 44198 | jjdelcerro | public interface Method extends Value { |
162 | public String name(); |
||
163 | public Value instance();
|
||
164 | 43020 | jjdelcerro | public List<Value> parameters(); |
165 | public Function parameter(Value parameter);
|
||
166 | } |
||
167 | |||
168 | public interface BinaryOperator extends Value { |
||
169 | 44198 | jjdelcerro | public String name(); |
170 | public Value left();
|
||
171 | public Value right();
|
||
172 | public BinaryOperator left(Value operand);
|
||
173 | public BinaryOperator right(Value operand);
|
||
174 | 43020 | jjdelcerro | } |
175 | 44198 | jjdelcerro | |
176 | public abstract class AbstractValue implements Value { |
||
177 | |||
178 | private PropertiesSupport properties;
|
||
179 | |||
180 | protected AbstractValue() {
|
||
181 | this.properties = new PropertiesSupportHelper(); |
||
182 | } |
||
183 | |||
184 | @Override
|
||
185 | public void accept(Visitor visitor, VisitorFilter filter) { |
||
186 | if (filter == null || filter.accept(this)) { |
||
187 | visitor.visit(this);
|
||
188 | } |
||
189 | } |
||
190 | |||
191 | @Override
|
||
192 | public Map<String, Object> getProperties() { |
||
193 | return this.properties.getProperties(); |
||
194 | } |
||
195 | |||
196 | @Override
|
||
197 | public Object getProperty(String name) { |
||
198 | return this.properties.getProperty(name); |
||
199 | } |
||
200 | |||
201 | @Override
|
||
202 | public void setProperty(String name, Object value) { |
||
203 | this.properties.setProperty(name, value);
|
||
204 | } |
||
205 | |||
206 | 44376 | jjdelcerro | @Override
|
207 | public void replace(Value target, Value replacement) { |
||
208 | // Do nothing
|
||
209 | } |
||
210 | 44198 | jjdelcerro | } |
211 | |||
212 | public class ClassVisitorFilter implements VisitorFilter { |
||
213 | |||
214 | private final Class classFilter; |
||
215 | |||
216 | public ClassVisitorFilter(Class classFilter) { |
||
217 | this.classFilter = classFilter;
|
||
218 | } |
||
219 | |||
220 | @Override
|
||
221 | public boolean accept(Visitable visitable) { |
||
222 | 44369 | jjdelcerro | if( classFilter==null ) { |
223 | return true; |
||
224 | } |
||
225 | 44198 | jjdelcerro | return classFilter.isInstance(visitable);
|
226 | } |
||
227 | |||
228 | } |
||
229 | |||
230 | public static final Formatter<Value> EMPTY_FORMATTER = new Formatter<Value>() { |
||
231 | @Override
|
||
232 | public boolean canApply(Value value) { |
||
233 | return false; |
||
234 | } |
||
235 | |||
236 | @Override
|
||
237 | public String format(Value value) { |
||
238 | return ""; |
||
239 | } |
||
240 | }; |
||
241 | |||
242 | public String quote_for_identifiers(); |
||
243 | 43020 | jjdelcerro | |
244 | 44198 | jjdelcerro | public String quote_for_strings(); |
245 | |||
246 | 43020 | jjdelcerro | public void accept(Visitor visitor, VisitorFilter filter); |
247 | |||
248 | 44198 | jjdelcerro | public List<Variable> variables(); |
249 | 43020 | jjdelcerro | |
250 | 44198 | jjdelcerro | public List<String> variables_names(); |
251 | 43020 | jjdelcerro | |
252 | 44198 | jjdelcerro | public List<Parameter> parameters(); |
253 | 43020 | jjdelcerro | |
254 | 44198 | jjdelcerro | public List<String> parameters_names(); |
255 | |||
256 | 43020 | jjdelcerro | public String identifier(String name); |
257 | |||
258 | 44006 | jjdelcerro | public String bytearray_hex(byte[] data); |
259 | 43020 | jjdelcerro | |
260 | 44006 | jjdelcerro | public String bytearray_0x(byte[] data); |
261 | |||
262 | public String bytearray_x(byte[] data); |
||
263 | |||
264 | 43020 | jjdelcerro | public String string(String s); |
265 | |||
266 | 44198 | jjdelcerro | public Value value();
|
267 | |||
268 | public ExpressionBuilder value(Value value);
|
||
269 | 43020 | jjdelcerro | |
270 | 44198 | jjdelcerro | public Group group(Value group); |
271 | 43020 | jjdelcerro | |
272 | 44198 | jjdelcerro | public Constant bytearray(byte[] data); |
273 | 43020 | jjdelcerro | |
274 | public Variable variable(String name); |
||
275 | |||
276 | public Variable column(String name); // Alias for variable(name) |
||
277 | |||
278 | 43093 | jjdelcerro | public Parameter parameter(String name); |
279 | 43020 | jjdelcerro | |
280 | 43093 | jjdelcerro | public Parameter parameter();
|
281 | |||
282 | 43020 | jjdelcerro | public Constant constant(Object value); |
283 | |||
284 | public Custom custom(Object value); |
||
285 | 44020 | jjdelcerro | |
286 | 44198 | jjdelcerro | public Method method(Value instance, String name, Value... values); |
287 | 43020 | jjdelcerro | |
288 | 44198 | jjdelcerro | public Function function(String name, Value... values); |
289 | |||
290 | public BinaryOperator binaryOperator(String name, Value leftOperand, Value rightOperand); |
||
291 | 43020 | jjdelcerro | |
292 | 44198 | jjdelcerro | public Value toValue(String expression); |
293 | 44644 | jjdelcerro | |
294 | public String repr(Object value); |
||
295 | 43020 | jjdelcerro | |
296 | 44198 | jjdelcerro | public String toString(Formatter<Value> formatter); |
297 | |||
298 | 43020 | jjdelcerro | public Function not(Value value);
|
299 | |||
300 | 44198 | jjdelcerro | public Function not_is_null(Value value);
|
301 | 43020 | jjdelcerro | |
302 | 44198 | jjdelcerro | public Function is_null(Value value);
|
303 | 43020 | jjdelcerro | |
304 | 44644 | jjdelcerro | |
305 | 43020 | jjdelcerro | public BinaryOperator and(Value op1, Value op2);
|
306 | |||
307 | 44274 | jjdelcerro | public BinaryOperator and(Expression op1, Expression op2); |
308 | |||
309 | public BinaryOperator and(Expression op1, Value op2); |
||
310 | |||
311 | 43020 | jjdelcerro | public BinaryOperator or(Value op1, Value op2);
|
312 | |||
313 | public BinaryOperator eq(Value op1, Value op2);
|
||
314 | |||
315 | public BinaryOperator ne(Value op1, Value op2);
|
||
316 | |||
317 | public BinaryOperator gt(Value op1, Value op2);
|
||
318 | |||
319 | public BinaryOperator ge(Value op1, Value op2);
|
||
320 | |||
321 | public BinaryOperator lt(Value op1, Value op2);
|
||
322 | |||
323 | public BinaryOperator le(Value op1, Value op2);
|
||
324 | |||
325 | public BinaryOperator like(Value op1, Value op2);
|
||
326 | |||
327 | public BinaryOperator ilike(Value op1, Value op2);
|
||
328 | |||
329 | public BinaryOperator add(Value op1, Value op2);
|
||
330 | |||
331 | public BinaryOperator subst(Value op1, Value op2);
|
||
332 | |||
333 | public BinaryOperator mult(Value op1, Value op2);
|
||
334 | |||
335 | public BinaryOperator div(Value op1, Value op2);
|
||
336 | |||
337 | public BinaryOperator concat(Value op1, Value op2);
|
||
338 | |||
339 | public ExpressionBuilder set(Value value);
|
||
340 | 44198 | jjdelcerro | |
341 | 43020 | jjdelcerro | public ExpressionBuilder and(Value value);
|
342 | |||
343 | public ExpressionBuilder or(Value value);
|
||
344 | |||
345 | 44038 | jjdelcerro | public Function iif(Value condition, Value iftrue, Value iffalse);
|
346 | |||
347 | public Function ifnull(Value value, Value iftrue, Value iffalse);
|
||
348 | |||
349 | 43020 | jjdelcerro | public ExpressionBuilder createExpressionBuilder();
|
350 | 44051 | omartinez | |
351 | public Function left(Value str, Value size);
|
||
352 | |||
353 | public Function right(Value str, Value len);
|
||
354 | |||
355 | public Function locate(Value search, Value str, Value start) ;
|
||
356 | |||
357 | public Function position(Value search, Value str);
|
||
358 | |||
359 | public Function lpad(Value str, Value len, Value padstr) ;
|
||
360 | |||
361 | public Function rpad(Value str, Value len, Value padstr);
|
||
362 | |||
363 | public Function ltrim(Value str);
|
||
364 | |||
365 | public Function rtrim(Value str);
|
||
366 | |||
367 | public Function trim(Value str);
|
||
368 | |||
369 | public Function repeat(Value str, Value size);
|
||
370 | |||
371 | public Function replace(Value str, Value search, Value replstr);
|
||
372 | |||
373 | public Function ascii(Value str);
|
||
374 | |||
375 | public Function lenght(Value str);
|
||
376 | |||
377 | public Function instr(Value str, Value search, Value start);
|
||
378 | |||
379 | public Function lower(Value str);
|
||
380 | |||
381 | public Function upper(Value str);
|
||
382 | |||
383 | public Function space(Value size);
|
||
384 | |||
385 | public Function substring(Value str, Value start, Value len);
|
||
386 | |||
387 | 44644 | jjdelcerro | public Function abs(Value num);
|
388 | |||
389 | 44051 | omartinez | public Function acos(Value num);
|
390 | |||
391 | public Function asin(Value num);
|
||
392 | |||
393 | public Function atan(Value num);
|
||
394 | |||
395 | public Function cos(Value num);
|
||
396 | |||
397 | public Function cosh(Value num);
|
||
398 | |||
399 | public Function cot(Value num);
|
||
400 | |||
401 | public Function bitand(Value num1, Value num2);
|
||
402 | |||
403 | public Function bitor(Value num1, Value num2);
|
||
404 | |||
405 | public Function bitxor(Value num1, Value num2);
|
||
406 | |||
407 | public Function ceil(Value num);
|
||
408 | |||
409 | public Function degrees(Value num);
|
||
410 | |||
411 | public Function exp(Value num);
|
||
412 | |||
413 | public Function floor(Value num);
|
||
414 | |||
415 | public Function log(Value num);
|
||
416 | |||
417 | public Function log10(Value num);
|
||
418 | |||
419 | 44644 | jjdelcerro | public Function pi();
|
420 | 44051 | omartinez | |
421 | public Function power(Value num);
|
||
422 | |||
423 | public Function radians(Value num);
|
||
424 | |||
425 | public Function rand(Value num);
|
||
426 | |||
427 | public Function round(Value num);
|
||
428 | |||
429 | public Function sqrt(Value num);
|
||
430 | |||
431 | public Function sign(Value num);
|
||
432 | |||
433 | public Function sin(Value num);
|
||
434 | |||
435 | public Function sinh(Value num);
|
||
436 | |||
437 | public Function tan(Value num);
|
||
438 | |||
439 | public Function tanh(Value num);
|
||
440 | |||
441 | public Function zero();
|
||
442 | 44054 | omartinez | |
443 | public Function chr(Value num);
|
||
444 | 44198 | jjdelcerro | |
445 | public Function decode(Value value, Value format);
|
||
446 | |||
447 | public Function cast(Value object, Value typeName);
|
||
448 | |||
449 | public Function toDouble(Value object);
|
||
450 | |||
451 | public Function toFloat(Value object);
|
||
452 | |||
453 | public Function toLong(Value object);
|
||
454 | |||
455 | public Function toInteger(Value object);
|
||
456 | |||
457 | public Function toStr(Value object);
|
||
458 | |||
459 | 44262 | jjdelcerro | public Function list();
|
460 | |||
461 | 44376 | jjdelcerro | public Function tuple();
|
462 | |||
463 | public Function tuple(Constant... values);
|
||
464 | |||
465 | 44259 | jjdelcerro | public boolean isEmpty(); |
466 | 43020 | jjdelcerro | } |