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

History | View | Annotate | Download (17 KB)

1
package org.gvsig.expressionevaluator;
2

    
3
import java.util.List;
4
import java.util.Map;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.primitive.Envelope;
8
import org.gvsig.tools.util.PropertiesSupport;
9
import org.gvsig.tools.util.PropertiesSupportHelper;
10

    
11
public interface ExpressionBuilder {
12

    
13
    public static final String OPERATOR_NOT = "NOT";
14
    public static final String OPERATOR_IS = "IS";
15
    public static final String OPERATOR_AND = "AND";
16
    public static final String OPERATOR_OR = "OR";
17
    public static final String OPERATOR_EQ = "EQ";
18
    public static final String OPERATOR_NE = "NE";
19
    public static final String OPERATOR_GT = "GT";
20
    public static final String OPERATOR_GE = "GE";
21
    public static final String OPERATOR_LT = "LT";
22
    public static final String OPERATOR_LE = "LE";
23
    public static final String OPERATOR_LIKE = "LIKE";
24
    public static final String OPERATOR_ILIKE = "ILIKE";
25
    public static final String OPERATOR_ADD = "ADD";
26
    public static final String OPERATOR_SUBST = "SUBST";
27
    public static final String OPERATOR_MULT = "MULT";
28
    public static final String OPERATOR_DIV = "DIV";
29
    public static final String OPERATOR_CONCAT = "CONCAT";
30
    
31
    public static final String FUNCTION_ST_SRID = "ST_SRID";
32
    public static final String FUNCTION_ST_ASTEXT = "ST_AsText";
33
    public static final String FUNCTION_ST_ASBINARY = "ST_AsBinary";
34
    public static final String FUNCTION_ST_ASEWKB = "ST_AsEWKB";
35
    public static final String FUNCTION_ST_ENVELOPE = "ST_Envelope";
36
    public static final String FUNCTION_ST_GEOMFROMTEXT = "ST_GeomFromText";
37
    public static final String FUNCTION_ST_GEOMFROMWKB = "ST_GeomFromWKB";
38
    public static final String FUNCTION_ST_GEOMFROMEWKB = "ST_GeomFromEWKB";
39
    public static final String FUNCTION_ST_SIMPLIFY = "ST_Simplify";
40
    public static final String FUNCTION_ST_EQUALS = "ST_Equals";
41
    public static final String FUNCTION_ST_INTERSECTS = "ST_Intersects";
42
    public static final String FUNCTION_ST_CONTAINS = "ST_Contains";
43
    public static final String FUNCTION_ST_DISJOINT = "ST_Disjoint";
44
    public static final String FUNCTION_ST_CROSSES = "ST_Crosses";
45
    public static final String FUNCTION_ST_ISCLOSED = "ST_IsClosed";
46
    public static final String FUNCTION_ST_OVERLAPS = "ST_Overlaps";
47
    public static final String FUNCTION_ST_TOUCHES = "ST_Touches";
48
    public static final String FUNCTION_ST_WITHIN = "ST_Within";
49
    public static final String FUNCTION_ST_UNIONAGGREGATE = "ST_UnionAggregate";
50
    public static final String FUNCTION_ST_EXTENTAGGREGATE = "ST_ExtentAggregate";
51

    
52
    public static final String FUNCTION_IIF = "IIF";
53
    public static final String FUNCTION_IFNULL = "IFNULL";
54
    
55
    public static final String FUNCTION_LEFT = "LEFT";
56
    public static final String FUNCTION_RIGHT = "RIGHT";
57
    public static final String FUNCTION_LOCATE = "LOCATE";
58
    public static final String FUNCTION_POSITION = "POSITION";
59
    public static final String FUNCTION_LPAD = "LPAD";
60
    public static final String FUNCTION_RPAD = "RPAD";
61
    public static final String FUNCTION_LTRIM = "LTRIM";
62
    public static final String FUNCTION_RTRIM = "RTRIM";
63
    public static final String FUNCTION_TRIM = "TRIM";
64
    public static final String FUNCTION_REPEAT = "REPEAT";
65
    public static final String FUNCTION_REPLACE = "REPLACE";
66
    public static final String FUNCTION_ASCII = "ASCII";
67
    public static final String FUNCTION_LENGHT = "LENGHT";
68
    public static final String FUNCTION_INSTR = "INSTR";
69
    public static final String FUNCTION_LOWER = "LOWER";
70
    public static final String FUNCTION_UPPER = "UPPER";
71
    public static final String FUNCTION_SPACE = "SPACE";
72
    public static final String FUNCTION_SUBSTRING = "SUBSTRING";
73
    public static final String FUNCTION_ACOS = "ACOS";
74
    public static final String FUNCTION_ASIN = "ASIN";
75
    public static final String FUNCTION_ATAN = "ATAN";
76
    public static final String FUNCTION_COS = "COS";
77
    public static final String FUNCTION_COSH = "COSH";
78
    public static final String FUNCTION_COT = "COT";
79
    public static final String FUNCTION_BITAND = "BITAND";
80
    public static final String FUNCTION_BITOR = "BITOR";
81
    public static final String FUNCTION_BITXOR = "BITXOR";
82
    public static final String FUNCTION_CEIL = "CEIL";
83
    public static final String FUNCTION_DEGREES = "DEGREES";
84
    public static final String FUNCTION_EXP = "EXP";
85
    public static final String FUNCTION_FLOOR = "FLOOR";
86
    public static final String FUNCTION_LOG = "LOG";
87
    public static final String FUNCTION_LOG10 = "LOG10";
88
    public static final String FUNCTION_PI = "PI";
89
    public static final String FUNCTION_POWER = "POWER";
90
    public static final String FUNCTION_RADIANS = "RADIANS";
91
    public static final String FUNCTION_RAND = "RAND";
92
    public static final String FUNCTION_ROUND = "ROUND";
93
    public static final String FUNCTION_SQRT = "SQRT";
94
    public static final String FUNCTION_SIGN = "SIGN";
95
    public static final String FUNCTION_SIN = "SIN";
96
    public static final String FUNCTION_SINH = "SINH";
97
    public static final String FUNCTION_TAN = "TAN";
98
    public static final String FUNCTION_TANH = "TANH";
99
    public static final String FUNCTION_ZERO = "ZERO";
100
    public static final String FUNCTION_CHR = "CHR";
101
    public static final String FUNCTION_DATE = "DATE";
102
    public static final String FUNCTION_NOW = "NOW";
103
    public static final String FUNCTION_TIME = "TIME";
104
    public static final String FUNCTION_TIMESTAMP = "TIMESTAMP";
105

    
106
    public static final String FUNCTION_CAST = "CAST";
107
    public static final String FUNCTION_DECODE = "DECODE";
108
    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
    
114
    public static final String FUNCTION_INCR = "INCR";
115
    public static final String FUNCTION_DECR = "DECR";
116
    
117
    public enum GeometrySupportType {
118
        WKT,
119
        WKB,
120
        EWKB,
121
        NATIVE
122
    }
123

    
124
    public enum ParameterType {
125
        Variable,
126
        Constant,
127
        Geometry
128
    }
129
    
130
    public interface VisitorFilter {
131
        boolean accept(Visitable visitable);
132
    }
133

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

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

    
146
    public interface Group extends Value {
147
        public Value value();
148
    }
149

    
150
    public interface Constant extends Value {
151
        public Object value();
152
    }
153

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

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

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

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

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

    
202
    public abstract class AbstractValue implements Value {
203

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

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

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

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

    
232
    }
233

    
234
    public class ClassVisitorFilter implements VisitorFilter {
235

    
236
        private final Class classFilter;
237

    
238
        public ClassVisitorFilter(Class classFilter) {
239
            this.classFilter = classFilter;
240
        }
241

    
242
        @Override
243
        public boolean accept(Visitable visitable) {
244
            return classFilter.isInstance(visitable);
245
        }
246

    
247
    }
248

    
249
    public static final Formatter<Value> EMPTY_FORMATTER = new Formatter<Value>() {
250
        @Override
251
        public boolean canApply(Value value) {
252
            return false;
253
        }
254

    
255
        @Override
256
        public String format(Value value) {
257
            return "";
258
        }
259
    };
260
            
261
    public String quote_for_identifiers();
262
    
263
    public String quote_for_strings();
264
    
265
    public void accept(Visitor visitor, VisitorFilter filter);
266

    
267
    public List<Variable> variables();
268
    
269
    public List<String> variables_names();
270
    
271
    public List<Parameter> parameters();
272
    
273
    public List<String> parameters_names();
274
    
275
    public GeometrySupportType geometry_support_type();
276
    
277
    public ExpressionBuilder geometry_support_type(GeometrySupportType geometrySupportType);
278

    
279
    public String identifier(String name);
280

    
281
    public String bytearray_hex(byte[] data);
282

    
283
    public String bytearray_0x(byte[] data);
284

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

    
287
    public String string(String s);
288
   
289
    public Object srs_id(IProjection projection);
290
    
291
    public Value value();
292
    
293
    public ExpressionBuilder value(Value value);
294

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

    
303
    public Parameter parameter(String name);
304

    
305
    public Parameter parameter();
306

    
307
    public Constant constant(Object value);
308
    
309
    public Constant geometry(Geometry geom, IProjection projection);
310

    
311
    public Constant geometry(Geometry geom);
312

    
313
    public Constant envelope(Envelope envelope, IProjection projection);
314

    
315
    public Constant envelope(Envelope envelope);
316

    
317
    public Constant srs(IProjection projection);
318

    
319
    public Custom custom(Object value);
320
    
321
    public Function as_geometry(Value value);
322

    
323
    public Method method(Value instance, String name, Value... values);
324

    
325
    public Function function(String name, Value... values);
326
    
327
    public BinaryOperator binaryOperator(String name, Value leftOperand, Value rightOperand);
328

    
329
    public Value toValue(String expression);
330
    
331
    public String toString(Formatter<Value> formatter);
332
    
333
    public Function not(Value value);
334

    
335
    public Function not_is_null(Value value);
336
    
337
    public Function is_null(Value value);
338

    
339
    public Function ST_SRID(Value geom);
340
    
341
    public Function ST_AsText(Value geom);
342

    
343
    public Function ST_AsBinary(Value geom);
344

    
345
    public Function ST_AsEWKB(Value geom);
346

    
347
    public Function ST_Envelope(Value geom);
348

    
349
    public Function ST_GeomFromText(Value geom, Value crs);
350
    
351
    public Function ST_GeomFromWKB(Value geom, Value crs);
352
            
353
    public Function ST_GeomFromEWKB(Value geom, Value crs);
354

    
355
    public Function ST_Simplify(Value geom, Value tolerance);
356

    
357
    public Function ST_Equals(Value geom1, Value geom2);
358

    
359
    public Function ST_Intersects(Value geom1, Value geom2);
360

    
361
    public Function ST_Contains(Value geom1, Value geom2);
362

    
363
    public Function ST_Disjoint(Value geom1, Value geom2);
364

    
365
    public Function ST_Crosses(Value geom1, Value geom2);
366

    
367
    public Function ST_IsClosed(Value geom1);
368

    
369
    public Function ST_Overlaps(Value geom1, Value geom2);
370

    
371
    public Function ST_Touches(Value geom1, Value geom2);
372

    
373
    public Function ST_Within(Value geom1, Value geom2);
374

    
375
    public Function ST_UnionAggregate(Value geom);
376
    
377
    public Function ST_ExtentAggregate(Value geom);
378
    
379
    public BinaryOperator and(Value op1, Value op2);
380

    
381
    public BinaryOperator or(Value op1, Value op2);
382

    
383
    public BinaryOperator eq(Value op1, Value op2);
384
    
385
    public BinaryOperator ne(Value op1, Value op2);
386
    
387
    public BinaryOperator gt(Value op1, Value op2);
388
    
389
    public BinaryOperator ge(Value op1, Value op2);
390

    
391
    public BinaryOperator lt(Value op1, Value op2);
392
    
393
    public BinaryOperator le(Value op1, Value op2);
394

    
395
    public BinaryOperator like(Value op1, Value op2);
396

    
397
    public BinaryOperator ilike(Value op1, Value op2);
398

    
399
    public BinaryOperator add(Value op1, Value op2);
400

    
401
    public BinaryOperator subst(Value op1, Value op2);
402

    
403
    public BinaryOperator mult(Value op1, Value op2);
404

    
405
    public BinaryOperator div(Value op1, Value op2);
406

    
407
    public BinaryOperator concat(Value op1, Value op2);
408

    
409
    public ExpressionBuilder set(Value value);
410
    
411
    public ExpressionBuilder and(Value value);
412

    
413
    public ExpressionBuilder or(Value value);
414

    
415
    public Function iif(Value condition, Value iftrue, Value iffalse);
416
    
417
    public Function ifnull(Value value, Value iftrue, Value iffalse);
418

    
419
    public ExpressionBuilder createExpressionBuilder();
420
   
421
    public Function left(Value str, Value size);
422
    
423
    public Function right(Value str, Value len);
424
    
425
    public Function locate(Value search, Value str, Value start) ;
426
    
427
    public Function position(Value search, Value str);
428
    
429
    public Function lpad(Value str, Value len, Value padstr) ;
430
    
431
    public Function rpad(Value str, Value len, Value padstr);
432
    
433
    public Function ltrim(Value str);
434
    
435
    public Function rtrim(Value str);
436
    
437
    public Function trim(Value str);
438
    
439
    public Function repeat(Value str, Value size);
440
    
441
    public Function replace(Value str, Value search, Value replstr);
442
    
443
    public Function ascii(Value str);
444
    
445
    public Function lenght(Value str);
446

    
447
    public Function instr(Value str, Value search, Value start);
448
    
449
    public Function lower(Value str);
450
    
451
    public Function upper(Value str);
452
    
453
    public Function space(Value size);
454
    
455
    public Function substring(Value str, Value start, Value len);
456
    
457
    public Function acos(Value num);
458
    
459
    public Function asin(Value num);
460
    
461
    public Function atan(Value num);
462
    
463
    public Function cos(Value num);
464
    
465
    public Function cosh(Value num);
466
    
467
    public Function cot(Value num);
468
    
469
    public Function bitand(Value num1, Value num2);
470
    
471
    public Function bitor(Value num1, Value num2);
472
    
473
    public Function bitxor(Value num1, Value num2);
474
    
475
    public Function ceil(Value num);
476
    
477
    public Function degrees(Value num);
478
    
479
    public Function exp(Value num);
480
    
481
    public Function floor(Value num);
482
    
483
    public Function log(Value num);
484
    
485
    public Function log10(Value num);
486
    
487
    public Function pi(Value num);
488
    
489
    public Function power(Value num);
490
    
491
    public Function radians(Value num);
492
    
493
    public Function rand(Value num);
494
    
495
    public Function round(Value num);
496
    
497
    public Function sqrt(Value num);
498
    
499
    public Function sign(Value num);
500
    
501
    public Function sin(Value num);
502
    
503
    public Function sinh(Value num);
504
    
505
    public Function tan(Value num);
506
    
507
    public Function tanh(Value num);
508
    
509
    public Function zero();
510
    
511
    public Function chr(Value num);
512

    
513
    public Function decode(Value value, Value format);
514

    
515
    public Function cast(Value object, Value typeName);
516

    
517
    public Function toDouble(Value object);
518

    
519
    public Function toFloat(Value object);
520

    
521
    public Function toLong(Value object);
522

    
523
    public Function toInteger(Value object);
524

    
525
    public Function toStr(Value object);
526

    
527
}