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

History | View | Annotate | Download (18.4 KB)

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