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

History | View | Annotate | Download (14.7 KB)

1
package org.gvsig.expressionevaluator;
2

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

    
8
public interface ExpressionBuilder {
9

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

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

    
89
    public static final String FUNCTION_CAST = "CAST";
90
    public static final String FUNCTION_DECODE = "DECODE";
91
    public static final String FUNCTION_TODOUBLE = "TODOUBLE";
92
    public static final String FUNCTION_TOFLOAT = "TOFLOAT";
93
    public static final String FUNCTION_TOINTEGER = "TOINTEGER";
94
    public static final String FUNCTION_TOLONG = "TOLONG";
95
    public static final String FUNCTION_TOSTR = "TOSTR";
96
    
97
    public static final String FUNCTION_INCR = "INCR";
98
    public static final String FUNCTION_DECR = "DECR";
99
    
100
    public static final String FUNCTION_RANGE = "RANGE";
101
    public static final String FUNCTION_EVAL = "EVAL";
102
    public static final String FUNCTION_LIST = "LIST";
103
    public static final String FUNCTION_TUPLE = "TUPLE";
104
    
105
    public static final int PARAMETER_TYPE_CONSTANT = 0;
106
    public static final int PARAMETER_TYPE_VARIABLE = 1;
107
    
108
    public interface VisitorFilter {
109
        boolean accept(Visitable visitable);
110
    }
111

    
112
     public interface Visitor {
113
        public void visit(Visitable value);
114
    }
115

    
116
    public interface Visitable {
117
        public void accept(Visitor visitor, VisitorFilter filter);
118
    }
119
        
120
    public interface Value extends Visitable, PropertiesSupport {
121
        public String toString(Formatter<Value> formatter);
122
        public void replace(Value target, Value replacement);
123
    }
124

    
125
    public interface Group extends Value {
126
        public Value value();
127
    }
128

    
129
    public interface Constant extends Value {
130
        public Object value();
131
    }
132

    
133
    public interface Custom extends Value {
134
        public Object value();
135
        public Custom add(Variable variable);
136
        public Custom add(Parameter parameter);
137
    }
138

    
139
    public interface Variable extends Value, Comparable<Variable> {
140
        public String name();
141
    }
142

    
143
    public interface Parameter extends Value {
144
        public Parameter as_constant();
145
        public Parameter as_variable();        
146
        public Parameter value(Object value);
147
        public Parameter name(String value);
148
        public int type();
149
        public String name();
150
        public Object value();
151
        public boolean is_constant();
152
        public boolean is_variable();
153
    }
154
    
155
    public interface Function extends Value {
156
        public String name();
157
        public List<Value> parameters();
158
        public Function parameter(Value parameter);
159
    }
160

    
161
    public interface Method extends Value {
162
        public String name();
163
        public Value instance();
164
        public List<Value> parameters();
165
        public Function parameter(Value parameter);
166
    }
167

    
168
    public interface BinaryOperator extends Value {
169
        public String name();
170
        public Value left();
171
        public Value right();
172
        public BinaryOperator left(Value operand);
173
        public BinaryOperator right(Value operand);
174
    }
175

    
176
    public abstract class AbstractValue implements Value {
177

    
178
        private PropertiesSupport properties;
179
        
180
        protected AbstractValue() {
181
            this.properties = new PropertiesSupportHelper();
182
        }
183
        
184
        @Override
185
        public void accept(Visitor visitor, VisitorFilter filter) {
186
            if (filter == null || filter.accept(this)) {
187
                visitor.visit(this);
188
            }
189
        }
190

    
191
        @Override
192
        public Map<String, Object> getProperties() {
193
            return this.properties.getProperties();
194
        }
195

    
196
        @Override
197
        public Object getProperty(String name) {
198
            return this.properties.getProperty(name);
199
        }
200

    
201
        @Override
202
        public void setProperty(String name, Object value) {
203
            this.properties.setProperty(name, value);
204
        }
205

    
206
        @Override
207
        public void replace(Value target, Value replacement) {
208
            // Do nothing
209
        }
210
    }
211

    
212
    public class ClassVisitorFilter implements VisitorFilter {
213

    
214
        private final Class classFilter;
215

    
216
        public ClassVisitorFilter(Class classFilter) {
217
            this.classFilter = classFilter;
218
        }
219

    
220
        @Override
221
        public boolean accept(Visitable visitable) {
222
            if( classFilter==null ) {
223
                return true;
224
            }
225
            return classFilter.isInstance(visitable);
226
        }
227

    
228
    }
229

    
230
    public static final Formatter<Value> EMPTY_FORMATTER = new Formatter<Value>() {
231
        @Override
232
        public boolean canApply(Value value) {
233
            return false;
234
        }
235

    
236
        @Override
237
        public String format(Value value) {
238
            return "";
239
        }
240
    };
241
            
242
    public String quote_for_identifiers();
243
    
244
    public String quote_for_strings();
245
    
246
    public void accept(Visitor visitor, VisitorFilter filter);
247

    
248
    public List<Variable> variables();
249
    
250
    public List<String> variables_names();
251
    
252
    public List<Parameter> parameters();
253
    
254
    public List<String> parameters_names();
255
    
256
    public String identifier(String name);
257

    
258
    public String bytearray_hex(byte[] data);
259

    
260
    public String bytearray_0x(byte[] data);
261

    
262
    public String bytearray_x(byte[] data);
263

    
264
    public String string(String s);
265
   
266
    public Value value();
267
    
268
    public ExpressionBuilder value(Value value);
269

    
270
    public Group group(Value group);
271
    
272
    public Constant bytearray(byte[] data);
273
    
274
    public Variable variable(String name);
275
    
276
    public Variable column(String name); // Alias for variable(name)
277

    
278
    public Parameter parameter(String name);
279

    
280
    public Parameter parameter();
281

    
282
    public Constant constant(Object value);
283
    
284
    public Custom custom(Object value);
285

    
286
    public Method method(Value instance, String name, Value... values);
287

    
288
    public Function function(String name, Value... values);
289
    
290
    public BinaryOperator binaryOperator(String name, Value leftOperand, Value rightOperand);
291

    
292
    public Value toValue(String expression);
293

    
294
    public String repr(Object value);
295
    
296
    public String toString(Formatter<Value> formatter);
297
    
298
    public Function not(Value value);
299

    
300
    public Function not_is_null(Value value);
301
    
302
    public Function is_null(Value value);
303

    
304
      
305
    public BinaryOperator and(Value op1, Value op2);
306

    
307
    public BinaryOperator and(Expression op1, Expression op2);
308

    
309
    public BinaryOperator and(Expression op1, Value op2);
310

    
311
    public BinaryOperator or(Value op1, Value op2);
312

    
313
    public BinaryOperator eq(Value op1, Value op2);
314
    
315
    public BinaryOperator ne(Value op1, Value op2);
316
    
317
    public BinaryOperator gt(Value op1, Value op2);
318
    
319
    public BinaryOperator ge(Value op1, Value op2);
320

    
321
    public BinaryOperator lt(Value op1, Value op2);
322
    
323
    public BinaryOperator le(Value op1, Value op2);
324

    
325
    public BinaryOperator like(Value op1, Value op2);
326

    
327
    public BinaryOperator ilike(Value op1, Value op2);
328

    
329
    public BinaryOperator add(Value op1, Value op2);
330

    
331
    public BinaryOperator subst(Value op1, Value op2);
332

    
333
    public BinaryOperator mult(Value op1, Value op2);
334

    
335
    public BinaryOperator div(Value op1, Value op2);
336

    
337
    public BinaryOperator concat(Value op1, Value op2);
338

    
339
    public ExpressionBuilder set(Value value);
340
    
341
    public ExpressionBuilder and(Value value);
342

    
343
    public ExpressionBuilder or(Value value);
344

    
345
    public Function iif(Value condition, Value iftrue, Value iffalse);
346
    
347
    public Function ifnull(Value value, Value iftrue, Value iffalse);
348

    
349
    public ExpressionBuilder createExpressionBuilder();
350
   
351
    public Function left(Value str, Value size);
352
    
353
    public Function right(Value str, Value len);
354
    
355
    public Function locate(Value search, Value str, Value start) ;
356
    
357
    public Function position(Value search, Value str);
358
    
359
    public Function lpad(Value str, Value len, Value padstr) ;
360
    
361
    public Function rpad(Value str, Value len, Value padstr);
362
    
363
    public Function ltrim(Value str);
364
    
365
    public Function rtrim(Value str);
366
    
367
    public Function trim(Value str);
368
    
369
    public Function repeat(Value str, Value size);
370
    
371
    public Function replace(Value str, Value search, Value replstr);
372
    
373
    public Function ascii(Value str);
374
    
375
    public Function lenght(Value str);
376

    
377
    public Function instr(Value str, Value search, Value start);
378
    
379
    public Function lower(Value str);
380
    
381
    public Function upper(Value str);
382
    
383
    public Function space(Value size);
384
    
385
    public Function substring(Value str, Value start, Value len);
386
    
387
    public Function abs(Value num);
388
    
389
    public Function acos(Value num);
390
    
391
    public Function asin(Value num);
392
    
393
    public Function atan(Value num);
394
    
395
    public Function cos(Value num);
396
    
397
    public Function cosh(Value num);
398
    
399
    public Function cot(Value num);
400
    
401
    public Function bitand(Value num1, Value num2);
402
    
403
    public Function bitor(Value num1, Value num2);
404
    
405
    public Function bitxor(Value num1, Value num2);
406
    
407
    public Function ceil(Value num);
408
    
409
    public Function degrees(Value num);
410
    
411
    public Function exp(Value num);
412
    
413
    public Function floor(Value num);
414
    
415
    public Function log(Value num);
416
    
417
    public Function log10(Value num);
418
    
419
    public Function pi();
420
    
421
    public Function power(Value num);
422
    
423
    public Function radians(Value num);
424
    
425
    public Function rand(Value num);
426
    
427
    public Function round(Value num);
428
    
429
    public Function sqrt(Value num);
430
    
431
    public Function sign(Value num);
432
    
433
    public Function sin(Value num);
434
    
435
    public Function sinh(Value num);
436
    
437
    public Function tan(Value num);
438
    
439
    public Function tanh(Value num);
440
    
441
    public Function zero();
442
    
443
    public Function chr(Value num);
444

    
445
    public Function decode(Value value, Value format);
446

    
447
    public Function cast(Value object, Value typeName);
448

    
449
    public Function toDouble(Value object);
450

    
451
    public Function toFloat(Value object);
452

    
453
    public Function toLong(Value object);
454

    
455
    public Function toInteger(Value object);
456

    
457
    public Function toStr(Value object);
458

    
459
    public Function list();
460
    
461
    public Function tuple();
462
    
463
    public Function tuple(Constant... values);
464
    
465
    public boolean isEmpty();
466
}