Revision 44752

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.geometry/org.gvsig.expressionevaluator.geometry.lib/org.gvsig.expressionevaluator.geometry.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestCodeFormatter.java
5 5
import org.apache.commons.lang3.StringUtils;
6 6
import org.cresques.cts.IProjection;
7 7
import org.gvsig.expressionevaluator.Code;
8
import org.gvsig.expressionevaluator.Code.Caller;
9 8
import org.gvsig.expressionevaluator.Code.Constant;
10 9
import org.gvsig.expressionevaluator.Codes;
11 10
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
......
20 19
import org.gvsig.fmap.geom.exception.CreateGeometryException;
21 20
import org.gvsig.fmap.geom.primitive.Point;
22 21
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
22
import org.gvsig.expressionevaluator.Code.Callable;
23 23

  
24 24
public class TestCodeFormatter extends TestCase {
25 25

  
......
68 68
            // Need for H2Spatial
69 69
            @Override
70 70
            public boolean canApply(Code code) {
71
                if( code instanceof Caller ) {
72
                    return StringUtils.equalsIgnoreCase("ST_intersects",((Caller)code).name());
71
                if( code instanceof Callable ) {
72
                    return StringUtils.equalsIgnoreCase("ST_intersects",((Callable)code).name());
73 73
                }
74 74
                return false;
75 75
            }
76 76

  
77 77
            @Override
78 78
            public String format(Code code) {
79
                Codes parameters = ((Caller)code).parameters();
79
                Codes parameters = ((Callable)code).parameters();
80 80
                String p1 = parameters.get(0).toString(MyFormatter.this);
81 81
                String p2 = parameters.get(1).toString(MyFormatter.this);
82 82
                String r = MessageFormat.format(
......
101 101

  
102 102
            @Override
103 103
            public boolean canApply(Code code) {
104
                if( code instanceof Caller ) {
105
                    return StringUtils.equalsIgnoreCase("ST_intersects2",((Caller)code).name());
104
                if( code instanceof Callable ) {
105
                    return StringUtils.equalsIgnoreCase("ST_intersects2",((Callable)code).name());
106 106
                }
107 107
                return false;
108 108
            }
109 109

  
110 110
            @Override
111 111
            public String format(Code code) {
112
                Codes parameters = ((Caller)code).parameters();
112
                Codes parameters = ((Callable)code).parameters();
113 113
                String p1 = parameters.get(0).toString(MyFormatter.this);
114 114
                String p2 = parameters.get(1).toString(MyFormatter.this);
115 115
                String r = MessageFormat.format(
......
127 127
            // Need for SpatiaLite 
128 128
            @Override
129 129
            public boolean canApply(Code code) {
130
                if( code instanceof Caller ) {
131
                    if( StringUtils.equalsIgnoreCase("DECODE",((Caller)code).name()) ) {
132
                        Codes parameters = ((Caller)code).parameters();
130
                if( code instanceof Callable ) {
131
                    if( StringUtils.equalsIgnoreCase("DECODE",((Callable)code).name()) ) {
132
                        Codes parameters = ((Callable)code).parameters();
133 133
                        Code code_p1 = parameters.get(0);
134 134
                        Code code_p2 = parameters.get(1);
135 135
                        if( code_p1 instanceof Constant && code_p2 instanceof Constant ) {
......
147 147

  
148 148
            @Override
149 149
            public String format(Code code) {
150
                Codes parameters = ((Caller)code).parameters();
150
                Codes parameters = ((Callable)code).parameters();
151 151
                Object p1 = ((Constant)parameters.get(0)).value();
152 152
                return "x'"+ (String)p1 + "'";
153 153
            }
......
157 157
            // Need for H2Spatial
158 158
            @Override
159 159
            public boolean canApply(Code code) {
160
                if( code instanceof Caller ) {
161
                    return StringUtils.equalsIgnoreCase("IFNULL",((Caller)code).name());
160
                if( code instanceof Callable ) {
161
                    return StringUtils.equalsIgnoreCase("IFNULL",((Callable)code).name());
162 162
                }
163 163
                return false;
164 164
            }
165 165

  
166 166
            @Override
167 167
            public String format(Code code) {
168
                Codes parameters = ((Caller)code).parameters();
168
                Codes parameters = ((Callable)code).parameters();
169 169
                String p1 = parameters.get(0).toString(MyFormatter.this);
170 170
                String p2 = parameters.get(1).toString(MyFormatter.this);
171 171
                String p3 = parameters.get(2).toString(MyFormatter.this);
......
183 183
            // Need for SpatiaLite
184 184
            @Override
185 185
            public boolean canApply(Code code) {
186
                if( code instanceof Caller ) {
187
                    return StringUtils.equalsIgnoreCase("ILIKE",((Caller)code).name());
186
                if( code instanceof Callable ) {
187
                    return StringUtils.equalsIgnoreCase("ILIKE",((Callable)code).name());
188 188
                }
189 189
                return false;
190 190
            }
191 191

  
192 192
            @Override
193 193
            public String format(Code code) {
194
                Codes parameters = ((Caller)code).parameters();
194
                Codes parameters = ((Callable)code).parameters();
195 195
                String p1 = parameters.get(0).toString(MyFormatter.this);
196 196
                String p2 = parameters.get(1).toString(MyFormatter.this);
197 197
                String r = MessageFormat.format(
......
207 207
            // Need for H2Spatial
208 208
            @Override
209 209
            public boolean canApply(Code code) {
210
                if( code instanceof Caller ) {
211
                    return StringUtils.equalsIgnoreCase("NOT_IS_NULL",((Caller)code).name());
210
                if( code instanceof Callable ) {
211
                    return StringUtils.equalsIgnoreCase("NOT_IS_NULL",((Callable)code).name());
212 212
                }
213 213
                return false;
214 214
            }
215 215

  
216 216
            @Override
217 217
            public String format(Code code) {
218
                Codes parameters = ((Caller)code).parameters();
218
                Codes parameters = ((Callable)code).parameters();
219 219
                String p1 = parameters.get(0).toString(MyFormatter.this);
220 220
                String r = MessageFormat.format(
221 221
                        "( ({0}) IS NOT 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/DefaultOptimizer.java
5 5
import java.util.Collections;
6 6
import java.util.Iterator;
7 7
import org.gvsig.expressionevaluator.Code;
8
import org.gvsig.expressionevaluator.Code.Caller;
9 8
import org.gvsig.expressionevaluator.CodeBuilder;
10 9
import org.gvsig.expressionevaluator.Codes;
11 10
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
......
13 12
import org.gvsig.expressionevaluator.Interpreter;
14 13
import org.gvsig.expressionevaluator.SymbolTable;
15 14
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseCodes;
15
import org.gvsig.expressionevaluator.Code.Callable;
16 16

  
17 17
/**
18 18
 *
......
170 170

  
171 171
    private Code doOptimize(Code code) {
172 172
        switch (code.code()) {
173
            case Code.CALLER:
174
                Caller caller = (Caller) code;
173
            case Code.CALLABLE:
174
                Callable caller = (Callable) code;
175 175
                Function function = caller.function();
176 176
                if ( function == null) {
177 177
                    // resolve and link function
......
182 182
                    return ((FunctionOptimizer) caller.function()).optimize(this, caller);
183 183
                } else {
184 184
                    switch (caller.type()) {
185
                        case Caller.BINARY_OPERATOR: {
185
                        case Callable.BINARY_OPERATOR: {
186 186
                            Code op1 = this.doOptimize(caller.parameters().get(0));
187 187
                            Code op2 = this.doOptimize(caller.parameters().get(1));
188 188
                            if ( function.allowConstantFolding()) {
......
196 196
                            }
197 197
                        }
198 198

  
199
                        case Code.Caller.UNARY_OPERATOR: {
199
                        case Code.Callable.UNARY_OPERATOR: {
200 200
                            Code op1 = this.doOptimize(caller.parameters().get(0));
201 201
                            if (function.allowConstantFolding()
202 202
                                    && op1.code() == Code.CONSTANT) {
......
207 207
                            return code;
208 208
                        }
209 209

  
210
                        case Code.Caller.FUNCTION:
210
                        case Code.Callable.FUNCTION:
211 211
                        default: {
212 212
                            BaseCodes newArgs = null;
213 213
                            boolean canOptimize = true;
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/grammars/BasicGrammarFactory.java
1 1
package org.gvsig.expressionevaluator.impl.grammars;
2 2

  
3 3
import org.gvsig.expressionevaluator.Code;
4
import org.gvsig.expressionevaluator.Code.Caller;
5 4
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_CAST;
6 5
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DATE;
7 6
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_EXTRACT;
......
27 26
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction;
28 27
import org.gvsig.expressionevaluator.impl.function.programming.WhileFunction;
29 28
import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory;
29
import org.gvsig.expressionevaluator.Code.Callable;
30 30

  
31 31
/**
32 32
 *
......
49 49

  
50 50
        @Override
51 51
        public Code build(StatementContext context) {
52
            Caller code = (Caller) super.build(context);
52
            Callable code = (Callable) super.build(context);
53 53
            Code exceptCode = context.getCode(this.exceptID);
54 54
            if( exceptCode==null ) {
55 55
                return code;
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
2 2

  
3 3
import java.util.Objects;
4 4
import org.gvsig.expressionevaluator.Code;
5
import org.gvsig.expressionevaluator.Code.Caller;
6 5
import org.gvsig.expressionevaluator.Code.Constant;
7 6
import org.gvsig.expressionevaluator.ExpressionBuilder;
8 7
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_ADD;
......
12 11
import org.gvsig.expressionevaluator.Optimizer;
13 12
import org.gvsig.expressionevaluator.Optimizer.FunctionOptimizer;
14 13
import org.gvsig.expressionevaluator.impl.I18N;
14
import org.gvsig.expressionevaluator.Code.Callable;
15 15

  
16 16
public class AddOperator 
17 17
        extends AbstractBinaryOperator 
......
61 61
    }
62 62

  
63 63
    @Override
64
    public Code optimize(Optimizer optimizer, Caller caller) {
64
    public Code optimize(Optimizer optimizer, Callable caller) {
65 65
        Code op1 = optimizer.optimize(caller.parameters().get(0));
66 66
        Code op2 = optimizer.optimize(caller.parameters().get(1));
67 67
        
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
43 43
    }
44 44

  
45 45
    @Override
46
    public Code optimize(Optimizer optimizer, Code.Caller caller) {
46
    public Code optimize(Optimizer optimizer, Code.Callable caller) {
47 47
        Code op1 = optimizer.optimize(caller.parameters().get(0));
48 48
        Code op2 = optimizer.optimize(caller.parameters().get(1));
49 49
        
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
44 44
    }
45 45
    
46 46
    @Override
47
    public Code optimize(Optimizer optimizer, Code.Caller caller) {
47
    public Code optimize(Optimizer optimizer, Code.Callable caller) {
48 48
        Code op1 = optimizer.optimize(caller.parameters().get(0));
49 49
        Code op2 = optimizer.optimize(caller.parameters().get(1));
50 50
        
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/ConcatOperator.java
3 3
import java.util.Objects;
4 4
import org.apache.commons.lang3.StringUtils;
5 5
import org.gvsig.expressionevaluator.Code;
6
import org.gvsig.expressionevaluator.Code.Caller;
7 6
import org.gvsig.expressionevaluator.Code.Constant;
8 7
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_CONCAT;
9 8
import org.gvsig.expressionevaluator.Function;
10 9
import org.gvsig.expressionevaluator.Interpreter;
11 10
import org.gvsig.expressionevaluator.Optimizer;
12 11
import org.gvsig.expressionevaluator.Optimizer.FunctionOptimizer;
12
import org.gvsig.expressionevaluator.Code.Callable;
13 13

  
14 14
public class ConcatOperator 
15 15
        extends AbstractBinaryOperator 
......
31 31
    }
32 32

  
33 33
    @Override
34
    public Code optimize(Optimizer optimizer, Caller caller) {
34
    public Code optimize(Optimizer optimizer, Callable caller) {
35 35
        Code op1 = optimizer.optimize(caller.parameters().get(0));
36 36
        Code op2 = optimizer.optimize(caller.parameters().get(1));
37 37
        
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
44 44
    
45 45

  
46 46
    @Override
47
    public Code optimize(Optimizer optimizer, Code.Caller caller) {
47
    public Code optimize(Optimizer optimizer, Code.Callable caller) {
48 48
        Code op1 = optimizer.optimize(caller.parameters().get(0));
49 49
        Code op2 = optimizer.optimize(caller.parameters().get(1));
50 50
        
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/DefaultInterpreter.java
15 15
import org.gvsig.expressionevaluator.Code;
16 16
import org.gvsig.expressionevaluator.Code.Constant;
17 17
import org.gvsig.expressionevaluator.Code.Identifier;
18
import org.gvsig.expressionevaluator.Code.Caller;
19 18
import org.gvsig.expressionevaluator.Code.Method;
20 19
import org.gvsig.expressionevaluator.Codes;
21 20
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
......
27 26
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException;
28 27
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
29 28
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
29
import org.gvsig.expressionevaluator.Code.Callable;
30 30

  
31 31
public class DefaultInterpreter implements Interpreter {
32 32

  
......
291 291
                    value = method.call(this, argvalues);
292 292
                    break;
293 293
                }
294
            case Code.CALLER:
295
                Caller caller = (Caller) code;
294
            case Code.CALLABLE:
295
                Callable caller = (Callable) code;
296 296
                Function function = caller.function();
297 297
                if( function == null ) {
298 298
                    function = this.getSymbolTable().function(caller.name());
......
307 307
                Codes args = caller.parameters();
308 308
                try {
309 309
                    switch( caller.type() ) {
310
                    case Caller.UNARY_OPERATOR:
310
                    case Callable.UNARY_OPERATOR:
311 311
                        if( args == null || args.size() != 1 ) {
312 312
                            throw new ExpressionRuntimeException(code, I18N.Number_of_argument_mistmatch_in_operator_XIdentifierX_expected_1_got_XargcX(function.name(),args==null?0:args.size()));
313 313
                        }
314 314
                        value = ((UnaryOperator) function).call(this, runCode(args.get(0)));
315 315
                        break;
316 316

  
317
                    case Caller.BINARY_OPERATOR:
317
                    case Callable.BINARY_OPERATOR:
318 318
                        if( args == null || args.size() != 2 ) {
319 319
                            throw new ExpressionRuntimeException(code, I18N.Number_of_argument_mistmatch_in_operator_XIdentifierX_expected_2_got_XargcX(function.name(),args==null?0:args.size()));
320 320
                        }
321 321
                        value = ((BinaryOperator) function).call(this, runCode(args.get(0)), runCode(args.get(1)));
322 322
                        break;
323 323

  
324
                    case Caller.FUNCTION:
324
                    case Callable.FUNCTION:
325 325
                        int argc = (args == null) ? 0 : args.size();
326 326
                        if( !function.argc().contains(argc) ) {
327 327
                            throw new ExpressionRuntimeException(code, I18N.Number_of_argument_mistmatch_in_function_XIdentifierX_expected_XexpectedX_got_XfoundX(function.name(),function.argc(),argc));
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/DefaultStatement.java
8 8
import org.apache.commons.lang3.tuple.ImmutablePair;
9 9
import org.apache.commons.lang3.tuple.Pair;
10 10
import org.gvsig.expressionevaluator.Code;
11
import org.gvsig.expressionevaluator.Code.Caller;
12 11
import org.gvsig.expressionevaluator.CodeBuilder;
13 12
import org.gvsig.expressionevaluator.Codes;
14 13
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_LIST;
......
21 20
import org.gvsig.expressionevaluator.Statement.StatementContext;
22 21
import org.gvsig.expressionevaluator.impl.function.programming.CodeBlockFunction;
23 22
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseCodes;
23
import org.gvsig.expressionevaluator.Code.Callable;
24 24

  
25 25
/**
26 26
 *
......
834 834
            
835 835
            Codes base_args = super.build(context);
836 836
            for (Code arg : base_args) {
837
                if( arg.code() == Code.CALLER && 
838
                    ((Caller)arg).name().equals(CodeBlockFunction.NAME) ) {
839
                    Codes block_args = ((Caller)arg).parameters();
837
                if( arg.code() == Code.CALLABLE && 
838
                    ((Callable)arg).name().equals(CodeBlockFunction.NAME) ) {
839
                    Codes block_args = ((Callable)arg).parameters();
840 840
                    for (Code block_arg : block_args) {
841 841
                        args.add(block_arg);
842 842
                    }
......
881 881
                    if( args.size()==1 && 
882 882
                        StringUtils.equalsIgnoreCase(CodeBlockFunction.NAME,this.getCodeID()) ) {
883 883
                        Code code0 = args.get(0);
884
                        if( code0.code() == Code.CALLER && 
885
                                StringUtils.equalsIgnoreCase(CodeBlockFunction.NAME,((Caller)code0).name())
884
                        if( code0.code() == Code.CALLABLE && 
885
                                StringUtils.equalsIgnoreCase(CodeBlockFunction.NAME,((Callable)code0).name())
886 886
                                ) {
887 887
                            code = code0;
888 888
                        }
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/DefaultCodeBuilder.java
6 6
import java.util.List;
7 7
import org.apache.commons.lang3.StringUtils;
8 8
import org.gvsig.expressionevaluator.Code;
9
import static org.gvsig.expressionevaluator.Code.CALLER;
10 9
import static org.gvsig.expressionevaluator.Code.CONSTANT;
11 10
import static org.gvsig.expressionevaluator.Code.IDENTIFIER;
12 11
import static org.gvsig.expressionevaluator.Code.UNDEFINED;
13 12
import static org.gvsig.expressionevaluator.Code.CODES;
14
import org.gvsig.expressionevaluator.Code.Caller;
15 13
import org.gvsig.expressionevaluator.Code.Constant;
16 14
import static org.gvsig.expressionevaluator.Code.EMPTY_FORMATTER;
17 15
import org.gvsig.expressionevaluator.Code.Identifier;
......
53 51
import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
54 52
import org.gvsig.tools.exception.BaseException;
55 53
import org.gvsig.tools.visitor.Visitor;
54
import static org.gvsig.expressionevaluator.Code.CALLABLE;
55
import org.gvsig.expressionevaluator.Code.Callable;
56 56

  
57 57
@SuppressWarnings("UseSpecificCatch")
58 58
public class DefaultCodeBuilder implements CodeBuilder {
......
82 82
        
83 83
        @Override
84 84
        public void link(SymbolTable symbolTable) {
85
            if( this.code() == Code.CALLER ) {
86
                Caller caller = (Caller) this;
85
            if( this.code() == Code.CALLABLE ) {
86
                Callable caller = (Callable) this;
87 87
                Function fn = symbolTable.function(caller.name());
88 88
                if( fn != null ) {
89 89
                    caller.function(fn);
......
363 363
        
364 364
    }
365 365

  
366
    public class BaseCaller extends BaseCode implements Caller, RecursionControlSupport {
366
    public class BaseCaller extends BaseCode implements Callable, RecursionControlSupport {
367 367

  
368 368
        private final String name;
369 369
        private final Codes args;
......
381 381

  
382 382
        @Override
383 383
        public int code() {
384
            return CALLER;
384
            return CALLABLE;
385 385
        }
386 386

  
387 387
        @Override
......
670 670
    }
671 671

  
672 672
    @Override
673
    public Caller tuple() {
673
    public Callable tuple() {
674 674
      BaseCodes args = this.args();
675 675
      return function(FUNCTION_TUPLE, args);
676 676
    }
677 677
    
678 678
    @Override
679
    public Caller tuple(Codes args) {
679
    public Callable tuple(Codes args) {
680 680
      if( args == null ) {
681 681
        args = this.args();
682 682
      }
......
684 684
    }
685 685

  
686 686
    @Override
687
    public Caller function(String name, int type, Codes args) {
687
    public Callable function(String name, int type, Codes args) {
688 688
        return new BaseCaller(name, type, args);
689 689
    }
690 690

  
691 691
    @Override
692
    public Caller function(String name, Codes args) {
693
        return function(name, Caller.FUNCTION, args);
692
    public Callable function(String name, Codes args) {
693
        return function(name, Callable.FUNCTION, args);
694 694
    }
695 695
    
696 696
    @Override
......
700 700
    }
701 701
    
702 702
    @Override
703
    public Caller operator(String name, Code arg1) {
703
    public Callable operator(String name, Code arg1) {
704 704
        BaseCodes args = args();
705 705
        args.add(arg1);
706
        return function(name, Caller.UNARY_OPERATOR, args);
706
        return function(name, Callable.UNARY_OPERATOR, args);
707 707
    }
708 708

  
709 709
    @Override
710
    public Caller operator(String name, Code arg1, Code arg2) {
710
    public Callable operator(String name, Code arg1, Code arg2) {
711 711
        BaseCodes args = args();
712 712
        args.add(arg1);
713 713
        args.add(arg2);
714
        return function(name, Caller.BINARY_OPERATOR, args);
714
        return function(name, Callable.BINARY_OPERATOR, args);
715 715
    }
716 716
    
717 717
    @Override
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/TestCodeFormatter.java
4 4
import junit.framework.TestCase;
5 5
import org.apache.commons.lang3.StringUtils;
6 6
import org.gvsig.expressionevaluator.Code;
7
import org.gvsig.expressionevaluator.Code.Caller;
8 7
import org.gvsig.expressionevaluator.Code.Constant;
9 8
import org.gvsig.expressionevaluator.Codes;
10 9
import org.gvsig.expressionevaluator.ExpressionBuilder;
......
14 13
import org.gvsig.expressionevaluator.Formatter;
15 14
import org.gvsig.expressionevaluator.LexicalAnalyzer;
16 15
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
16
import org.gvsig.expressionevaluator.Code.Callable;
17 17

  
18 18
public class TestCodeFormatter extends TestCase {
19 19

  
......
39 39
            // Need for H2Spatial
40 40
            @Override
41 41
            public boolean canApply(Code code) {
42
                if( code instanceof Caller ) {
43
                    return StringUtils.equalsIgnoreCase("ST_intersects",((Caller)code).name());
42
                if( code instanceof Callable ) {
43
                    return StringUtils.equalsIgnoreCase("ST_intersects",((Callable)code).name());
44 44
                }
45 45
                return false;
46 46
            }
47 47

  
48 48
            @Override
49 49
            public String format(Code code) {
50
                Codes parameters = ((Caller)code).parameters();
50
                Codes parameters = ((Callable)code).parameters();
51 51
                String p1 = parameters.get(0).toString(MyFormatter.this);
52 52
                String p2 = parameters.get(1).toString(MyFormatter.this);
53 53
                String r = MessageFormat.format(
......
72 72

  
73 73
            @Override
74 74
            public boolean canApply(Code code) {
75
                if( code instanceof Caller ) {
76
                    return StringUtils.equalsIgnoreCase("ST_intersects2",((Caller)code).name());
75
                if( code instanceof Callable ) {
76
                    return StringUtils.equalsIgnoreCase("ST_intersects2",((Callable)code).name());
77 77
                }
78 78
                return false;
79 79
            }
80 80

  
81 81
            @Override
82 82
            public String format(Code code) {
83
                Codes parameters = ((Caller)code).parameters();
83
                Codes parameters = ((Callable)code).parameters();
84 84
                String p1 = parameters.get(0).toString(MyFormatter.this);
85 85
                String p2 = parameters.get(1).toString(MyFormatter.this);
86 86
                String r = MessageFormat.format(
......
98 98
            // Need for SpatiaLite 
99 99
            @Override
100 100
            public boolean canApply(Code code) {
101
                if( code instanceof Caller ) {
102
                    if( StringUtils.equalsIgnoreCase("DECODE",((Caller)code).name()) ) {
103
                        Codes parameters = ((Caller)code).parameters();
101
                if( code instanceof Callable ) {
102
                    if( StringUtils.equalsIgnoreCase("DECODE",((Callable)code).name()) ) {
103
                        Codes parameters = ((Callable)code).parameters();
104 104
                        Code code_p1 = parameters.get(0);
105 105
                        Code code_p2 = parameters.get(1);
106 106
                        if( code_p1 instanceof Constant && code_p2 instanceof Constant ) {
......
118 118

  
119 119
            @Override
120 120
            public String format(Code code) {
121
                Codes parameters = ((Caller)code).parameters();
121
                Codes parameters = ((Callable)code).parameters();
122 122
                Object p1 = ((Constant)parameters.get(0)).value();
123 123
                return "x'"+ (String)p1 + "'";
124 124
            }
......
128 128
            // Need for H2Spatial
129 129
            @Override
130 130
            public boolean canApply(Code code) {
131
                if( code instanceof Caller ) {
132
                    return StringUtils.equalsIgnoreCase("IFNULL",((Caller)code).name());
131
                if( code instanceof Callable ) {
132
                    return StringUtils.equalsIgnoreCase("IFNULL",((Callable)code).name());
133 133
                }
134 134
                return false;
135 135
            }
136 136

  
137 137
            @Override
138 138
            public String format(Code code) {
139
                Codes parameters = ((Caller)code).parameters();
139
                Codes parameters = ((Callable)code).parameters();
140 140
                String p1 = parameters.get(0).toString(MyFormatter.this);
141 141
                String p2 = parameters.get(1).toString(MyFormatter.this);
142 142
                String p3 = parameters.get(2).toString(MyFormatter.this);
......
154 154
            // Need for SpatiaLite
155 155
            @Override
156 156
            public boolean canApply(Code code) {
157
                if( code instanceof Caller ) {
158
                    return StringUtils.equalsIgnoreCase("ILIKE",((Caller)code).name());
157
                if( code instanceof Callable ) {
158
                    return StringUtils.equalsIgnoreCase("ILIKE",((Callable)code).name());
159 159
                }
160 160
                return false;
161 161
            }
162 162

  
163 163
            @Override
164 164
            public String format(Code code) {
165
                Codes parameters = ((Caller)code).parameters();
165
                Codes parameters = ((Callable)code).parameters();
166 166
                String p1 = parameters.get(0).toString(MyFormatter.this);
167 167
                String p2 = parameters.get(1).toString(MyFormatter.this);
168 168
                String r = MessageFormat.format(
......
178 178
            // Need for H2Spatial
179 179
            @Override
180 180
            public boolean canApply(Code code) {
181
                if( code instanceof Caller ) {
182
                    return StringUtils.equalsIgnoreCase("NOT_IS_NULL",((Caller)code).name());
181
                if( code instanceof Callable ) {
182
                    return StringUtils.equalsIgnoreCase("NOT_IS_NULL",((Callable)code).name());
183 183
                }
184 184
                return false;
185 185
            }
186 186

  
187 187
            @Override
188 188
            public String format(Code code) {
189
                Codes parameters = ((Caller)code).parameters();
189
                Codes parameters = ((Callable)code).parameters();
190 190
                String p1 = parameters.get(0).toString(MyFormatter.this);
191 191
                String r = MessageFormat.format(
192 192
                        "( ({0}) IS NOT NULL )", 
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/Code.java
8 8
    public static final int UNDEFINED = -1;
9 9
    public static final int CONSTANT = 0;
10 10
    public static final int IDENTIFIER = 1;
11
    public static final int CALLER = 2;
11
    public static final int CALLABLE = 2;
12 12
    public static final int METHOD = 3;
13 13
    public static final int CODES = 4;
14 14
    
......
24 24

  
25 25
    }
26 26

  
27
    public interface Caller extends Code {
27
    public interface Callable extends Code {
28 28

  
29 29
        public static final int FUNCTION = 0;
30 30
        public static final int BINARY_OPERATOR = 1;
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/CodeBuilder.java
1 1
package org.gvsig.expressionevaluator;
2 2

  
3
import org.gvsig.expressionevaluator.Code.Caller;
4 3
import org.gvsig.expressionevaluator.Code.Constant;
5 4
import org.gvsig.expressionevaluator.Code.Identifier;
6 5

  
7 6
import org.gvsig.tools.lang.Cloneable;
7
import org.gvsig.expressionevaluator.Code.Callable;
8 8

  
9 9
public interface CodeBuilder extends Cloneable {
10 10

  
......
15 15

  
16 16
    Identifier identifier(String name);
17 17

  
18
    Caller function(String name, int type, Codes args);
18
    Callable function(String name, int type, Codes args);
19 19

  
20
    Caller function(String name, Codes args);
20
    Callable function(String name, Codes args);
21 21

  
22
    Caller operator(String name, Code arg1);
22
    Callable operator(String name, Code arg1);
23 23

  
24
    Caller operator(String name, Code arg1, Code arg2);
24
    Callable operator(String name, Code arg1, Code arg2);
25 25

  
26 26
    Codes args();
27 27
    
28
    Caller tuple();
28
    Callable tuple();
29 29

  
30
    Caller tuple(Codes args);
30
    Callable tuple(Codes args);
31 31

  
32 32
    Code add(Code op1, Code op2);
33 33

  
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/Optimizer.java
1 1
package org.gvsig.expressionevaluator;
2 2

  
3
import org.gvsig.expressionevaluator.Code.Caller;
3
import org.gvsig.expressionevaluator.Code.Callable;
4 4

  
5 5
/**
6 6
 *
......
9 9
public interface Optimizer {
10 10

  
11 11
    public interface FunctionOptimizer {
12
        public Code optimize(Optimizer optimizer, Caller caller);
12
        public Code optimize(Optimizer optimizer, Callable caller);
13 13
    }
14 14
    
15 15
    public Code optimize(Code code);
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/AbstractAutomaticExpressionChecker.java
20 20
import org.apache.commons.lang3.mutable.Mutable;
21 21
import org.apache.commons.lang3.mutable.MutableObject;
22 22
import org.gvsig.expressionevaluator.Code;
23
import org.gvsig.expressionevaluator.Code.Caller;
24 23
import org.gvsig.expressionevaluator.Code.Identifier;
25 24
import org.gvsig.expressionevaluator.Expression;
26 25
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
......
40 39
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
41 40
import org.gvsig.tools.visitor.VisitCanceledException;
42 41
import org.gvsig.tools.visitor.Visitor;
42
import org.gvsig.expressionevaluator.Code.Callable;
43 43

  
44 44
/**
45 45
 *
......
212 212
                    public void visit(Object obj) throws VisitCanceledException, BaseException {
213 213
                        Code code = (Code) obj;
214 214
                        switch(code.code()) {
215
                            case Code.CALLER:
216
                                Function function = ((Caller)code).function();
215
                            case Code.CALLABLE:
216
                                Function function = ((Callable)code).function();
217 217
                                if( function!=null && !function.isSQLCompatible() ) {
218 218
                                    theTip.setValue(I18N.Avoid_the_use_of_functions_not_compatible_with_SQL_in_this_data_source(function.name()));
219 219
                                }
......
225 225
                                }
226 226
                                break;
227 227
                            case Code.METHOD:
228
                                theTip.setValue(I18N.Avoid_the_use_of_functions_not_compatible_with_SQL_in_this_data_source(((Caller)code).name()));
228
                                theTip.setValue(I18N.Avoid_the_use_of_functions_not_compatible_with_SQL_in_this_data_source(((Callable)code).name()));
229 229
                                break;
230 230
                        }
231 231
                    }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/dataaccess/SelectFunction.java
31 31
import org.apache.commons.lang3.tuple.ImmutablePair;
32 32
import org.apache.commons.lang3.tuple.Pair;
33 33
import org.gvsig.expressionevaluator.Code;
34
import org.gvsig.expressionevaluator.Code.Caller;
35 34
import org.gvsig.expressionevaluator.CodeBuilder;
36 35
import org.gvsig.expressionevaluator.Codes;
37 36
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR;
......
56 55
import org.gvsig.fmap.dal.feature.FeatureStore;
57 56
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator;
58 57
import org.gvsig.tools.exception.BaseException;
58
import org.gvsig.expressionevaluator.Code.Callable;
59 59

  
60 60
/**
61 61
 *
......
115 115
  private static final int LIMIT = 5;
116 116
  
117 117
  
118
  private Caller getTupleOrNull(Codes args, int argn) {
118
  private Callable getTupleOrNull(Codes args, int argn) {
119 119
    Code code = args.get(argn);
120 120
    if( code.code()==Code.CONSTANT ) {
121 121
      if( ((Code.Constant)code).value()!=null ) {
......
123 123
      }
124 124
      return null;
125 125
    }
126
    if( code.code()!=Code.CALLER ) {
126
    if( code.code()!=Code.CALLABLE ) {
127 127
      throw new ExpressionRuntimeException("Tupple or null expected in argument "+argn+ " of function '" + FUNCTION_SELECT + "'.");
128 128
    }
129
    Caller caller = (Caller) code;
129
    Callable caller = (Callable) code;
130 130
    if( !StringUtils.equalsIgnoreCase(FUNCTION_TUPLE, caller.name()) ) {
131 131
      throw new ExpressionRuntimeException("Tupple or null expected in argument "+argn+ " of function '" + FUNCTION_SELECT + "'.");
132 132
    }
......
140 140
    Code columns = getTupleOrNull(args, COLUMNS);
141 141
    Code where = args.get(WHERE);
142 142
    Number limit = (Number) getObject(interpreter, args, LIMIT);
143
    Caller order = getTupleOrNull(args, ORDER);
144
    Caller order_mode = getTupleOrNull(args, ORDER_MODE);
143
    Callable order = getTupleOrNull(args, ORDER);
144
    Callable order_mode = getTupleOrNull(args, ORDER_MODE);
145 145
    
146 146
    FeatureQueryOrder queryOrder = null;
147 147
    if( order!=null || order_mode!=null ) {
......
206 206
      CodeBuilder codeBuilder = ExpressionUtils.createCodeBuilder();
207 207
      where.accept((Object o) -> {
208 208
        Code code = (Code) o;
209
        if( code!=null && code.code() == Code.CALLER ) {
210
          Code.Caller caller = (Code.Caller) code;
209
        if( code!=null && code.code() == Code.CALLABLE ) {
210
          Code.Callable caller = (Code.Callable) code;
211 211
          if( StringUtils.equalsIgnoreCase(caller.name(),FUNCTION_GETATTR) ) {
212 212
            Codes args = caller.parameters();
213 213
            Code arg0 = args.get(0);
......
243 243
  }
244 244

  
245 245
  @Override
246
  public Code optimize(Optimizer optimizer, Caller caller) {
246
  public Code optimize(Optimizer optimizer, Callable caller) {
247 247
    return caller; // Don't optimize SELECT
248 248
  }
249 249

  
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/expressionevaluator/impl/grammars/DataAccessGrammarFactory.java
26 26
import java.util.UUID;
27 27
import org.apache.commons.lang3.StringUtils;
28 28
import org.gvsig.expressionevaluator.Code;
29
import org.gvsig.expressionevaluator.Code.Caller;
30 29
import org.gvsig.expressionevaluator.CodeBuilder;
31 30
import org.gvsig.expressionevaluator.Codes;
32 31
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
......
45 44
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
46 45
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
47 46
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
47
import org.gvsig.expressionevaluator.Code.Callable;
48 48

  
49 49
/**
50 50
 *
......
69 69
    public Code build(StatementContext context) {
70 70

  
71 71
      CodeBuilder codeBuilder = context.getCodeBuilder();
72
      Caller code = (Caller) super.build(context);
72
      Callable code = (Callable) super.build(context);
73 73
      BaseCodes args = (BaseCodes) code.parameters();
74 74
      if (args.size() < 2) {
75 75
        String exists_id = "EXISTS" + UUID.randomUUID().toString().replaceAll("-", "");
......
110 110
      if (columns == null) {
111 111
        throw new ExpressionSyntaxException();
112 112
      }
113
      Caller tuple = codeBuilder.tuple();
113
      Callable tuple = codeBuilder.tuple();
114 114
      args.add(tuple);
115 115
      String s = (String) ((Code.Constant) columns).value();
116 116
      if (!StringUtils.equalsIgnoreCase(s, "*")) {
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCHelperBase.java
166 166
    return QUOTE_FOR_USE_IN_STRINGS;
167 167
  }
168 168

  
169
  protected boolean supportCaller(Code.Caller caller) {
169
  protected boolean supportCaller(Code.Callable caller) {
170 170
    if (StringUtils.equalsIgnoreCase(caller.name(), "FOREING_VALUE")) {
171 171
      return true;
172 172
    }
......
229 229
        public void visit(Object code_obj) throws VisitCanceledException, BaseException {
230 230
          Code code = (Code) code_obj;
231 231
          switch (code.code()) {
232
            case Code.CALLER:
233
              Code.Caller caller = (Code.Caller) code;
232
            case Code.CALLABLE:
233
              Code.Callable caller = (Code.Callable) code;
234 234
              if (!supportCaller(caller)) {
235 235
                isCompatible.setValue(false);
236 236
                throw new VisitCanceledException();
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/FeatureAttributeTreeModel.java
11 11
import javax.swing.tree.TreePath;
12 12
import org.apache.commons.lang3.StringUtils;
13 13
import org.gvsig.expressionevaluator.Code;
14
import org.gvsig.expressionevaluator.Code.Caller;
15 14
import org.gvsig.expressionevaluator.Codes;
16 15
import org.gvsig.fmap.dal.DALLocator;
17 16
import org.gvsig.fmap.dal.DataManager;
......
31 30
import org.gvsig.tools.util.LabeledValueImpl;
32 31
import org.slf4j.Logger;
33 32
import org.slf4j.LoggerFactory;
33
import org.gvsig.expressionevaluator.Code.Callable;
34 34

  
35 35
/**
36 36
 *
......
167 167
              if( emulator instanceof FeatureAttributeEmulatorExpression) {
168 168
                FeatureAttributeEmulatorExpression emulatorExp = (FeatureAttributeEmulatorExpression) emulator;
169 169
                Code code = emulatorExp.getExpression().getCode();
170
                if( code.code()==Code.CALLER ) {
171
                  Caller caller = (Caller) code;
170
                if( code.code()==Code.CALLABLE ) {
171
                  Callable caller = (Callable) code;
172 172
                  if( StringUtils.equalsIgnoreCase(caller.name(), "SELECT") ) {
173 173
                    Codes parameters = caller.parameters();
174 174
                    String tableName = (String) ((Code.Identifier)(parameters.get(1))).name();
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/SearchConditionPanelSimplified.java
309 309
  public boolean set(Expression filter) {
310 310
    try {
311 311
      Code code = filter.getCode();
312
      if (code.code() == Code.CALLER) {
312
      if (code.code() == Code.CALLABLE) {
313 313
        SearchConditionFieldController searchField = this.searchFields.get(0);
314
        Code.Caller caller = (Code.Caller) code;
314
        Code.Callable caller = (Code.Callable) code;
315 315
        if (searchField.isAValidRelationOperator(caller.name())) {
316 316
          Code op1 = caller.parameters().get(0);
317 317
          Code op2 = caller.parameters().get(1);

Also available in: Unified diff