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

History | View | Annotate | Download (20.1 KB)

1
package org.gvsig.expressionevaluator;
2

    
3
import java.awt.Color;
4
import java.util.Collections;
5
import java.util.Date;
6
import java.util.List;
7
import java.util.Map;
8
import org.gvsig.tools.util.PropertiesSupport;
9
import org.gvsig.tools.util.PropertiesSupportHelper;
10

    
11
public interface ExpressionBuilder extends PropertiesSupport {
12

    
13
    public static final String OPERATOR_NOT = "NOT";
14
    public static final String OPERATOR_NEGATE = "NEGATE";
15
    public static final String OPERATOR_IS = "IS";
16
    public static final String OPERATOR_IS_NULL = "IS NULL";
17
    public static final String OPERATOR_IS_NOT_NULL = "IS NOT NULL";
18
    public static final String OPERATOR_AND = "AND";
19
    public static final String OPERATOR_OR = "OR";
20
    public static final String OPERATOR_EQ = "=";
21
    public static final String OPERATOR_NE = "<>";
22
    public static final String OPERATOR_GT = ">";
23
    public static final String OPERATOR_GE = ">=";
24
    public static final String OPERATOR_LT = "<";
25
    public static final String OPERATOR_LE = "<=";
26
    public static final String OPERATOR_LIKE = "LIKE";
27
    public static final String OPERATOR_ILIKE = "ILIKE";
28
    public static final String OPERATOR_ADD = "+";
29
    public static final String OPERATOR_SUBST = "-";
30
    public static final String OPERATOR_MULT = "*";
31
    public static final String OPERATOR_DIV = "/";
32
    public static final String OPERATOR_MOD = "%";
33
    public static final String OPERATOR_CONCAT = "||";
34
    public static final String OPERATOR_REGEXP = "~";
35
    public static final String OPERATOR_AND2 = "&&";
36

    
37
    public static final String FUNCTION_CASE = "CASE";
38
    public static final String FUNCTION_IIF = "IIF";
39
    public static final String FUNCTION_IF = "IF";
40
    public static final String FUNCTION_IFNULL = "IFNULL";
41
    
42
    public static final String FUNCTION_LEFT = "LEFT";
43
    public static final String FUNCTION_RIGHT = "RIGHT";
44
    public static final String FUNCTION_LOCATE = "LOCATE";
45
    public static final String FUNCTION_POSITION = "POSITION";
46
    public static final String FUNCTION_LPAD = "LPAD";
47
    public static final String FUNCTION_RPAD = "RPAD";
48
    public static final String FUNCTION_LTRIM = "LTRIM";
49
    public static final String FUNCTION_RTRIM = "RTRIM";
50
    public static final String FUNCTION_TRIM = "TRIM";
51
    public static final String FUNCTION_REPEAT = "REPEAT";
52
    public static final String FUNCTION_REPLACE = "REPLACE";
53
    public static final String FUNCTION_ASCII = "ASCII";
54
    public static final String FUNCTION_LENGHT = "LENGHT";
55
    public static final String FUNCTION_INSTR = "INSTR";
56
    public static final String FUNCTION_LOWER = "LOWER";
57
    public static final String FUNCTION_UPPER = "UPPER";
58
    public static final String FUNCTION_SPACE = "SPACE";
59
    public static final String FUNCTION_SUBSTRING = "SUBSTRING";
60
    public static final String FUNCTION_CONCAT = "CONCAT";
61
    public static final String FUNCTION_ABS = "ABS";
62
    public static final String FUNCTION_ACOS = "ACOS";
63
    public static final String FUNCTION_ASIN = "ASIN";
64
    public static final String FUNCTION_ATAN = "ATAN";
65
    public static final String FUNCTION_COS = "COS";
66
    public static final String FUNCTION_COSH = "COSH";
67
    public static final String FUNCTION_COT = "COT";
68
    public static final String FUNCTION_BITAND = "BITAND";
69
    public static final String FUNCTION_BITOR = "BITOR";
70
    public static final String FUNCTION_BITXOR = "BITXOR";
71
    public static final String FUNCTION_CEIL = "CEIL";
72
    public static final String FUNCTION_DEGREES = "DEGREES";
73
    public static final String FUNCTION_EXP = "EXP";
74
    public static final String FUNCTION_FLOOR = "FLOOR";
75
    public static final String FUNCTION_LOG = "LOG";
76
    public static final String FUNCTION_LOG10 = "LOG10";
77
    public static final String FUNCTION_PI = "PI";
78
    public static final String FUNCTION_POWER = "POWER";
79
    public static final String FUNCTION_RADIANS = "RADIANS";
80
    public static final String FUNCTION_RAND = "RAND";
81
    public static final String FUNCTION_ROUND = "ROUND";
82
    public static final String FUNCTION_SQRT = "SQRT";
83
    public static final String FUNCTION_SIGN = "SIGN";
84
    public static final String FUNCTION_SIN = "SIN";
85
    public static final String FUNCTION_SINH = "SINH";
86
    public static final String FUNCTION_TAN = "TAN";
87
    public static final String FUNCTION_TANH = "TANH";
88
    public static final String FUNCTION_ZERO = "ZERO";
89
    public static final String FUNCTION_CHR = "CHR";
90
    public static final String FUNCTION_MOD = "MOD";
91
    public static final String FUNCTION_UUID = "UUID";
92

    
93
    public static final String FUNCTION_DATE = "DATE";
94
    public static final String FUNCTION_TIME = "TIME";
95
    public static final String FUNCTION_TIMESTAMP = "TIMESTAMP";  
96

    
97
    public static final String FUNCTION_TO_DATE = "TO_DATE";
98
    public static final String FUNCTION_TO_TIMESTAMP = "TO_TIMESTAMP";  
99
    public static final String FUNCTION_DATEDIFF = "DATEDIFF";
100
    public static final String FUNCTION_DATEADD = "DATEADD";
101
    public static final String FUNCTION_CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP";
102
    public static final String FUNCTION_CURRENT_TIME = "CURRENT_TIME";
103
    public static final String FUNCTION_CURRENT_DATE = "CURRENT_DATE";
104
    public static final String FUNCTION_EXTRACT = "EXTRACT";
105
    
106
    public static final String FUNCTION_CAST = "CAST";
107
    public static final String FUNCTION_DECODE = "DECODE";
108
    public static final String FUNCTION_ENCODE = "ENCODE";
109
    public static final String FUNCTION_TODOUBLE = "TODOUBLE";
110
    public static final String FUNCTION_TOFLOAT = "TOFLOAT";
111
    public static final String FUNCTION_TOINTEGER = "TOINTEGER";
112
    public static final String FUNCTION_TOLONG = "TOLONG";
113
    public static final String FUNCTION_TOSTR = "TOSTR";
114
    public static final String FUNCTION_TOJSON = "TO_JSON";
115
    public static final String FUNCTION_MAP = "MAP";
116
    
117
    public static final String FUNCTION_LET = "LET";
118

    
119
    public static final String FUNCTION_INCR = "INCR";
120
    public static final String FUNCTION_DECR = "DECR";
121
    
122
    public static final String FUNCTION_RANGE = "RANGE";
123
    public static final String FUNCTION_EVAL = "EVAL";
124
    public static final String FUNCTION_LIST = "LIST";
125
    public static final String FUNCTION_TUPLE = "TUPLE";
126
    public static final String FUNCTION_DICT = "DICT";
127
    public static final String FUNCTION_$CONSTANT = "$CONSTANT";
128
    public static final String FUNCTION_$IDENTIFIER = "$IDENTIFIER";
129
    public static final String FUNCTION_$HOSTEXPRESSION = "$HOSTEXPRESSION";
130
    
131
    public static final String FUNCTION_GETATTR = "GETATTR";
132
    public static final String FUNCTION_GETITEM = "GETITEM";
133
    public static final String FUNCTION_URLREAD = "URL_READ";
134
    public static final String FUNCTION_URLREADBYTES = "URL_READBYTES";
135
    public static final String FUNCTION_URL = "URL";
136

    
137
    public static final String FUNCTION_COLOR = "COLOR";
138
    
139
    public static final String FUNCTION_JSON_VALUE = "JSON_VALUE";
140
    
141
    public static final int PARAMETER_TYPE_CONSTANT = 0;
142
    public static final int PARAMETER_TYPE_VARIABLE = 1;
143
    
144
    public interface VisitorFilter {
145
        boolean accept(Visitable visitable);
146
        default boolean skipChildren() { return false; }
147
    }
148

    
149
     public interface Visitor {
150
        public void visit(Visitable value);
151
    }
152

    
153
    public interface Visitable {
154
        public void accept(Visitor visitor, VisitorFilter filter);
155
    }
156
        
157
    public interface Value extends Visitable, PropertiesSupport, org.gvsig.tools.lang.Cloneable {
158
        public String toString(Formatter<Value> formatter);
159
        public void replace(Value target, Value replacement);
160
        public void copyPropertiesFrom(PropertiesSupport properties);
161

    
162
        @Override
163
        public Value clone() throws CloneNotSupportedException;
164
        
165
    }
166

    
167
    public interface Group extends Value {
168
        public Value value();
169
    }
170

    
171
    public interface Constant extends Value {
172
        public Object value();
173
    }
174

    
175
    public static final Constant VALUE_NULL = new Constant() {
176
        @Override
177
        public Object value() {
178
            return null;
179
        }
180

    
181
        @Override
182
        public String toString() {
183
            return "NULL";
184
        }
185

    
186
        @Override
187
        public String toString(Formatter<Value> formatter) {
188
            return "NULL";
189
        }
190

    
191
        @Override
192
        public void replace(Value target, Value replacement) {
193
        }
194

    
195
        @Override
196
        public void copyPropertiesFrom(PropertiesSupport properties) {
197
        }
198

    
199
        @Override
200
        @SuppressWarnings("CloneDoesntCallSuperClone")
201
        public Value clone() throws CloneNotSupportedException {
202
            return this;
203
        }
204

    
205
        @Override
206
        public void accept(Visitor visitor, VisitorFilter filter) {
207
        }
208

    
209
        @Override
210
        public Object getProperty(String name) {
211
            return null;
212
        }
213

    
214
        @Override
215
        public void setProperty(String name, Object value) {
216
        }
217

    
218
        @Override
219
        public Map<String, Object> getProperties() {
220
            return Collections.EMPTY_MAP;
221
        }
222
    };
223
    
224
    public interface Custom extends Value {
225
        public Object value();
226
        public Custom add(Variable variable);
227
        public Custom add(Parameter parameter);
228
    }
229

    
230
    public interface Variable extends Value, Comparable<Variable> {
231
        public String name();
232
    }
233

    
234
    public interface Parameter extends Value {
235
        public Parameter as_constant();
236
        public Parameter as_variable();        
237
        public Parameter value(Object value);
238
        public Parameter name(String value);
239
        public int type();
240
        public String name();
241
        public Object value();
242
        public boolean is_constant();
243
        public boolean is_variable();
244
    }
245
    
246
    public interface Function extends Value {
247
        public String name();
248
        public List<Value> parameters();
249
        public Function parameter(Value parameter);
250
        public Function format(String format);
251
    }
252

    
253
    public interface Method extends Value {
254
        public String name();
255
        public Value instance();
256
        public List<Value> parameters();
257
        public Function parameter(Value parameter);
258
    }
259

    
260
    public interface BinaryOperator extends Function {
261
        public String name();
262
        public Value left();
263
        public Value right();
264
        public BinaryOperator left(Value operand);
265
        public BinaryOperator right(Value operand);
266
    }
267

    
268
    public abstract class AbstractValue implements Value {
269

    
270
        protected PropertiesSupportHelper properties;
271
        
272
        protected AbstractValue() {
273
            this.properties = new PropertiesSupportHelper();
274
        }
275

    
276
        @Override
277
        public Value clone() throws CloneNotSupportedException {
278
            AbstractValue other = (AbstractValue) super.clone();
279
            other.properties = properties.clone();
280
            return other;
281
        }
282
        
283
        
284
        @Override
285
        public void copyPropertiesFrom(PropertiesSupport properties) {
286
            for (Map.Entry<String, Object> entry : properties.getProperties().entrySet()) {
287
                String key = entry.getKey();
288
                Object value1 = entry.getValue();
289
                this.setProperty(key, value1);
290
            }
291
        }
292
        
293
        @Override
294
        public void accept(Visitor visitor, VisitorFilter filter) {
295
            if (filter == null || filter.accept(this)) {
296
                visitor.visit(this);
297
            }
298
        }
299

    
300
        @Override
301
        public Map<String, Object> getProperties() {
302
            return this.properties.getProperties();
303
        }
304

    
305
        @Override
306
        public Object getProperty(String name) {
307
            return this.properties.getProperty(name);
308
        }
309

    
310
        @Override
311
        public void setProperty(String name, Object value) {
312
            this.properties.setProperty(name, value);
313
        }
314

    
315
        @Override
316
        public void replace(Value target, Value replacement) {
317
            // Do nothing
318
        }
319
    }
320

    
321
    public class ClassVisitorFilter implements VisitorFilter {
322

    
323
        private final Class classFilter;
324

    
325
        public ClassVisitorFilter(Class classFilter) {
326
            this.classFilter = classFilter;
327
        }
328

    
329
        @Override
330
        public boolean accept(Visitable visitable) {
331
            if( classFilter==null ) {
332
                return true;
333
            }
334
            return classFilter.isInstance(visitable);
335
        }
336

    
337
    }
338

    
339
    public static final Formatter<Value> EMPTY_FORMATTER = new Formatter<Value>() {
340
        @Override
341
        public boolean canApply(Value value) {
342
            return false;
343
        }
344

    
345
        @Override
346
        public String format(Value value) {
347
            return "";
348
        }
349
    };
350
            
351
    public Formatter<Value> formatter();
352

    
353
    public String quote_for_identifiers();
354
    
355
    public String quote_for_strings();
356
    
357
    public void accept(Visitor visitor, VisitorFilter filter);
358

    
359
    public List<Variable> variables();
360
    
361
    public List<String> variables_names();
362
    
363
    public List<Parameter> parameters();
364
    
365
    public List<String> parameters_names();
366
    
367
    public String identifier(String name);
368

    
369
    public String bytearray_hex(byte[] data);
370

    
371
    public String bytearray_0x(byte[] data);
372

    
373
    public String bytearray_x(byte[] data);
374

    
375
    public String string(String s);
376
   
377
    public Value value();
378
    
379
    public ExpressionBuilder value(Value value);
380

    
381
    public Group group(Value group);
382
    
383
    public Constant bytearray(byte[] data);
384
    
385
    public Variable variable(String name);
386
    
387
    public Variable column(String name); // Alias for variable(name)
388

    
389
    public Value column(String tableName, String columnName);
390

    
391
    public Parameter parameter(String name);
392

    
393
    public Parameter parameter();
394

    
395
    public Constant constant(Object value);
396
    
397
    public Constant constant(Object value, int type);
398
    
399
    public Constant constant(Object value, Class theClass);
400
        
401
    public Custom custom(Object value);
402

    
403
    public Method method(Value instance, String name, Value... values);
404

    
405
    public Function function(String name, Value... values);
406
    
407
    public BinaryOperator binaryOperator(String name, Value leftOperand, Value rightOperand);
408

    
409
    public Value toValue(String expression);
410

    
411
    public String repr(Object value);
412
    
413
    public String toString(Formatter<Value> formatter);
414
    
415
    public Function not(Value value);
416

    
417
    public Function not_is_null(Value value);
418
    
419
    public Function is_null(Value value);
420

    
421
      
422
    public BinaryOperator and(Value op1, Value op2);
423

    
424
    public BinaryOperator and(Expression op1, Expression op2);
425

    
426
    public BinaryOperator and(Expression op1, Value op2);
427

    
428
    public BinaryOperator or(Value op1, Value op2);
429

    
430
    public BinaryOperator eq(Value op1, Value op2);
431
    
432
    public BinaryOperator ne(Value op1, Value op2);
433
    
434
    public BinaryOperator gt(Value op1, Value op2);
435
    
436
    public BinaryOperator ge(Value op1, Value op2);
437

    
438
    public BinaryOperator lt(Value op1, Value op2);
439
    
440
    public BinaryOperator le(Value op1, Value op2);
441

    
442
    public BinaryOperator like(Value op1, Value op2);
443

    
444
    public BinaryOperator ilike(Value op1, Value op2);
445

    
446
    public BinaryOperator add(Value op1, Value op2);
447

    
448
    public BinaryOperator subst(Value op1, Value op2);
449

    
450
    public BinaryOperator mult(Value op1, Value op2);
451

    
452
    public BinaryOperator div(Value op1, Value op2);
453

    
454
    public Function concat(Value...values);
455

    
456
    public ExpressionBuilder set(Value value);
457
    
458
    public ExpressionBuilder and(Value value);
459

    
460
    public ExpressionBuilder or(Value value);
461

    
462
    public Function iif(Value condition, Value iftrue, Value iffalse);
463
    
464
    public Function ifnull(Value value, Value iftrue, Value iffalse);
465

    
466
    public ExpressionBuilder createExpressionBuilder();
467
   
468
    public Function left(Value str, Value size);
469
    
470
    public Function right(Value str, Value len);
471
    
472
    public Function locate(Value search, Value str, Value start) ;
473
    
474
    public Function position(Value search, Value str);
475
    
476
    public Function lpad(Value str, Value len, Value padstr) ;
477
    
478
    public Function rpad(Value str, Value len, Value padstr);
479
    
480
    public Function ltrim(Value str);
481
    
482
    public Function rtrim(Value str);
483
    
484
    public Function trim(Value str);
485
    
486
    public Function repeat(Value str, Value size);
487
    
488
    public Function replace(Value str, Value search, Value replstr);
489
    
490
    public Function ascii(Value str);
491
    
492
    public Function lenght(Value str);
493

    
494
    public Function instr(Value str, Value search, Value start);
495
    
496
    public Function lower(Value str);
497
    
498
    public Function upper(Value str);
499
    
500
    public Function space(Value size);
501
    
502
    public Function substring(Value str, Value start, Value len);
503
    
504
    public Function abs(Value num);
505
    
506
    public Function acos(Value num);
507
    
508
    public Function asin(Value num);
509
    
510
    public Function atan(Value num);
511
    
512
    public Function cos(Value num);
513
    
514
    public Function cosh(Value num);
515
    
516
    public Function cot(Value num);
517
    
518
    public Function bitand(Value num1, Value num2);
519
    
520
    public Function bitor(Value num1, Value num2);
521
    
522
    public Function bitxor(Value num1, Value num2);
523
    
524
    public Function ceil(Value num);
525
    
526
    public Function degrees(Value num);
527
    
528
    public Function exp(Value num);
529
    
530
    public Function floor(Value num);
531
    
532
    public Function log(Value num);
533
    
534
    public Function log10(Value num);
535
    
536
    public Function pi();
537
    
538
    public Function power(Value num);
539
    
540
    public Function radians(Value num);
541
    
542
    public Function rand(Value num);
543
    
544
    public Function round(Value num);
545
    
546
    public Function sqrt(Value num);
547
    
548
    public Function sign(Value num);
549
    
550
    public Function sin(Value num);
551
    
552
    public Function sinh(Value num);
553
    
554
    public Function tan(Value num);
555
    
556
    public Function tanh(Value num);
557
    
558
    public Function zero();
559
    
560
    public Function chr(Value num);
561

    
562
    public Function decode(Value value, Value format);
563

    
564
    public Function cast(Value object, Value typeName);
565

    
566
    public Function toDouble(Value object);
567

    
568
    public Function toFloat(Value object);
569

    
570
    public Function toLong(Value object);
571

    
572
    public Function toInteger(Value object);
573

    
574
    public Function toStr(Value object);
575

    
576
    public Function list();
577
    
578
    public Function tuple();
579
    
580
    public Function tuple(Object... values);
581
    
582
    public Function getattr(String objectId, String attributeId);
583
    
584
    public boolean isEmpty();
585

    
586
    public Function color(Value red, Value green, Value blue, Value alfa);
587
    
588
    public Function color(Color color);
589
    
590
    public Function date(Value date);
591
    
592
    public Function time(Value date);
593
    
594
    public Function timestamp(Value date);
595

    
596
    public Function date(Date date);
597
    
598
    public Function time(Date time);
599
    
600
    public Function timestamp(Date timestamp);
601

    
602
    public Function date(String date);
603
    
604
    public Function time(String time);
605
    
606
    public Function timestamp(String timestamp);
607

    
608
    public Function to_date(Value date, Value format);
609
    
610
    public Function to_timestamp(Value timestamp, Value format);
611

    
612
    public Function current_date();
613
    
614
    public Function current_time();
615
    
616
    public Function current_timestamp();
617
    
618
    public Function let(String name, Value value);
619
    
620
    public Function date_add(Value datefield, Value valueToAdd, Value date);
621

    
622
    public Function date_diff(Value datefield, Value valueToSubst, Value date);
623
    
624
    public Function extract(Value datefield, Value source);
625
    
626
    public String build(Formatter<Value> formatter);
627
    
628
    public String build();
629
    
630
    public void setProperties(Class filter, final Object... values);
631
    
632
}