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

History | View | Annotate | Download (17.2 KB)

1
package org.gvsig.expressionevaluator;
2

    
3
import java.util.Date;
4
import java.util.List;
5
import java.util.Map;
6
import org.gvsig.tools.util.PropertiesSupport;
7
import org.gvsig.tools.util.PropertiesSupportHelper;
8

    
9
public interface ExpressionBuilder {
10

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

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

    
89
    public static final String FUNCTION_DATE = "DATE";
90
    public static final String FUNCTION_TIME = "TIME";
91
    public static final String FUNCTION_TIMESTAMP = "TIMESTAMP";  
92

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

    
114
    public static final String FUNCTION_INCR = "INCR";
115
    public static final String FUNCTION_DECR = "DECR";
116
    
117
    public static final String FUNCTION_RANGE = "RANGE";
118
    public static final String FUNCTION_EVAL = "EVAL";
119
    public static final String FUNCTION_LIST = "LIST";
120
    public static final String FUNCTION_TUPLE = "TUPLE";
121
    public static final String FUNCTION_DICT = "DICT";
122
    
123
    public static final String FUNCTION_GETATTR = "GETATTR";
124
    public static final String FUNCTION_GETITEM = "GETITEM";
125
    public static final String FUNCTION_URLREAD = "URL_READ";
126
    public static final String FUNCTION_URLREADBYTES = "URL_READBYTES";
127
    public static final String FUNCTION_URL = "URL";
128
    
129
    public static final int PARAMETER_TYPE_CONSTANT = 0;
130
    public static final int PARAMETER_TYPE_VARIABLE = 1;
131
    
132
    public interface VisitorFilter {
133
        boolean accept(Visitable visitable);
134
    }
135

    
136
     public interface Visitor {
137
        public void visit(Visitable value);
138
    }
139

    
140
    public interface Visitable {
141
        public void accept(Visitor visitor, VisitorFilter filter);
142
    }
143
        
144
    public interface Value extends Visitable, PropertiesSupport {
145
        public String toString(Formatter<Value> formatter);
146
        public void replace(Value target, Value replacement);
147
    }
148

    
149
    public interface Group extends Value {
150
        public Value value();
151
    }
152

    
153
    public interface Constant extends Value {
154
        public Object value();
155
    }
156

    
157
    public interface Custom extends Value {
158
        public Object value();
159
        public Custom add(Variable variable);
160
        public Custom add(Parameter parameter);
161
    }
162

    
163
    public interface Variable extends Value, Comparable<Variable> {
164
        public String name();
165
    }
166

    
167
    public interface Parameter extends Value {
168
        public Parameter as_constant();
169
        public Parameter as_variable();        
170
        public Parameter value(Object value);
171
        public Parameter name(String value);
172
        public int type();
173
        public String name();
174
        public Object value();
175
        public boolean is_constant();
176
        public boolean is_variable();
177
    }
178
    
179
    public interface Function extends Value {
180
        public String name();
181
        public List<Value> parameters();
182
        public Function parameter(Value parameter);
183
        public Function format(String format);
184
    }
185

    
186
    public interface Method extends Value {
187
        public String name();
188
        public Value instance();
189
        public List<Value> parameters();
190
        public Function parameter(Value parameter);
191
    }
192

    
193
    public interface BinaryOperator extends Function {
194
        public String name();
195
        public Value left();
196
        public Value right();
197
        public BinaryOperator left(Value operand);
198
        public BinaryOperator right(Value operand);
199
    }
200

    
201
    public abstract class AbstractValue implements Value {
202

    
203
        protected final PropertiesSupport properties;
204
        
205
        protected AbstractValue() {
206
            this.properties = new PropertiesSupportHelper();
207
        }
208
        
209
        @Override
210
        public void accept(Visitor visitor, VisitorFilter filter) {
211
            if (filter == null || filter.accept(this)) {
212
                visitor.visit(this);
213
            }
214
        }
215

    
216
        @Override
217
        public Map<String, Object> getProperties() {
218
            return this.properties.getProperties();
219
        }
220

    
221
        @Override
222
        public Object getProperty(String name) {
223
            return this.properties.getProperty(name);
224
        }
225

    
226
        @Override
227
        public void setProperty(String name, Object value) {
228
            this.properties.setProperty(name, value);
229
        }
230

    
231
        @Override
232
        public void replace(Value target, Value replacement) {
233
            // Do nothing
234
        }
235
    }
236

    
237
    public class ClassVisitorFilter implements VisitorFilter {
238

    
239
        private final Class classFilter;
240

    
241
        public ClassVisitorFilter(Class classFilter) {
242
            this.classFilter = classFilter;
243
        }
244

    
245
        @Override
246
        public boolean accept(Visitable visitable) {
247
            if( classFilter==null ) {
248
                return true;
249
            }
250
            return classFilter.isInstance(visitable);
251
        }
252

    
253
    }
254

    
255
    public static final Formatter<Value> EMPTY_FORMATTER = new Formatter<Value>() {
256
        @Override
257
        public boolean canApply(Value value) {
258
            return false;
259
        }
260

    
261
        @Override
262
        public String format(Value value) {
263
            return "";
264
        }
265
    };
266
            
267
    public Formatter<Value> formatter();
268

    
269
    public String quote_for_identifiers();
270
    
271
    public String quote_for_strings();
272
    
273
    public void accept(Visitor visitor, VisitorFilter filter);
274

    
275
    public List<Variable> variables();
276
    
277
    public List<String> variables_names();
278
    
279
    public List<Parameter> parameters();
280
    
281
    public List<String> parameters_names();
282
    
283
    public String identifier(String name);
284

    
285
    public String bytearray_hex(byte[] data);
286

    
287
    public String bytearray_0x(byte[] data);
288

    
289
    public String bytearray_x(byte[] data);
290

    
291
    public String string(String s);
292
   
293
    public Value value();
294
    
295
    public ExpressionBuilder value(Value value);
296

    
297
    public Group group(Value group);
298
    
299
    public Constant bytearray(byte[] data);
300
    
301
    public Variable variable(String name);
302
    
303
    public Variable column(String name); // Alias for variable(name)
304

    
305
    public Value column(String tableName, String columnName);
306

    
307
    public Parameter parameter(String name);
308

    
309
    public Parameter parameter();
310

    
311
    public Constant constant(Object value);
312
    
313
    public Constant constant(Object value, int type);
314
    
315
    public Constant constant(Object value, Class theClass);
316
        
317
    public Custom custom(Object value);
318

    
319
    public Method method(Value instance, String name, Value... values);
320

    
321
    public Function function(String name, Value... values);
322
    
323
    public BinaryOperator binaryOperator(String name, Value leftOperand, Value rightOperand);
324

    
325
    public Value toValue(String expression);
326

    
327
    public String repr(Object value);
328
    
329
    public String toString(Formatter<Value> formatter);
330
    
331
    public Function not(Value value);
332

    
333
    public Function not_is_null(Value value);
334
    
335
    public Function is_null(Value value);
336

    
337
      
338
    public BinaryOperator and(Value op1, Value op2);
339

    
340
    public BinaryOperator and(Expression op1, Expression op2);
341

    
342
    public BinaryOperator and(Expression op1, Value op2);
343

    
344
    public BinaryOperator or(Value op1, Value op2);
345

    
346
    public BinaryOperator eq(Value op1, Value op2);
347
    
348
    public BinaryOperator ne(Value op1, Value op2);
349
    
350
    public BinaryOperator gt(Value op1, Value op2);
351
    
352
    public BinaryOperator ge(Value op1, Value op2);
353

    
354
    public BinaryOperator lt(Value op1, Value op2);
355
    
356
    public BinaryOperator le(Value op1, Value op2);
357

    
358
    public BinaryOperator like(Value op1, Value op2);
359

    
360
    public BinaryOperator ilike(Value op1, Value op2);
361

    
362
    public BinaryOperator add(Value op1, Value op2);
363

    
364
    public BinaryOperator subst(Value op1, Value op2);
365

    
366
    public BinaryOperator mult(Value op1, Value op2);
367

    
368
    public BinaryOperator div(Value op1, Value op2);
369

    
370
    public Function concat(Value...values);
371

    
372
    public ExpressionBuilder set(Value value);
373
    
374
    public ExpressionBuilder and(Value value);
375

    
376
    public ExpressionBuilder or(Value value);
377

    
378
    public Function iif(Value condition, Value iftrue, Value iffalse);
379
    
380
    public Function ifnull(Value value, Value iftrue, Value iffalse);
381

    
382
    public ExpressionBuilder createExpressionBuilder();
383
   
384
    public Function left(Value str, Value size);
385
    
386
    public Function right(Value str, Value len);
387
    
388
    public Function locate(Value search, Value str, Value start) ;
389
    
390
    public Function position(Value search, Value str);
391
    
392
    public Function lpad(Value str, Value len, Value padstr) ;
393
    
394
    public Function rpad(Value str, Value len, Value padstr);
395
    
396
    public Function ltrim(Value str);
397
    
398
    public Function rtrim(Value str);
399
    
400
    public Function trim(Value str);
401
    
402
    public Function repeat(Value str, Value size);
403
    
404
    public Function replace(Value str, Value search, Value replstr);
405
    
406
    public Function ascii(Value str);
407
    
408
    public Function lenght(Value str);
409

    
410
    public Function instr(Value str, Value search, Value start);
411
    
412
    public Function lower(Value str);
413
    
414
    public Function upper(Value str);
415
    
416
    public Function space(Value size);
417
    
418
    public Function substring(Value str, Value start, Value len);
419
    
420
    public Function abs(Value num);
421
    
422
    public Function acos(Value num);
423
    
424
    public Function asin(Value num);
425
    
426
    public Function atan(Value num);
427
    
428
    public Function cos(Value num);
429
    
430
    public Function cosh(Value num);
431
    
432
    public Function cot(Value num);
433
    
434
    public Function bitand(Value num1, Value num2);
435
    
436
    public Function bitor(Value num1, Value num2);
437
    
438
    public Function bitxor(Value num1, Value num2);
439
    
440
    public Function ceil(Value num);
441
    
442
    public Function degrees(Value num);
443
    
444
    public Function exp(Value num);
445
    
446
    public Function floor(Value num);
447
    
448
    public Function log(Value num);
449
    
450
    public Function log10(Value num);
451
    
452
    public Function pi();
453
    
454
    public Function power(Value num);
455
    
456
    public Function radians(Value num);
457
    
458
    public Function rand(Value num);
459
    
460
    public Function round(Value num);
461
    
462
    public Function sqrt(Value num);
463
    
464
    public Function sign(Value num);
465
    
466
    public Function sin(Value num);
467
    
468
    public Function sinh(Value num);
469
    
470
    public Function tan(Value num);
471
    
472
    public Function tanh(Value num);
473
    
474
    public Function zero();
475
    
476
    public Function chr(Value num);
477

    
478
    public Function decode(Value value, Value format);
479

    
480
    public Function cast(Value object, Value typeName);
481

    
482
    public Function toDouble(Value object);
483

    
484
    public Function toFloat(Value object);
485

    
486
    public Function toLong(Value object);
487

    
488
    public Function toInteger(Value object);
489

    
490
    public Function toStr(Value object);
491

    
492
    public Function list();
493
    
494
    public Function tuple();
495
    
496
    public Function tuple(Object... values);
497
    
498
    public Function getattr(String objectId, String attributeId);
499
    
500
    public boolean isEmpty();
501

    
502
    public Function date(Value date);
503
    
504
    public Function time(Value date);
505
    
506
    public Function timestamp(Value date);
507

    
508
    public Function date(Date date);
509
    
510
    public Function time(Date time);
511
    
512
    public Function timestamp(Date timestamp);
513

    
514
    public Function date(String date);
515
    
516
    public Function time(String time);
517
    
518
    public Function timestamp(String timestamp);
519

    
520
    public Function to_date(Value date, Value format);
521
    
522
    public Function to_timestamp(Value timestamp, Value format);
523

    
524
    public Function current_date();
525
    
526
    public Function current_time();
527
    
528
    public Function current_timestamp();
529
    
530
    public Function date_add(Value datefield, Value valueToAdd, Value date);
531

    
532
    public Function date_diff(Value datefield, Value valueToSubst, Value date);
533
    
534
    public Function extract(Value datefield, Value source);
535
    
536
    public String build(Formatter<Value> formatter);
537
    
538
    public String build();
539
}