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

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_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
    public static final String FUNCTION_CONCAT = "CONCAT";
56
    public static final String FUNCTION_ABS = "ABS";
57
    public static final String FUNCTION_ACOS = "ACOS";
58
    public static final String FUNCTION_ASIN = "ASIN";
59
    public static final String FUNCTION_ATAN = "ATAN";
60
    public static final String FUNCTION_COS = "COS";
61
    public static final String FUNCTION_COSH = "COSH";
62
    public static final String FUNCTION_COT = "COT";
63
    public static final String FUNCTION_BITAND = "BITAND";
64
    public static final String FUNCTION_BITOR = "BITOR";
65
    public static final String FUNCTION_BITXOR = "BITXOR";
66
    public static final String FUNCTION_CEIL = "CEIL";
67
    public static final String FUNCTION_DEGREES = "DEGREES";
68
    public static final String FUNCTION_EXP = "EXP";
69
    public static final String FUNCTION_FLOOR = "FLOOR";
70
    public static final String FUNCTION_LOG = "LOG";
71
    public static final String FUNCTION_LOG10 = "LOG10";
72
    public static final String FUNCTION_PI = "PI";
73
    public static final String FUNCTION_POWER = "POWER";
74
    public static final String FUNCTION_RADIANS = "RADIANS";
75
    public static final String FUNCTION_RAND = "RAND";
76
    public static final String FUNCTION_ROUND = "ROUND";
77
    public static final String FUNCTION_SQRT = "SQRT";
78
    public static final String FUNCTION_SIGN = "SIGN";
79
    public static final String FUNCTION_SIN = "SIN";
80
    public static final String FUNCTION_SINH = "SINH";
81
    public static final String FUNCTION_TAN = "TAN";
82
    public static final String FUNCTION_TANH = "TANH";
83
    public static final String FUNCTION_ZERO = "ZERO";
84
    public static final String FUNCTION_CHR = "CHR";
85
    public static final String FUNCTION_MOD = "MOD";
86
    public static final String FUNCTION_UUID = "UUID";
87

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

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

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

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

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

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

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

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

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

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

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

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

    
200
    public abstract class AbstractValue implements Value {
201

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

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

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

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

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

    
236
    public class ClassVisitorFilter implements VisitorFilter {
237

    
238
        private final Class classFilter;
239

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

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

    
252
    }
253

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

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

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

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

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

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

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

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

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

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

    
306
    public Parameter parameter(String name);
307

    
308
    public Parameter parameter();
309

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

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

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

    
324
    public Value toValue(String expression);
325

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
375
    public ExpressionBuilder or(Value value);
376

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

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

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

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

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

    
481
    public Function toDouble(Value object);
482

    
483
    public Function toFloat(Value object);
484

    
485
    public Function toLong(Value object);
486

    
487
    public Function toInteger(Value object);
488

    
489
    public Function toStr(Value object);
490

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

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

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

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

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

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

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