Statistics
| Revision:

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 @ 44790

History | View | Annotate | Download (16.4 KB)

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