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

History | View | Annotate | Download (16.9 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 enum GeometrySupportType {
115
        WKT,
116
        WKB,
117
        EWKB,
118
        NATIVE
119
    }
120

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

    
131
     public interface Visitor {
132
        public void visit(Visitable value);
133
    }
134

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

    
143
    public interface Group extends Value {
144
        public Value value();
145
    }
146

    
147
    public interface Constant extends Value {
148
        public Object value();
149
    }
150

    
151
    public interface Custom extends Value {
152
        public Object value();
153
        public Custom add(Variable variable);
154
        public Custom add(Parameter parameter);
155
    }
156

    
157
    public interface Variable extends Value, Comparable<Variable> {
158
        public String name();
159
    }
160

    
161
    public interface Parameter extends Value {
162
        public Parameter as_constant();
163
        public Parameter as_variable();        
164
        public Parameter as_geometry_variable();
165
        public Parameter srs(Value srs);
166
        public Parameter srs(IProjection srs);
167
        public Parameter value(Object value);
168
        public Parameter name(String value);
169
        public String name();
170
        public Object value();
171
        public ParameterType type();
172
        public Value srs();
173
        public boolean is_constant();
174
        public boolean is_variable();
175
        public boolean is_geometry_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
    }
183

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

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

    
199
    public abstract class AbstractValue implements Value {
200

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

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

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

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

    
229
    }
230

    
231
    public class ClassVisitorFilter implements VisitorFilter {
232

    
233
        private final Class classFilter;
234

    
235
        public ClassVisitorFilter(Class classFilter) {
236
            this.classFilter = classFilter;
237
        }
238

    
239
        @Override
240
        public boolean accept(Visitable visitable) {
241
            return classFilter.isInstance(visitable);
242
        }
243

    
244
    }
245

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

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

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

    
276
    public String identifier(String name);
277

    
278
    public String bytearray_hex(byte[] data);
279

    
280
    public String bytearray_0x(byte[] data);
281

    
282
    public String bytearray_x(byte[] data);
283

    
284
    public String string(String s);
285
   
286
    public Object srs_id(IProjection projection);
287
    
288
    public Value value();
289
    
290
    public ExpressionBuilder value(Value value);
291

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

    
300
    public Parameter parameter(String name);
301

    
302
    public Parameter parameter();
303

    
304
    public Constant constant(Object value);
305
    
306
    public Constant geometry(Geometry geom, IProjection projection);
307

    
308
    public Constant geometry(Geometry geom);
309

    
310
    public Constant envelope(Envelope envelope, IProjection projection);
311

    
312
    public Constant envelope(Envelope envelope);
313

    
314
    public Constant srs(IProjection projection);
315

    
316
    public Custom custom(Object value);
317
    
318
    public Function as_geometry(Value value);
319

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

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

    
326
    public Value toValue(String expression);
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
    public Function ST_SRID(Value geom);
337
    
338
    public Function ST_AsText(Value geom);
339

    
340
    public Function ST_AsBinary(Value geom);
341

    
342
    public Function ST_AsEWKB(Value geom);
343

    
344
    public Function ST_Envelope(Value geom);
345

    
346
    public Function ST_GeomFromText(Value geom, Value crs);
347
    
348
    public Function ST_GeomFromWKB(Value geom, Value crs);
349
            
350
    public Function ST_GeomFromEWKB(Value geom, Value crs);
351

    
352
    public Function ST_Simplify(Value geom, Value tolerance);
353

    
354
    public Function ST_Equals(Value geom1, Value geom2);
355

    
356
    public Function ST_Intersects(Value geom1, Value geom2);
357

    
358
    public Function ST_Contains(Value geom1, Value geom2);
359

    
360
    public Function ST_Disjoint(Value geom1, Value geom2);
361

    
362
    public Function ST_Crosses(Value geom1, Value geom2);
363

    
364
    public Function ST_IsClosed(Value geom1);
365

    
366
    public Function ST_Overlaps(Value geom1, Value geom2);
367

    
368
    public Function ST_Touches(Value geom1, Value geom2);
369

    
370
    public Function ST_Within(Value geom1, Value geom2);
371

    
372
    public Function ST_UnionAggregate(Value geom);
373
    
374
    public Function ST_ExtentAggregate(Value geom);
375
    
376
    public BinaryOperator and(Value op1, Value op2);
377

    
378
    public BinaryOperator or(Value op1, Value op2);
379

    
380
    public BinaryOperator eq(Value op1, Value op2);
381
    
382
    public BinaryOperator ne(Value op1, Value op2);
383
    
384
    public BinaryOperator gt(Value op1, Value op2);
385
    
386
    public BinaryOperator ge(Value op1, Value op2);
387

    
388
    public BinaryOperator lt(Value op1, Value op2);
389
    
390
    public BinaryOperator le(Value op1, Value op2);
391

    
392
    public BinaryOperator like(Value op1, Value op2);
393

    
394
    public BinaryOperator ilike(Value op1, Value op2);
395

    
396
    public BinaryOperator add(Value op1, Value op2);
397

    
398
    public BinaryOperator subst(Value op1, Value op2);
399

    
400
    public BinaryOperator mult(Value op1, Value op2);
401

    
402
    public BinaryOperator div(Value op1, Value op2);
403

    
404
    public BinaryOperator concat(Value op1, Value op2);
405

    
406
    public ExpressionBuilder set(Value value);
407
    
408
    public ExpressionBuilder and(Value value);
409

    
410
    public ExpressionBuilder or(Value value);
411

    
412
    public Function iif(Value condition, Value iftrue, Value iffalse);
413
    
414
    public Function ifnull(Value value, Value iftrue, Value iffalse);
415

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

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

    
510
    public Function decode(Value value, Value format);
511

    
512
    public Function cast(Value object, Value typeName);
513

    
514
    public Function toDouble(Value object);
515

    
516
    public Function toFloat(Value object);
517

    
518
    public Function toLong(Value object);
519

    
520
    public Function toInteger(Value object);
521

    
522
    public Function toStr(Value object);
523

    
524
}