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

History | View | Annotate | Download (19.8 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_NEGATE = "NEGATE";
15
    public static final String OPERATOR_IS = "IS";
16
    public static final String OPERATOR_AND = "AND";
17
    public static final String OPERATOR_OR = "OR";
18
    public static final String OPERATOR_EQ = "=";
19
    public static final String OPERATOR_NE = "<>";
20
    public static final String OPERATOR_GT = ">";
21
    public static final String OPERATOR_GE = ">=";
22
    public static final String OPERATOR_LT = "<";
23
    public static final String OPERATOR_LE = "<=";
24
    public static final String OPERATOR_LIKE = "LIKE";
25
    public static final String OPERATOR_ILIKE = "ILIKE";
26
    public static final String OPERATOR_ADD = "+";
27
    public static final String OPERATOR_SUBST = "-";
28
    public static final String OPERATOR_MULT = "*";
29
    public static final String OPERATOR_DIV = "/";
30
    public static final String OPERATOR_MOD = "%";
31
    public static final String OPERATOR_CONCAT = "||";
32
    public static final String OPERATOR_REGEXP = "~";
33
    public static final String OPERATOR_AND2 = "&&";
34
    
35
    public static final String FUNCTION_ST_SRID = "ST_SRID";
36
    public static final String FUNCTION_ST_ASTEXT = "ST_AsText";
37
    public static final String FUNCTION_ST_ASBINARY = "ST_AsBinary";
38
    public static final String FUNCTION_ST_ASEWKB = "ST_AsEWKB";
39
    public static final String FUNCTION_ST_ENVELOPE = "ST_Envelope";
40
    public static final String FUNCTION_ST_GEOMFROMTEXT = "ST_GeomFromText";
41
    public static final String FUNCTION_ST_GEOMFROMWKB = "ST_GeomFromWKB";
42
    public static final String FUNCTION_ST_GEOMFROMEWKB = "ST_GeomFromEWKB";
43
    public static final String FUNCTION_ST_SIMPLIFY = "ST_Simplify";
44
    public static final String FUNCTION_ST_EQUALS = "ST_Equals";
45
    public static final String FUNCTION_ST_INTERSECTS = "ST_Intersects";
46
    public static final String FUNCTION_ST_CONTAINS = "ST_Contains";
47
    public static final String FUNCTION_ST_DISJOINT = "ST_Disjoint";
48
    public static final String FUNCTION_ST_CROSSES = "ST_Crosses";
49
    public static final String FUNCTION_ST_ISCLOSED = "ST_IsClosed";
50
    public static final String FUNCTION_ST_OVERLAPS = "ST_Overlaps";
51
    public static final String FUNCTION_ST_TOUCHES = "ST_Touches";
52
    public static final String FUNCTION_ST_WITHIN = "ST_Within";
53
    public static final String FUNCTION_ST_SETSRID = "ST_SetSRID";
54
    public static final String FUNCTION_ST_POINT = "ST_Point";
55
    public static final String FUNCTION_ST_MAKEPOINT = "ST_MakePoint";
56
    public static final String FUNCTION_ST_UNIONAGGREGATE = "ST_UnionAggregate";
57
    public static final String FUNCTION_ST_EXTENTAGGREGATE = "ST_ExtentAggregate";
58
    public static final String FUNCTION_ST_FORCE2D = "ST_Force2D";
59

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

    
116
    public static final String FUNCTION_CAST = "CAST";
117
    public static final String FUNCTION_DECODE = "DECODE";
118
    public static final String FUNCTION_TODOUBLE = "TODOUBLE";
119
    public static final String FUNCTION_TOFLOAT = "TOFLOAT";
120
    public static final String FUNCTION_TOINTEGER = "TOINTEGER";
121
    public static final String FUNCTION_TOLONG = "TOLONG";
122
    public static final String FUNCTION_TOSTR = "TOSTR";
123
    
124
    public static final String FUNCTION_INCR = "INCR";
125
    public static final String FUNCTION_DECR = "DECR";
126
    
127
    public static final String FUNCTION_RANGE = "RANGE";
128
    public static final String FUNCTION_EVAL = "EVAL";
129
    public static final String FUNCTION_LIST = "LIST";
130
    public static final String FUNCTION_TUPLE = "TUPLE";
131
    
132
    public enum GeometrySupportType {
133
        WKT,
134
        WKB,
135
        EWKB,
136
        NATIVE
137
    }
138

    
139
    public enum ParameterType {
140
        Variable,
141
        Constant,
142
        Geometry
143
    }
144
    
145
    public interface VisitorFilter {
146
        boolean accept(Visitable visitable);
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 {
158
        public String toString(Formatter<Value> formatter);
159
        public void replace(Value target, Value replacement);
160
    }
161

    
162
    public interface Group extends Value {
163
        public Value value();
164
    }
165

    
166
    public interface Constant extends Value {
167
        public Object value();
168
    }
169

    
170
    public interface Custom extends Value {
171
        public Object value();
172
        public Custom add(Variable variable);
173
        public Custom add(Parameter parameter);
174
    }
175

    
176
    public interface Variable extends Value, Comparable<Variable> {
177
        public String name();
178
    }
179

    
180
    public interface Parameter extends Value {
181
        public Parameter as_constant();
182
        public Parameter as_variable();        
183
        public Parameter as_geometry_variable();
184
        public Parameter srs(Value srs);
185
        public Parameter srs(IProjection srs);
186
        public Parameter value(Object value);
187
        public Parameter name(String value);
188
        public String name();
189
        public Object value();
190
        public ParameterType type();
191
        public Value srs();
192
        public boolean is_constant();
193
        public boolean is_variable();
194
        public boolean is_geometry_variable();        
195
    }
196
    
197
    public interface Function extends Value {
198
        public String name();
199
        public List<Value> parameters();
200
        public Function parameter(Value parameter);
201
    }
202

    
203
    public interface Method extends Value {
204
        public String name();
205
        public Value instance();
206
        public List<Value> parameters();
207
        public Function parameter(Value parameter);
208
    }
209

    
210
    public interface BinaryOperator extends Value {
211
        public String name();
212
        public Value left();
213
        public Value right();
214
        public BinaryOperator left(Value operand);
215
        public BinaryOperator right(Value operand);
216
    }
217

    
218
    public abstract class AbstractValue implements Value {
219

    
220
        private PropertiesSupport properties;
221
        
222
        protected AbstractValue() {
223
            this.properties = new PropertiesSupportHelper();
224
        }
225
        
226
        @Override
227
        public void accept(Visitor visitor, VisitorFilter filter) {
228
            if (filter == null || filter.accept(this)) {
229
                visitor.visit(this);
230
            }
231
        }
232

    
233
        @Override
234
        public Map<String, Object> getProperties() {
235
            return this.properties.getProperties();
236
        }
237

    
238
        @Override
239
        public Object getProperty(String name) {
240
            return this.properties.getProperty(name);
241
        }
242

    
243
        @Override
244
        public void setProperty(String name, Object value) {
245
            this.properties.setProperty(name, value);
246
        }
247

    
248
        @Override
249
        public void replace(Value target, Value replacement) {
250
            // Do nothing
251
        }
252
    }
253

    
254
    public class ClassVisitorFilter implements VisitorFilter {
255

    
256
        private final Class classFilter;
257

    
258
        public ClassVisitorFilter(Class classFilter) {
259
            this.classFilter = classFilter;
260
        }
261

    
262
        @Override
263
        public boolean accept(Visitable visitable) {
264
            if( classFilter==null ) {
265
                return true;
266
            }
267
            return classFilter.isInstance(visitable);
268
        }
269

    
270
    }
271

    
272
    public static final Formatter<Value> EMPTY_FORMATTER = new Formatter<Value>() {
273
        @Override
274
        public boolean canApply(Value value) {
275
            return false;
276
        }
277

    
278
        @Override
279
        public String format(Value value) {
280
            return "";
281
        }
282
    };
283
            
284
    public String quote_for_identifiers();
285
    
286
    public String quote_for_strings();
287
    
288
    public void accept(Visitor visitor, VisitorFilter filter);
289

    
290
    public List<Variable> variables();
291
    
292
    public List<String> variables_names();
293
    
294
    public List<Parameter> parameters();
295
    
296
    public List<String> parameters_names();
297
    
298
    public GeometrySupportType geometry_support_type();
299
    
300
    public ExpressionBuilder geometry_support_type(GeometrySupportType geometrySupportType);
301

    
302
    public String identifier(String name);
303

    
304
    public String bytearray_hex(byte[] data);
305

    
306
    public String bytearray_0x(byte[] data);
307

    
308
    public String bytearray_x(byte[] data);
309

    
310
    public String string(String s);
311
   
312
    public Object srs_id(IProjection projection);
313
    
314
    public Value value();
315
    
316
    public ExpressionBuilder value(Value value);
317

    
318
    public Group group(Value group);
319
    
320
    public Constant bytearray(byte[] data);
321
    
322
    public Variable variable(String name);
323
    
324
    public Variable column(String name); // Alias for variable(name)
325

    
326
    public Parameter parameter(String name);
327

    
328
    public Parameter parameter();
329

    
330
    public Constant constant(Object value);
331
    
332
    public Constant geometry(Geometry geom, IProjection projection);
333

    
334
    public Constant geometry(Geometry geom);
335

    
336
    public Constant envelope(Envelope envelope, IProjection projection);
337

    
338
    public Constant envelope(Envelope envelope);
339

    
340
    public Constant srs(IProjection projection);
341

    
342
    public Custom custom(Object value);
343
    
344
    public Function as_geometry(Value value);
345

    
346
    public Method method(Value instance, String name, Value... values);
347

    
348
    public Function function(String name, Value... values);
349
    
350
    public BinaryOperator binaryOperator(String name, Value leftOperand, Value rightOperand);
351

    
352
    public Value toValue(String expression);
353
    
354
    public String toString(Formatter<Value> formatter);
355
    
356
    public Function not(Value value);
357

    
358
    public Function not_is_null(Value value);
359
    
360
    public Function is_null(Value value);
361

    
362
    
363
    public Function ST_Area(Value geom);
364

    
365
    public Function ST_AsBinary(Value geom);
366

    
367
    public Function ST_AsEWKB(Value geom);
368

    
369
    public Function ST_AsText(Value geom);
370

    
371
    public Function ST_Buffer(Value geom);
372

    
373
    public Function ST_Buffer(Value geom, Value dist);
374

    
375
    public Function ST_Centroid(Value geom);
376

    
377
    public Function ST_Contains(Value geom1, Value geom2);
378

    
379
    public Function ST_CoveredBy(Value geom1, Value geom2);
380

    
381
    public Function ST_Covers(Value geom1, Value geom2);
382

    
383
    public Function ST_Crosses(Value geom1, Value geom2);
384

    
385
    public Function ST_Diference(Value geom1, Value geom2);
386

    
387
    public Function ST_Dimension(Value geom1);
388

    
389
    public Function ST_Disjoint(Value geom1, Value geom2);
390

    
391
    public Function ST_Distance(Value geom1, Value geom2);
392

    
393
    public Function ST_EndPoint(Value geom1);
394

    
395
    public Function ST_Envelope(Value geom);
396

    
397
    public Function ST_Equals(Value geom1, Value geom2);
398

    
399
    public Function ST_GeomFromText(Value geom, Value crs);
400
    
401
    public Function ST_GeomFromWKB(Value geom, Value crs);
402
            
403
    public Function ST_GeomFromEWKB(Value geom, Value crs);
404

    
405
    public Function ST_Intersection(Value geom1, Value geom2);
406

    
407
    public Function ST_Intersects(Value geom1, Value geom2);
408

    
409
    public Function ST_IsClosed(Value geom);
410

    
411
    public Function ST_IsSimple(Value geom);
412

    
413
    public Function ST_IsValid(Value geom);
414

    
415
    public Function ST_Force2D(Value geom);
416

    
417
    public Function ST_NumGeometries(Value geom);
418
    
419
    public Function ST_NumPoints(Value geom);
420

    
421
    public Function ST_Overlaps(Value geom1, Value geom2);
422

    
423
    public Function ST_Perimeter(Value geom);
424

    
425
    public Function ST_Point(Value x, Value y);
426

    
427
    public Function ST_MakePoint(Value x, Value y);
428

    
429
    public Function ST_MakePoint(Value x, Value y, Value z);
430

    
431
    public Function ST_MakePoint(Value x, Value y, Value z, Value m);
432

    
433
    public Function ST_PointN(Value geom, Value n);
434

    
435
    public Function ST_SRID(Value geom);
436

    
437
    public Function ST_SetSRID(Value geom, Value srid);
438
    
439
    public Function ST_StartPoint(Value geom);
440

    
441
    public Function ST_Simplify(Value geom, Value tolerance);
442

    
443
    public Function ST_Touches(Value geom1, Value geom2);
444

    
445
    public Function ST_Union(Value geom1, Value geom2);
446

    
447
    public Function ST_Within(Value geom1, Value geom2);
448

    
449
    public Function ST_X(Value geom);
450

    
451
    public Function ST_Y(Value geom);
452

    
453
    public Function ST_Z(Value geom);
454

    
455
    
456
    public Function ST_UnionAggregate(Value geom);
457
    
458
    public Function ST_ExtentAggregate(Value geom);
459

    
460

    
461
    
462
    public BinaryOperator and(Value op1, Value op2);
463

    
464
    public BinaryOperator and(Expression op1, Expression op2);
465

    
466
    public BinaryOperator and(Expression op1, Value op2);
467

    
468
    public BinaryOperator or(Value op1, Value op2);
469

    
470
    public BinaryOperator eq(Value op1, Value op2);
471
    
472
    public BinaryOperator ne(Value op1, Value op2);
473
    
474
    public BinaryOperator gt(Value op1, Value op2);
475
    
476
    public BinaryOperator ge(Value op1, Value op2);
477

    
478
    public BinaryOperator lt(Value op1, Value op2);
479
    
480
    public BinaryOperator le(Value op1, Value op2);
481

    
482
    public BinaryOperator like(Value op1, Value op2);
483

    
484
    public BinaryOperator ilike(Value op1, Value op2);
485

    
486
    public BinaryOperator add(Value op1, Value op2);
487

    
488
    public BinaryOperator subst(Value op1, Value op2);
489

    
490
    public BinaryOperator mult(Value op1, Value op2);
491

    
492
    public BinaryOperator div(Value op1, Value op2);
493

    
494
    public BinaryOperator concat(Value op1, Value op2);
495

    
496
    public ExpressionBuilder set(Value value);
497
    
498
    public ExpressionBuilder and(Value value);
499

    
500
    public ExpressionBuilder or(Value value);
501

    
502
    public Function iif(Value condition, Value iftrue, Value iffalse);
503
    
504
    public Function ifnull(Value value, Value iftrue, Value iffalse);
505

    
506
    public ExpressionBuilder createExpressionBuilder();
507
   
508
    public Function left(Value str, Value size);
509
    
510
    public Function right(Value str, Value len);
511
    
512
    public Function locate(Value search, Value str, Value start) ;
513
    
514
    public Function position(Value search, Value str);
515
    
516
    public Function lpad(Value str, Value len, Value padstr) ;
517
    
518
    public Function rpad(Value str, Value len, Value padstr);
519
    
520
    public Function ltrim(Value str);
521
    
522
    public Function rtrim(Value str);
523
    
524
    public Function trim(Value str);
525
    
526
    public Function repeat(Value str, Value size);
527
    
528
    public Function replace(Value str, Value search, Value replstr);
529
    
530
    public Function ascii(Value str);
531
    
532
    public Function lenght(Value str);
533

    
534
    public Function instr(Value str, Value search, Value start);
535
    
536
    public Function lower(Value str);
537
    
538
    public Function upper(Value str);
539
    
540
    public Function space(Value size);
541
    
542
    public Function substring(Value str, Value start, Value len);
543
    
544
    public Function acos(Value num);
545
    
546
    public Function asin(Value num);
547
    
548
    public Function atan(Value num);
549
    
550
    public Function cos(Value num);
551
    
552
    public Function cosh(Value num);
553
    
554
    public Function cot(Value num);
555
    
556
    public Function bitand(Value num1, Value num2);
557
    
558
    public Function bitor(Value num1, Value num2);
559
    
560
    public Function bitxor(Value num1, Value num2);
561
    
562
    public Function ceil(Value num);
563
    
564
    public Function degrees(Value num);
565
    
566
    public Function exp(Value num);
567
    
568
    public Function floor(Value num);
569
    
570
    public Function log(Value num);
571
    
572
    public Function log10(Value num);
573
    
574
    public Function pi(Value num);
575
    
576
    public Function power(Value num);
577
    
578
    public Function radians(Value num);
579
    
580
    public Function rand(Value num);
581
    
582
    public Function round(Value num);
583
    
584
    public Function sqrt(Value num);
585
    
586
    public Function sign(Value num);
587
    
588
    public Function sin(Value num);
589
    
590
    public Function sinh(Value num);
591
    
592
    public Function tan(Value num);
593
    
594
    public Function tanh(Value num);
595
    
596
    public Function zero();
597
    
598
    public Function chr(Value num);
599

    
600
    public Function decode(Value value, Value format);
601

    
602
    public Function cast(Value object, Value typeName);
603

    
604
    public Function toDouble(Value object);
605

    
606
    public Function toFloat(Value object);
607

    
608
    public Function toLong(Value object);
609

    
610
    public Function toInteger(Value object);
611

    
612
    public Function toStr(Value object);
613

    
614
    public Function list();
615
    
616
    public Function tuple();
617
    
618
    public Function tuple(Constant... values);
619
    
620
    public boolean isEmpty();
621
}