Revision 44009

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestOptimizer.java
1
package org.gvsig.expresionevaluator.impl;
2

  
3
import static junit.framework.Assert.assertEquals;
4
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
5
import org.gvsig.expressionevaluator.impl.DefaultCompiler;
6
import junit.framework.TestCase;
7
import org.cresques.cts.IProjection;
8
import org.gvsig.expressionevaluator.LexicalAnalyzer;
9
import org.gvsig.expressionevaluator.Compiler;
10
import org.gvsig.expressionevaluator.Code;
11
import org.gvsig.expressionevaluator.ExpressionBuilder;
12
import org.gvsig.expressionevaluator.Interpreter;
13
import org.gvsig.expressionevaluator.MutableSymbolTable;
14
import org.gvsig.expressionevaluator.Optimizer;
15
import org.gvsig.expressionevaluator.SymbolTable;
16
import org.gvsig.expressionevaluator.impl.DefaultExpressionBuilder;
17
import org.gvsig.expressionevaluator.impl.DefaultInterpreter;
18
import org.gvsig.expressionevaluator.impl.DefaultOptimizer;
19
import org.gvsig.expressionevaluator.impl.DefaultSymbolTable;
20
import org.gvsig.fmap.crs.CRSFactory;
21
import org.gvsig.fmap.geom.Geometry;
22
import org.gvsig.fmap.geom.GeometryLocator;
23
import org.gvsig.fmap.geom.GeometryManager;
24
import org.gvsig.fmap.geom.exception.CreateGeometryException;
25
import org.gvsig.fmap.geom.primitive.Point;
26
import org.gvsig.fmap.geom.primitive.Polygon;
27
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
28

  
29
public class TestOptimizer extends TestCase {
30

  
31
    public TestOptimizer(String testName) {
32
        super(testName);
33
    }
34

  
35
    @Override
36
    protected void setUp() throws Exception {
37
        super.setUp();
38
        new DefaultLibrariesInitializer().fullInitialize();
39
    }
40

  
41
    @Override
42
    protected void tearDown() throws Exception {
43
        super.tearDown();
44
    }
45

  
46
    // TODO add test methods here. The name must begin with 'test'. For example:
47
    // public void testHello() {}
48
    protected LexicalAnalyzer createLexicalAnalyzer() {
49
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
50
        return lexer;
51
    }
52

  
53
    protected Compiler createCompiler() {
54
        Compiler compiler = new DefaultCompiler();
55
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
56
        return compiler;
57
    }
58

  
59
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
60
        Interpreter interpreter = new DefaultInterpreter();
61
        interpreter.setSymbolTable(symbolTable);
62
        return interpreter;
63
    }
64

  
65
    protected Optimizer createOptimizer(SymbolTable symbolTable) {
66
        Optimizer optimizer = new DefaultOptimizer(symbolTable);
67
        return optimizer;
68
    }
69

  
70
    protected MutableSymbolTable createSymbolTable() {
71
        DefaultSymbolTable symbolTable = new DefaultSymbolTable();
72
        symbolTable.setVar("precio", 200);
73
        symbolTable.setVar("1990", 0.168873933773767);
74
        return symbolTable;
75
    }
76

  
77
    private String createExpr1() {
78
        ExpressionBuilder builder = new DefaultExpressionBuilder();
79

  
80
        ExpressionBuilder.Value expr1 = builder.gt(
81
                builder.column("campo1"),
82
                builder.constant(10)
83
        );
84
        System.out.println(expr1.toString());
85
        assertEquals(
86
                "( (\"campo1\") > (10) )",
87
                expr1.toString()
88
        );
89
        return expr1.toString();
90
    }
91

  
92
    private Polygon createPolygon() throws CreateGeometryException {
93
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
94
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
95

  
96
        Polygon polygon = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
97
        polygon.addVertex(0, 0);
98
        polygon.addVertex(0, 100);
99
        polygon.addVertex(100, 100);
100
        polygon.addVertex(100, 0);
101
        polygon.addVertex(0, 0);
102

  
103
        polygon.setProjection(proj);
104
        return polygon;
105
    }
106

  
107
    private Geometry createPoint(double x, double y) throws CreateGeometryException {
108
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
109
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
110
        Point point = geometryManager.createPoint(x, y, Geometry.SUBTYPES.GEOM2D);
111
        point.setProjection(proj);
112
        return point;
113
    }
114

  
115
    public void testIdentifier1() {
116
        String source = "precio";
117

  
118
        Compiler compiler = createCompiler();
119
        Code code = compiler.compileExpression(source);
120
        assertEquals("\"precio\"", code.toString());
121

  
122
        SymbolTable symbolTable = createSymbolTable();
123
        Optimizer optimizer = createOptimizer(symbolTable);
124
        Code code2 = optimizer.optimize(code);
125
        assertEquals("\"precio\"", code2.toString());
126
    }
127

  
128
    public void testIdentifier2() {
129
        String source = "[precio]";
130

  
131
        Compiler compiler = createCompiler();
132
        Code code = compiler.compileExpression(source);
133
        assertEquals("\"precio\"", code.toString());
134

  
135
        SymbolTable symbolTable = createSymbolTable();
136
        Optimizer optimizer = createOptimizer(symbolTable);
137
        Code code2 = optimizer.optimize(code);
138
        assertEquals("\"precio\"", code2.toString());
139
    }
140

  
141
    public void testIdentifier3() {
142
        String source = "\"precio\"";
143

  
144
        Compiler compiler = createCompiler();
145
        Code code = compiler.compileExpression(source);
146
        assertEquals("\"precio\"", code.toString());
147

  
148
        SymbolTable symbolTable = createSymbolTable();
149
        Optimizer optimizer = createOptimizer(symbolTable);
150
        Code code2 = optimizer.optimize(code);
151
        assertEquals("\"precio\"", code2.toString());
152
    }
153

  
154
    public void testTrue() {
155
        String source = "true";
156

  
157
        Compiler compiler = createCompiler();
158
        Code code = compiler.compileExpression(source);
159
        assertEquals("true", code.toString());
160

  
161
        SymbolTable symbolTable = createSymbolTable();
162
        Optimizer optimizer = createOptimizer(symbolTable);
163
        Code code2 = optimizer.optimize(code);
164
        assertEquals("true", code2.toString());
165
    }
166

  
167
    public void testFalse() {
168
        String source = "false";
169

  
170
        Compiler compiler = createCompiler();
171
        Code code = compiler.compileExpression(source);
172
        assertEquals("false", code.toString());
173

  
174
        SymbolTable symbolTable = createSymbolTable();
175
        Optimizer optimizer = createOptimizer(symbolTable);
176
        Code code2 = optimizer.optimize(code);
177
        assertEquals("false", code2.toString());
178
    }
179

  
180
    public void testNull() {
181
        String source = "null";
182

  
183
        Compiler compiler = createCompiler();
184
        Code code = compiler.compileExpression(source);
185
        assertEquals("null", code.toString());
186

  
187
        SymbolTable symbolTable = createSymbolTable();
188
        Optimizer optimizer = createOptimizer(symbolTable);
189
        Code code2 = optimizer.optimize(code);
190
        assertEquals("null", code2.toString());
191
    }
192

  
193
    public void testNotTrue() {
194
        String source = "not true";
195

  
196
        Compiler compiler = createCompiler();
197
        Code code = compiler.compileExpression(source);
198
        assertEquals("not(true)", code.toString());
199

  
200
        SymbolTable symbolTable = createSymbolTable();
201
        Optimizer optimizer = createOptimizer(symbolTable);
202
        Code code2 = optimizer.optimize(code);
203
        assertEquals("false", code2.toString());
204
    }
205

  
206
    public void testInteger() {
207
        String source = "23";
208

  
209
        Compiler compiler = createCompiler();
210
        Code code = compiler.compileExpression(source);
211
        assertEquals("23", code.toString());
212

  
213
        SymbolTable symbolTable = createSymbolTable();
214
        Optimizer optimizer = createOptimizer(symbolTable);
215
        Code code2 = optimizer.optimize(code);
216
        assertEquals("23", code2.toString());
217
    }
218

  
219
    public void operator(String operatorName) {
220
        String source = "precio " + operatorName + " 23";
221

  
222
        Compiler compiler = createCompiler();
223
        Code code = compiler.compileExpression(source);
224
        assertEquals(operatorName + "(\"precio\", 23)", code.toString());
225

  
226
        SymbolTable symbolTable = createSymbolTable();
227
        Optimizer optimizer = createOptimizer(symbolTable);
228
        Code code2 = optimizer.optimize(code);
229
        assertEquals(operatorName + "(\"precio\", 23)", code2.toString());
230
    }
231

  
232
    public void testOperators() {
233

  
234
        operator("=");
235
        operator("<>");
236
        operator(">");
237
        operator(">=");
238
        operator("<");
239
        operator("<=");
240
        operator("like");
241
        operator("ilike");
242
        operator("+");
243
        operator("-");
244
        operator("*");
245
//        operator("^");
246
        operator("or");
247
        operator("and");
248
        operator("%");
249
        operator("is");
250
    }
251

  
252
    public void testAddMul() {
253
        String source = "precio + 10 * 2 + 20 + 30";
254

  
255
        Compiler compiler = createCompiler();
256

  
257
        Code code = compiler.compileExpression(source);
258
        assertEquals("+(+(+(\"precio\", *(10, 2)), 20), 30)", code.toString());
259

  
260
        SymbolTable symbolTable = createSymbolTable();
261
        Optimizer optimizer = createOptimizer(symbolTable);
262
        Code code2 = optimizer.optimize(code);
263
        assertEquals("+(+(+(\"precio\", 20), 20), 30)", code2.toString());
264
    }
265

  
266
    public void testAddMulPar() {
267
        String source = "(precio + 10) * 2 + 20 + 30";
268

  
269
        Compiler compiler = createCompiler();
270

  
271
        Code code = compiler.compileExpression(source);
272
        assertEquals("+(+(*(+(\"precio\", 10), 2), 20), 30)", code.toString());
273

  
274
        SymbolTable symbolTable = createSymbolTable();
275
        Optimizer optimizer = createOptimizer(symbolTable);
276
        Code code2 = optimizer.optimize(code);
277
        assertEquals("+(+(*(+(\"precio\", 10), 2), 20), 30)", code2.toString());
278
    }
279

  
280
    public void testAbs() {
281
        String source = "precio + abs(10)";
282

  
283
        Compiler compiler = createCompiler();
284

  
285
        Code code = compiler.compileExpression(source);
286
        assertEquals("+(\"precio\", abs(10))", code.toString());
287

  
288
        SymbolTable symbolTable = createSymbolTable();
289
        Optimizer optimizer = createOptimizer(symbolTable);
290
        Code code2 = optimizer.optimize(code);
291
        assertEquals("+(\"precio\", 10)", code2.toString());
292
    }
293

  
294
    public void testAbs2() {
295
        String source = "precio + abs(-10)";
296

  
297
        Compiler compiler = createCompiler();
298

  
299
        Code code = compiler.compileExpression(source);
300
        assertEquals("+(\"precio\", abs(-10))", code.toString());
301

  
302
        SymbolTable symbolTable = createSymbolTable();
303
        Optimizer optimizer = createOptimizer(symbolTable);
304
        Code code2 = optimizer.optimize(code);
305
        assertEquals("+(\"precio\", 10)", code2.toString());
306
    }
307

  
308
    public void testPI() {
309
        String source = "precio + PI()";
310

  
311
        Compiler compiler = createCompiler();
312

  
313
        Code code = compiler.compileExpression(source);
314
        assertEquals("+(\"precio\", PI())", code.toString());
315

  
316
        SymbolTable symbolTable = createSymbolTable();
317
        Optimizer optimizer = createOptimizer(symbolTable);
318
        Code code2 = optimizer.optimize(code);
319
        assertEquals("+(\"precio\", 3.141592653589793)", code2.toString());
320
    }
321

  
322
    public void testCeil() {
323
        String source = "precio + CEIL(PI())";
324

  
325
        Compiler compiler = createCompiler();
326

  
327
        Code code = compiler.compileExpression(source);
328
        assertEquals("+(\"precio\", CEIL(PI()))", code.toString());
329

  
330
        SymbolTable symbolTable = createSymbolTable();
331
        Optimizer optimizer = createOptimizer(symbolTable);
332
        Code code2 = optimizer.optimize(code);
333
        assertEquals("+(\"precio\", 4.0)", code2.toString());
334
    }
335

  
336
    public void testConcat() {
337
        String source = "CONCAT(precio,' euros')";
338

  
339
        Compiler compiler = createCompiler();
340

  
341
        Code code = compiler.compileExpression(source);
342
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
343

  
344
        SymbolTable symbolTable = createSymbolTable();
345
        Optimizer optimizer = createOptimizer(symbolTable);
346
        Code code2 = optimizer.optimize(code);
347
        assertEquals("CONCAT(\"precio\", ' euros')", code2.toString());
348
    }
349

  
350
    public void testInvokeFunction1() {
351
        String source = "ST_Area(GEOMETRY)";
352

  
353
        Compiler compiler = createCompiler();
354

  
355
        Code code = compiler.compileExpression(source);
356
        assertEquals("ST_Area(\"GEOMETRY\")", code.toString());
357

  
358
        SymbolTable symbolTable = createSymbolTable();
359
        Optimizer optimizer = createOptimizer(symbolTable);
360
        Code code2 = optimizer.optimize(code);
361
        assertEquals("ST_Area(\"GEOMETRY\")", code2.toString());
362
    }
363

  
364
    public void testInvokeMethod1() {
365
        String source = "'hola'.length()";
366

  
367
        Compiler compiler = createCompiler();
368

  
369
        Code code = compiler.compileExpression(source);
370
        assertEquals("'hola'->length()", code.toString());
371

  
372
        SymbolTable symbolTable = createSymbolTable();
373
        Optimizer optimizer = createOptimizer(symbolTable);
374
        Code code2 = optimizer.optimize(code);
375
        assertEquals("'hola'->length()", code2.toString());
376
    }
377

  
378
    public void testSpatialExpression1() throws Exception {
379
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
380
        ExpressionBuilder builder = new DefaultExpressionBuilder();
381
        builder.getConfig().set(ExpressionBuilder.Config.geometry_type_support, ExpressionBuilder.GeometrySupportType.WKB);
382

  
383
        String source = builder.and(
384
                builder.custom(this.createExpr1()),
385
                builder.ST_Intersects(
386
                        builder.geometry(createPolygon()),
387
                        builder.column("GEOMETRY")
388
                )
389
        ).toString();
390

  
391
        MutableSymbolTable symbolTable = createSymbolTable();
392
        symbolTable.setVar("campo1", 11);
393
        symbolTable.setVar("GEOMETRY", createPoint(50, 50));
394

  
395
        Interpreter interpreter = createInterpreter(symbolTable);
396
        Compiler compiler = createCompiler();
397
        Code code = compiler.compileExpression(source);
398
        System.out.println(code.toString());
399
        assertEquals(
400
                "and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
401
                code.toString()
402
        );
403

  
404
//        long t1 = System.currentTimeMillis();
405
//        for (int i = 0; i < 1000; i++) {
406
//            interpreter.run(code);
407
//        }
408
//        System.out.println("Sin optimizar: " + (System.currentTimeMillis() - t1));
409

  
410
//        t1 = System.currentTimeMillis();
411
        Optimizer optimizer = createOptimizer(symbolTable);
412
        Code code2 = optimizer.optimize(code);
413
//        System.out.println("Tiempo de optimizacion: " + (System.currentTimeMillis() - t1));
414
        System.out.println(code2.toString());
415
        assertEquals(
416
                "and(>(\"campo1\", 10), ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))",
417
                code2.toString()
418
        );
419

  
420
//        t1 = System.currentTimeMillis();
421
//        for (int i = 0; i < 1000; i++) {
422
//            interpreter.run(code2);
423
//        }
424
//        System.out.println("Optimizado: " + (System.currentTimeMillis() - t1));
425

  
426
    }
427

  
428
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestCase1.java
37 37
    protected void setUp() throws Exception {
38 38
        super.setUp();
39 39
        new DefaultLibrariesInitializer().fullInitialize();
40
//        new ExpressionEvaluatorImplLibrary().initialize();
41 40
    }
42 41

  
43 42
    @Override
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/symboltable/SQLSymbolTable.java
39 39
import org.gvsig.expressionevaluator.impl.function.operator.EqOperator;
40 40
import org.gvsig.expressionevaluator.impl.function.operator.GeOperator;
41 41
import org.gvsig.expressionevaluator.impl.function.operator.GtOperator;
42
import org.gvsig.expressionevaluator.impl.function.operator.IsOperator;
42 43
import org.gvsig.expressionevaluator.impl.function.operator.LeOperator;
43 44
import org.gvsig.expressionevaluator.impl.function.operator.LtOperator;
44 45
import org.gvsig.expressionevaluator.impl.function.operator.ModOperator;
......
86 87
        this.addOperator(new AddOperator());
87 88
        this.addOperator(new DivOperator());
88 89
        this.addOperator(new EqOperator());
90
        this.addOperator(new IsOperator());
89 91
        this.addOperator(new GeOperator());
90 92
        this.addOperator(new GtOperator());
91 93
        this.addOperator(new LeOperator());
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionEvaluatorManager.java
14 14
import org.gvsig.expressionevaluator.Interpreter;
15 15
import org.gvsig.expressionevaluator.LexicalAnalyzer;
16 16
import org.gvsig.expressionevaluator.MutableSymbolTable;
17
import org.gvsig.expressionevaluator.Optimizer;
17 18
import org.gvsig.expressionevaluator.SymbolTable;
18 19
import org.gvsig.expressionevaluator.impl.symboltable.OGCSymbolTable;
19 20
import org.gvsig.expressionevaluator.impl.symboltable.SQLSymbolTable;
......
155 156
        ExpressionBuilder x = new DefaultExpressionBuilder();
156 157
        return x;
157 158
    }
159

  
160
    @Override
161
    public Optimizer createOptimizer() {
162
        Optimizer x = new DefaultOptimizer();
163
        return x;
164
    }
158 165
}
159 166

  
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpression.java
10 10
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
11 11
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
12 12
import org.gvsig.expressionevaluator.Interpreter;
13
import org.gvsig.expressionevaluator.Optimizer;
13 14
import org.gvsig.expressionevaluator.SymbolTable;
14 15
import org.gvsig.tools.ToolsLocator;
15 16
import org.gvsig.tools.dynobject.DynStruct;
......
36 37

  
37 38
    private Code code = null;
38 39
    private Interpreter interpreter;
40
    private boolean hasNotBeenOptimized = true;
39 41

  
40 42
    public DefaultExpression() {
41 43

  
......
66 68
    public void setPhrase(String phrase) {
67 69
        this.phrase = phrase;
68 70
        this.code = null;
71
        this.hasNotBeenOptimized = true;
69 72
    }
70 73

  
71 74
    @Override
......
113 116
        this.scripts = null;
114 117
        this.code = null;
115 118
        this.interpreter = null;
119
        this.hasNotBeenOptimized = true;
116 120
    }
117 121

  
118 122
    @Override
......
131 135
            this.interpreter = manager.createInterpreter();
132 136
        }
133 137
        this.interpreter.setSymbolTable(symbolTable);
138
        if( this.hasNotBeenOptimized  ) {
139
            Optimizer optimizer = new DefaultOptimizer(symbolTable);
140
            this.code = optimizer.optimize(this.getCode());
141
            this.hasNotBeenOptimized = false;
142
        }
134 143
        Object x = this.interpreter.run(this.getCode());
135 144
        return x;
136 145
    }
......
167 176
    public void loadFromState(PersistentState state) throws PersistenceException {
168 177
        ScriptManager scriptManager = ToolsLocator.getScriptManager();
169 178

  
179
        this.clear();
180
        
170 181
        this.phrase = state.getString("phrase");
171 182
        String userScript_code = state.getString("userScript_code");
172 183
        String userScript_language = state.getString("userScript_language");
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/AddOperator.java
10 10
    }
11 11

  
12 12
    @Override
13
    public boolean allowConstantFolding() {
14
        return true;
15
    }
16
    
17
    @Override
13 18
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
14 19
        int type = this.getType(op1, op2);
15 20
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/RegExpOperator.java
13 13
    }
14 14

  
15 15
    @Override
16
    public boolean allowConstantFolding() {
17
        return true;
18
    }
19
    
20
    @Override
16 21
    public Object call(Interpreter interpreter, Object op1, Object op2) { 
17 22
        String re = Objects.toString(op2, "");
18 23
        Pattern exp = (Pattern) interpreter.getCache().get(this.getClass(), re);
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/GeOperator.java
12 12
    }
13 13

  
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
16 21
        int type = this.getType(op1, op2);
17 22
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/MulOperator.java
10 10
    }
11 11

  
12 12
    @Override
13
    public boolean allowConstantFolding() {
14
        return true;
15
    }
16
    
17
    @Override
13 18
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
14 19
        int type = this.getType(op1, op2);
15 20
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/SubstOperator.java
10 10
    }
11 11

  
12 12
    @Override
13
    public boolean allowConstantFolding() {
14
        return true;
15
    }
16
    
17
    @Override
13 18
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
14 19
        int type = this.getType(op1, op2);
15 20
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/LeOperator.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
16 21
        int type = this.getType(op1, op2);
17 22
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/NotOperator.java
12 12
    }
13 13

  
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object arg) {
16 21
        if( ! (arg instanceof Boolean) ) {
17 22
            throw new IllegalArgumentException("NOT operator require a boolean");
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/AndOperator.java
11 11
    }
12 12

  
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
15 20
        if( op1 instanceof Boolean && op2 instanceof Boolean ) {
16 21
            boolean value = ((Boolean) op1) && ((Boolean) op2);
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/NeOperator.java
13 13
    }
14 14
    
15 15
    @Override
16
    public boolean allowConstantFolding() {
17
        return true;
18
    }
19
    
20
    @Override
16 21
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
17 22
        int type = this.getType(op1, op2);
18 23
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/EqOperator.java
12 12
    }
13 13

  
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object op1, Object op2) {
16 21
        int type = this.getType(op1, op2);
17 22
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/GtOperator.java
12 12
    }
13 13

  
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
16 21
        int type = this.getType(op1, op2);
17 22
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/IsOperator.java
1
package org.gvsig.expressionevaluator.impl.function.operator;
2

  
3
import org.apache.commons.lang3.ObjectUtils;
4
import org.apache.commons.math.util.MathUtils;
5
import org.gvsig.expressionevaluator.Function;
6
import org.gvsig.expressionevaluator.Interpreter;
7

  
8
public class IsOperator extends AbstractBinaryOperator {
9

  
10
    public IsOperator() {
11
        super(Function.GROUP_BOOLEAN, "IS");
12
    }
13

  
14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
20
    public Object call(Interpreter interpreter, Object op1, Object op2) {
21
        int type = this.getType(op1, op2);
22
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
23
            boolean value = MathUtils.compareTo(
24
                ((Number) op1).doubleValue(), 
25
                ((Number) op2).doubleValue(),
26
                interpreter.getAccuracy()==null? MathUtils.EPSILON:interpreter.getAccuracy()
27
            ) == 0;
28
            return value;
29
        }
30
        if( (type & TYPE_FLOAT) == TYPE_FLOAT ) {
31
            boolean value = MathUtils.compareTo(
32
                ((Number) op1).floatValue(), 
33
                ((Number) op2).floatValue(),
34
                interpreter.getAccuracy()==null? MathUtils.EPSILON:interpreter.getAccuracy()
35
            ) == 0;
36
            return value;
37
        }
38
        if( (type & TYPE_LONG) == TYPE_LONG ) {
39
            boolean value = ((Number) op1).longValue() == ((Number) op2).longValue();
40
            return value;
41
        }
42
        if( (type & TYPE_INT) == TYPE_INT ) {
43
            boolean value = ((Number) op1).intValue() == ((Number) op2).intValue();
44
            return value;
45
        }        
46
        if( op2 instanceof Comparable && op2 instanceof Comparable ) {
47
            boolean value = ObjectUtils.compare((Comparable)op1,(Comparable)op2) == 0;
48
            return value;
49
        }
50
        throw new IllegalArgumentException("Types not allowed in '" + name() + "' operand.");
51
    }
52

  
53
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/LtOperator.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
16 21
        int type = this.getType(op1, op2);
17 22
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/ModOperator.java
10 10
    }
11 11

  
12 12
    @Override
13
    public boolean allowConstantFolding() {
14
        return true;
15
    }
16
    
17
    @Override
13 18
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
14 19
        int type = this.getType(op1, op2);
15 20
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/OrOperator.java
11 11
    }
12 12

  
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
15 20
        if( op1 instanceof Boolean && op2 instanceof Boolean ) {
16 21
            boolean value = ((Boolean) op1) || ((Boolean) op2);
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/operator/DivOperator.java
10 10
    }
11 11

  
12 12
    @Override
13
    public boolean allowConstantFolding() {
14
        return true;
15
    }
16
    
17
    @Override
13 18
    public Object call(Interpreter interpreter, Object op1, Object op2) {               
14 19
        int type = this.getType(op1, op2);
15 20
        if( (type & TYPE_DOUBLE) == TYPE_DOUBLE ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/date/DateFunction.java
22 22
    }
23 23

  
24 24
    @Override
25
    public boolean allowConstantFolding() {
26
        return true;
27
    }
28
    
29
    @Override
25 30
    public Object call(Interpreter interpreter, Object[] args) {
26 31
        String date = getStr(args, 0);
27 32
        String format = null;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/date/TimeFunction.java
22 22
    }
23 23

  
24 24
    @Override
25
    public boolean allowConstantFolding() {
26
        return true;
27
    }
28
    
29
    @Override
25 30
    public Object call(Interpreter interpreter, Object[] args) {
26 31
        String date = getStr(args, 0);
27 32
        String format = null;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/date/TimestampFunction.java
22 22
    }
23 23

  
24 24
    @Override
25
    public boolean allowConstantFolding() {
26
        return true;
27
    }
28
    
29
    @Override
25 30
    public Object call(Interpreter interpreter, Object[] args) {
26 31
        String date = getStr(args, 0);
27 32
        String format = null;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STPerimeterFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry geom = getGeom(args, 0);
17 22
        double r = geom.perimeter();
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STNumPointsFunction.java
13 13
    }
14 14
    
15 15
    @Override
16
    public boolean allowConstantFolding() {
17
        return true;
18
    }
19
    
20
    @Override
16 21
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
17 22
        Geometry geom = getGeom(args, 0);
18 23
        if ( geom instanceof OrientablePrimitive ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STSRIDFunction.java
14 14
    }
15 15
    
16 16
    @Override
17
    public boolean allowConstantFolding() {
18
        return true;
19
    }
20
    
21
    @Override
17 22
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
18 23
        Geometry geom = getGeom(args, 0);
19 24
        IProjection proj = geom.getProjection();
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STIntersectionFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry r = getGeom(args, 0).intersection(getGeom(args, 1));
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STCentroidFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Point r = getGeom(args, 0).centroid();
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STPointNFunction.java
14 14
    }
15 15
    
16 16
    @Override
17
    public boolean allowConstantFolding() {
18
        return true;
19
    }
20
    
21
    @Override
17 22
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
18 23
        Geometry geom = getGeom(args, 0);
19 24
        if ( geom instanceof OrientablePrimitive ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STXFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        double r = getPoint(args, 0).getX();
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STStartPointFunction.java
14 14
    }
15 15
    
16 16
    @Override
17
    public boolean allowConstantFolding() {
18
        return true;
19
    }
20
    
21
    @Override
17 22
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
18 23
        Geometry geom = getGeom(args, 0);
19 24
        if ( geom instanceof OrientablePrimitive ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STBufferFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry r = getGeom(args, 0).buffer(getDouble(args, 1));
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STZFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        double r = getPoint(args, 0).getCoordinateAt(Geometry.DIMENSIONS.Z);
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STTouchesFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).touches(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STGeomFromTextFunction.java
16 16
    }
17 17
    
18 18
    @Override
19
    public boolean allowConstantFolding() {
20
        return true;
21
    }
22
    
23
    @Override
19 24
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
20 25
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
21 26
        String wkt = getStr(args, 0);
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STEndPointFunction.java
14 14
    }
15 15
    
16 16
    @Override
17
    public boolean allowConstantFolding() {
18
        return true;
19
    }
20
    
21
    @Override
17 22
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
18 23
        Geometry geom = getGeom(args, 0);
19 24
        if ( geom instanceof OrientablePrimitive ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STCrossesFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).crosses(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STDisjointFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).disjoint(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STNumGeometriesFunction.java
13 13
    }
14 14
    
15 15
    @Override
16
    public boolean allowConstantFolding() {
17
        return true;
18
    }
19
    
20
    @Override
16 21
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
17 22
        Geometry geom = getGeom(args, 0);
18 23
        if( geom instanceof Aggregate ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STIsSimpleFunction.java
3 3
import org.apache.commons.lang3.Range;
4 4
import org.gvsig.expressionevaluator.Interpreter;
5 5
import org.gvsig.expressionevaluator.spi.AbstractFunction;
6
import org.gvsig.fmap.geom.Geometry;
7 6

  
8 7
public class STIsSimpleFunction extends AbstractFunction {
9 8

  
......
12 11
    }
13 12
    
14 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
15 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 20
        boolean r = getGeom(args, 0).isSimple();
17 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STDimensionFunction.java
13 13
    }
14 14

  
15 15
    @Override
16
    public boolean allowConstantFolding() {
17
        return true;
18
    }
19
    
20
    @Override
16 21
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
17 22
        Geometry geom = getGeom(args, 0);
18 23
        GeometryType type = geom.getGeometryType();
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STConvexHullFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry r = getGeom(args, 0).convexHull();
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STOverlapsFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).overlaps(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STCoversFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).covers(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STWithinFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).within(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STYFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        double r = getPoint(args, 0).getY();
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STAreaFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry geom = getGeom(args, 0);
17 22
        double r = geom.area();
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STAsTextFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        String r = getGeom(args, 0).convertToWKT();
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STGeometryNFunction.java
14 14
    }
15 15
    
16 16
    @Override
17
    public boolean allowConstantFolding() {
18
        return true;
19
    }
20
    
21
    @Override
17 22
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
18 23
        Geometry geom = getGeom(args, 0);
19 24
        if( geom instanceof Aggregate ) {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STEnvelopeFunction.java
3 3
import org.apache.commons.lang3.Range;
4 4
import org.gvsig.expressionevaluator.Interpreter;
5 5
import org.gvsig.expressionevaluator.spi.AbstractFunction;
6
import org.gvsig.fmap.geom.Geometry;
7 6
import org.gvsig.fmap.geom.primitive.Envelope;
8 7

  
9 8
public class STEnvelopeFunction extends AbstractFunction {
......
13 12
    }
14 13
    
15 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
16 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
17 21
        Envelope r = getGeom(args, 0).getEnvelope();
18 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STContainsFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).contains(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STGeomFromWKBFunction.java
16 16
    }
17 17
    
18 18
    @Override
19
    public boolean allowConstantFolding() {
20
        return true;
21
    }
22
    
23
    @Override
19 24
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
20 25
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
21 26
        byte[] wkb = (byte[]) getObject(args, 0);
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STCoveredByFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).coveredBy(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STIntersectsFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        boolean r = getGeom(args, 0).intersects(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STUnionFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry r = getGeom(args, 0).union(getGeom(args, 1));
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STDifferenceFunction.java
12 12
    }
13 13
    
14 14
    @Override
15
    public boolean allowConstantFolding() {
16
        return true;
17
    }
18
    
19
    @Override
15 20
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 21
        Geometry r = getGeom(args, 0).difference(getGeom(args, 1));
17 22
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STDistanceFunction.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
15 20
        double r = getGeom(args, 0).distance(getGeom(args, 1));
16 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/spatial/STIsValidFunction.java
3 3
import org.apache.commons.lang3.Range;
4 4
import org.gvsig.expressionevaluator.Interpreter;
5 5
import org.gvsig.expressionevaluator.spi.AbstractFunction;
6
import org.gvsig.fmap.geom.Geometry;
7 6

  
8 7
public class STIsValidFunction extends AbstractFunction {
9 8

  
......
12 11
    }
13 12
    
14 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
15 19
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
16 20
        boolean r = getGeom(args, 0).isValid();
17 21
        return r;
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/predicate/IlikeOperator.java
11 11
    }
12 12
    
13 13
    @Override
14
    public boolean allowConstantFolding() {
15
        return true;
16
    }
17
    
18
    @Override
14 19
    public Object call(Interpreter interpreter, Object op1, Object op2) {       
15 20
        if( op1 instanceof CharSequence && op2 instanceof CharSequence ) {
16 21
            boolean value = ilike(((CharSequence) op1).toString(), ((CharSequence) op2).toString());
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/predicate/LikeOperator.java
27 27
    }
28 28

  
29 29
    @Override
30
    public boolean allowConstantFolding() {
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff