Revision 44592

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/TestCreateFunction.java
1
package org.gvsig.expresionevaluator.impl;
2

  
3
import java.net.URL;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.LexicalAnalyzer;
6
import org.gvsig.expressionevaluator.Compiler;
7
import org.gvsig.expressionevaluator.SymbolTable;
8
import org.gvsig.expressionevaluator.Interpreter;
9
import org.gvsig.expressionevaluator.Code;
10
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
11
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
12
import org.gvsig.expressionevaluator.MutableSymbolTable;
13
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
14
import org.gvsig.tools.resourcesstorage.AbstractResourcesStorage;
15
import org.gvsig.tools.resourcesstorage.URLResource;
16

  
17
public class TestCreateFunction extends TestCase {
18

  
19
    private static class Test1ResourcesStorage extends AbstractResourcesStorage {
20

  
21
        public Test1ResourcesStorage() {
22
            
23
        }
24
        
25
        @Override
26
        public Resource getResource(String resourceName) {
27
            URL url = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/"+resourceName+".cosa");
28
            if( url == null ) {
29
                return null;
30
            }
31
            Resource res = new URLResource(url);
32
            return res;
33
        }        
34
    }
35
    
36
    public TestCreateFunction(String testName) {
37
        super(testName);
38
    }
39
    
40
    @Override
41
    protected void setUp() throws Exception {
42
        super.setUp();
43
        new DefaultLibrariesInitializer().fullInitialize();
44
    }
45
    
46
    @Override
47
    protected void tearDown() throws Exception {
48
        super.tearDown();
49
    }
50

  
51
    // TODO add test methods here. The name must begin with 'test'. For example:
52
    // public void testHello() {}
53

  
54
    
55
    protected LexicalAnalyzer createLexicalAnalyzer() {
56
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
57
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
58
        return lexer;
59
    }
60

  
61
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
62
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
63
        Compiler compiler = manager.createCompiler();
64
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
65
        return compiler;
66
    }
67

  
68
    
69
    protected SymbolTable createSymbolTable() {
70
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
71
        MutableSymbolTable symbolTable = manager.createSymbolTable();
72
        symbolTable.setVar("precio", 200);
73
        symbolTable.setVar("1990", 0.168873933773767);
74
        return symbolTable;
75
    }
76
    
77
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
78
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
79
        manager.setScriptsResourcesStorage(new Test1ResourcesStorage());
80
        Interpreter interpreter = manager.createInterpreter();
81
        interpreter.setSymbolTable(symbolTable);
82
        return interpreter;
83
    }
84
    
85
    public void testStringUtilsCapitalize() {
86
        SymbolTable symbolTable = createSymbolTable();
87
        Compiler compiler = createCompiler();
88
        Interpreter interpreter = createInterpreter(symbolTable);
89
        
90
        String source = "BEGIN "
91
                + "CREATE FUNCTION CAPITALIZE(s) AS "
92
                + "'org.apache.commons.lang3.StringUtils', 'capitalize' "
93
                + "LANGUAGE 'java';"
94
                + "CAPITALIZE('hola');"
95
                + "END";
96
        
97
        Code code = compiler.compileExpression(source);
98
        Object v = interpreter.run(code);
99
        assertEquals("Hola", v.toString());
100
    }
101
    
102
    public void testSQRTScriptEngine() {
103
        SymbolTable symbolTable = createSymbolTable();
104
        Compiler compiler = createCompiler();
105
        Interpreter interpreter = createInterpreter(symbolTable);
106
        
107
        String source = "BEGIN "
108
                + "CREATE FUNCTION SQUARE(num) AS 'testlib', 'SQUARE';"
109
                + "SQUARE(4);"
110
                + "END";
111
        
112
        Code code = compiler.compileExpression(source);
113
        Object v = interpreter.run(code);
114
        assertEquals(16, ((Number)v).intValue());
115
    }
116
    
117

  
118

  
119
}
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/TestGrammarCompiler.java
126 126
        Compiler compiler = createCompiler();
127 127

  
128 128
        Code code = compiler.compileExpression(source);
129
        assertEquals("IFF((\"V1\" = 11), LET('V2', 22), NULL)", code.toString());
129
        assertEquals("IFF((\"V1\" = 11), LET('V2', 22))", code.toString());
130 130
    }
131 131

  
132 132
    public void testIfThenElse() {
......
144 144
        Compiler compiler = createCompiler();
145 145

  
146 146
        Code code = compiler.compileExpression(source);
147
        assertEquals("IFF((\"V1\" = 11), BLOCK(LET('V2', 22), LET('V1', 10)), NULL)", code.toString());
147
        assertEquals("IFF((\"V1\" = 11), BLOCK(LET('V2', 22), LET('V1', 10)))", code.toString());
148 148
    }
149 149

  
150 150
    public void testWhile() {
......
243 243
        Compiler compiler = createCompiler();
244 244

  
245 245
        Code code = compiler.compileExpression(source);
246
        assertEquals("CASE(((\"Field_1\" >= 75) AND (\"Field_1\" <= 79)), ((\"Field_1\" >= 80) AND (\"Field_1\" <= 84)), 100, 110, NULL)", code.toString());
246
        assertEquals("CASE(((\"Field_1\" >= 75) AND (\"Field_1\" <= 79)), ((\"Field_1\" >= 80) AND (\"Field_1\" <= 84)), 100, 110)", code.toString());
247 247
    }
248 248
    
249 249
    public void testCase3() {
......
261 261
        Compiler compiler = createCompiler();
262 262

  
263 263
        Code code = compiler.compileExpression(source);
264
        assertEquals("CREATE_FUNCTION('test1', NULL, print('Hola'), NULL, NULL, NULL)", code.toString());
264
        assertEquals("CREATE_FUNCTION('test1', print('Hola'))", code.toString());
265 265
    }
266 266
    
267 267
    public void testDef2() {
......
270 270
        Compiler compiler = createCompiler();
271 271

  
272 272
        Code code = compiler.compileExpression(source);
273
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(('Hola ' + \"nombre\")), NULL, NULL, NULL)", code.toString());
273
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(('Hola ' + \"nombre\")))", code.toString());
274 274
    }
275 275

  
276 276
    public void testDef3() {
......
279 279
        Compiler compiler = createCompiler();
280 280

  
281 281
        Code code = compiler.compileExpression(source);
282
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), RETURN(('Hola ' || \"nombre\")), NULL, NULL, NULL)", code.toString());
282
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), RETURN(('Hola ' || \"nombre\")))", code.toString());
283 283
    }
284 284
    
285 285
    public void testCreateFunctionExtern1() {
286
        String source = "CREATE FUNCTION test1(nombre) AS 'addons/test/test', test1";
286
        String source = "CREATE FUNCTION test1(nombre) AS 'addons/test/test', 'test1' LANGUAGE 'cosa'";
287 287

  
288 288
        Compiler compiler = createCompiler();
289 289

  
290 290
        Code code = compiler.compileExpression(source);
291
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), NULL, 'addons/test/test', 'test1', NULL)", code.toString());
291
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), 'addons/test/test', 'test1', 'cosa')", code.toString());
292 292
    }
293 293
    
294 294
    public void testList() {
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/TestScript1.java
4 4
import junit.framework.TestCase;
5 5
import org.apache.commons.io.IOUtils;
6 6
import org.apache.commons.lang3.StringUtils;
7
import org.gvsig.expressionevaluator.Expression;
8 7
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9 8
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10 9
import org.gvsig.expressionevaluator.impl.javascripting.CosaScriptEngineFactory;
......
31 30
    // TODO add test methods here. The name must begin with 'test'. For example:
32 31
    // public void testHello() {}
33 32
    public void testScript1() throws Exception {
34
        InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_1.txt").openStream();
33
        InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_1."+CosaScriptEngineFactory.LANGUAGE_NAME).openStream();
35 34
        String source = StringUtils.join(IOUtils.readLines(is), "\n");
36 35
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
37 36

  
......
51 50
    }
52 51

  
53 52
    public void testScript2() throws Exception {
54
        InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2.txt").openStream();
53
        InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2."+CosaScriptEngineFactory.LANGUAGE_NAME).openStream();
55 54
        String source = StringUtils.join(IOUtils.readLines(is), "\n");
56 55
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
57 56

  
......
72 71
    }
73 72

  
74 73
    public void testScript3() throws Exception {
75
        InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2.txt").openStream();
74
        InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2."+CosaScriptEngineFactory.LANGUAGE_NAME).openStream();
76 75
        String source = StringUtils.join(IOUtils.readLines(is), "\n");
77 76
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
78 77

  
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_1.txt
1

  
2
create procedure form_onSetvalues form, values as
3
begin
4
  print("form_onSetvalues");
5
end 
6

  
7
create procedure form_onFieldEnter form, field as
8
begin
9
  print("form_onFieldEnter");
10
end 
11

  
12
create procedure form_onFieldExit form, field as
13
begin
14
  print("form_onFieldExit");
15
end 
16

  
17
create procedure form_onFieldChanged form, field as
18
begin
19
  print("form_onFieldChanged");
20
end 
21

  
22
create function form_validate form as
23
$$
24
  return true;
25
$$ 
26

  
27
create procedure form_onLoad form as
28
$$
29
  print("form_onLoad");
30
$$
31

  
32
create procedure form_clear form as
33
$$
34
  print("form_clear");
35
$$
36

  
37
create function form_isReadOnly form as
38
begin
39
    if not user().isAuthenticated() then
40
      return true;
41
    end if
42
    return false;
43
    -- set fecha_accidente = form.getField('FECHA_ACCIDENTE').getValue();
44
    -- if fecha_accidente = null then
45
    --   return false;
46
    -- end if
47
    -- set fecha_de_cierre = application().getProperty('CEGESEV.accidentes.fecha_de_cierre');
48
    -- if fecha_de_cierre = null then
49
    --   return true;
50
    -- end if
51
    -- return Date(fecha_de_cierre) > Date(fecha_accidente);
52
end 
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_2.txt
1

  
2
CREATE FUNCTION test1 AS
3
BEGIN
4
    SET x  ''; 
5
    FOR n IN LIST('hola','adios','fin'):
6
        SET x = x || ' ' || n; 
7
    END 
8
    RETURN x;
9
END
10

  
11
CREATE FUNCTION test2 AS
12
$$
13
    SET s  ''; 
14
    SET x TO LIST('hola','adios','fin'); 
15
    FOR n IN RANGE(3):
16
        SET s = s || ' ' || x[n]; 
17
    END FOR;
18
    RETURN s;
19
$$
20

  
21
CREATE FUNCTION saluda AS
22
BEGIN
23
    IF LEN($ARGS) > 0 THEN
24
        SET s TO 'Hola ' || $ARGS[0];
25
    ELSE
26
        SET s = 'Hola.';
27
    END;
28
    PRINT(s);
29
    RETURN s;
30
END
31

  
32
CREATE FUNCTION test3 AS
33
BEGIN 
34
    RETURN saluda('amigos');
35
END
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_1.cosa
1
-- encoding: utf-8; lang: cosa
2

  
3
create procedure form_onSetvalues form, values as
4
begin
5
  print("form_onSetvalues");
6
end 
7

  
8
create procedure form_onFieldEnter form, field as
9
begin
10
  print("form_onFieldEnter");
11
end 
12

  
13
create procedure form_onFieldExit form, field as
14
begin
15
  print("form_onFieldExit");
16
end 
17

  
18
create procedure form_onFieldChanged form, field as
19
begin
20
  print("form_onFieldChanged");
21
end 
22

  
23
create function form_validate form as
24
$$
25
  return true;
26
$$ 
27

  
28
create procedure form_onLoad form as
29
$$
30
  print("form_onLoad");
31
$$
32

  
33
create procedure form_clear form as
34
$$
35
  print("form_clear");
36
$$
37

  
38
create function form_isReadOnly form as
39
begin
40
    if not user().isAuthenticated() then
41
      return true;
42
    end if
43
    return false;
44
    -- set fecha_accidente = form.getField('FECHA_ACCIDENTE').getValue();
45
    -- if fecha_accidente = null then
46
    --   return false;
47
    -- end if
48
    -- set fecha_de_cierre = application().getProperty('CEGESEV.accidentes.fecha_de_cierre');
49
    -- if fecha_de_cierre = null then
50
    --   return true;
51
    -- end if
52
    -- return Date(fecha_de_cierre) > Date(fecha_accidente);
53
end 
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_2.cosa
1
-- encoding: utf-8; lang: cosa
2

  
3
CREATE FUNCTION test1 AS
4
BEGIN
5
    SET x  ''; 
6
    FOR n IN LIST('hola','adios','fin'):
7
        SET x = x || ' ' || n; 
8
    END 
9
    RETURN x;
10
END
11

  
12
CREATE FUNCTION test2 AS
13
$$
14
    SET s  ''; 
15
    SET x TO LIST('hola','adios','fin'); 
16
    FOR n IN RANGE(3):
17
        SET s = s || ' ' || x[n]; 
18
    END FOR;
19
    RETURN s;
20
$$
21

  
22
CREATE FUNCTION saluda AS
23
BEGIN
24
    IF LEN($ARGS) > 0 THEN
25
        SET s TO 'Hola ' || $ARGS[0];
26
    ELSE
27
        SET s = 'Hola.';
28
    END;
29
    PRINT(s);
30
    RETURN s;
31
END
32

  
33
CREATE FUNCTION test3 AS
34
BEGIN 
35
    RETURN saluda('amigos');
36
END
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/testlib.cosa
1
-- encoding: utf-8; lang: cosa
2

  
3
CREATE FUNCTION SQUARE(num) AS
4
BEGIN
5
    RETURN num*num;
6
END
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
361 361

  
362 362
    }
363 363

  
364
    private static final Pattern RE_LANG = Pattern.compile(".*lang[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)");
365
    private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)");
364
    private static final Pattern RE_LANG = Pattern.compile(".*lang[:]\\s*([a-zA-Z_][a-zA-Z_0-9_]*).*");
365
    private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*([a-zA-Z_][a-zA-Z0-9_-]*).*");
366 366
    
367 367
    private Script loadScript(ResourcesStorage.Resource res, String name) {
368 368
        try {
......
376 376
            if( StringUtils.isEmpty(head) ) {
377 377
                return null;
378 378
            }
379
            head = StringUtils.split("\n")[0];
379
            head = StringUtils.split(head, "\n")[0];
380 380
            
381 381
            String lang = "cosa";
382 382
            String encoding = null;
383 383
            Matcher m = RE_LANG.matcher(head);
384
            if( m.groupCount()==1 ) {
384
            if( m!=null && m.matches() && m.groupCount()==1 ) {
385 385
                String s = m.group(1);
386 386
                if( !StringUtils.isBlank(s) ) {
387 387
                    lang = s;
388 388
                }
389 389
            }
390 390
            m = RE_ENCODING.matcher(head);
391
            if( m.groupCount()==1 ) {
391
            if( m!=null && m.matches() && m.groupCount()==1 ) {
392 392
                String s = m.group(1);
393 393
                if( !StringUtils.isBlank(s) ) {
394 394
                    encoding = s;
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/ExpressionEvaluatorImplLibrary.java
20 20
import org.gvsig.tools.dataTypes.DataTypesManager;
21 21
import org.gvsig.tools.library.AbstractLibrary;
22 22
import org.gvsig.tools.library.LibraryException;
23
import org.gvsig.tools.script.impl.DummyScriptManager;
23 24

  
24 25
public class ExpressionEvaluatorImplLibrary extends AbstractLibrary {
25 26

  
......
55 56

  
56 57
        dataTypesManager.setCoercion(DataTypes.EXPRESSION, new CoerceToExpression());
57 58
        dataTypesManager.addCoercion(DataTypes.STRING,new CoerceToString());
59
        
60
        ToolsLocator.registerScriptManager(DefaultExpressionEvaluatorManager.class);
58 61
    }
59 62
}
60 63

  
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
191 191
                    .addRuleOnTrue(stmt.optional_any_token("FUNCTION", "PROCEDURE"))
192 192
                    .addRuleOnFalse(stmt.optional_literal_string("SCRIPT_PATH")
193 193
                        .addRuleOnTrue(stmt.require_any_token(","))
194
                        .addRuleOnTrue(stmt.require_identifier("SCRIPT_FUNCTION"))
194
                        .addRuleOnTrue(stmt.require_literal_string("SCRIPT_FUNCTION"))
195 195
                        .addRuleOnTrue(stmt.optional_any_token("LANGUAGE")
196 196
                                .addRuleOnTrue(stmt.require_literal_string("LANGUAGE"))
197 197
                        )
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/programming/CreateFnFunction.java
67 67
        String script_path = null;
68 68
        String script_function = null;
69 69
        String language = null;
70
        // name, body
71
        // name, args, body
72
        // name, script_name, script_func, lang
73
        // name, args, script_name, script_func, lang
70 74
        switch(args.size()) {
71 75
            case 2:
72 76
                name = (String) getObject(interpreter, args, 0);
......
90 94
                    argNames = (List<String>) getObject(interpreter, args, 1);
91 95
                }
92 96
                body = args.get(2);
93
                script_path = Objects.toString(args.get(2),null);
94
                script_function = Objects.toString(args.get(3),null);
95
                language = Objects.toString(args.get(4),null);
97
                script_path = (args.get(3)==null)? null:((String)((Code.Constant)args.get(3)).value());
98
                script_function = (args.get(4)==null)? null:((String)((Code.Constant)args.get(4)).value());
99
                language = (args.get(5)==null)? null:((String)((Code.Constant)args.get(5)).value()).toLowerCase();
96 100
                break;
97 101
            default:
98 102
                throw new ExpressionRuntimeException("Incorrect number of arguments");
......
171 175

  
172 176
        private final String script_path;
173 177
        private final String script_function;
178
        private final Script script;
174 179

  
175 180
        public ExternalFunction(String name, String script_path, String script_function) {
176 181
            super(GROUP_OTHER, name, Range.between(0, Integer.MAX_VALUE));
177 182
            this.script_path = script_path;
178 183
            this.script_function = script_function;
179
        }
180
        
181
        @Override
182
        public Object call(Interpreter interpreter, Object[] args) throws Exception {
183 184
            ScriptManager scriptManager = ToolsLocator.getScriptManager();
184 185
            ExpressionEvaluatorManager expressionManager = ExpressionEvaluatorLocator.getExpressionEvaluatorManager();
185 186
            ResourcesStorage resourcesStorage = expressionManager.getScriptsResourcesStorage();
186
            Script sc = scriptManager.loadScript(resourcesStorage, script_path);
187
            if( sc == null ) {
187
            this.script = scriptManager.loadScript(resourcesStorage, script_path);
188
            if( this.script == null ) {
188 189
                throw new ExpressionRuntimeException("Can't locate '"+this.script_path+"'.");
189 190
            }
190
            Object r = sc.invokeFunction(this.script_function, args);
191
        }
192
        
193
        @Override
194
        public Object call(Interpreter interpreter, Object[] args) throws Exception {
195
            Object r = this.script.invokeFunction(this.script_function, args);
191 196
            return r;
192 197
        }
193 198
        
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
117 117
                        context.getLexicalAnalyzer()
118 118
                );
119 119
            }
120
            String identifier = (String) token.getLiteral();
120
            String identifier = (String) token.getValue();
121 121
            Code code = context.getCodeBuilder().constant(identifier);
122 122
            context.setCode(id, code);
123 123
            context.next_token();
......
398 398
        public void parse(StatementContext context) {
399 399
            Token token = context.look_token();
400 400
            if (token.getType() == Token.STRING_LITERAL) {
401
                String s = (String) token.getLiteral();
401
                String s = (String) token.getValue();
402 402
                Code code = context.getCodeBuilder().constant(s);
403 403
                context.setCode(id, code);
404 404
                context.next_token();
......
439 439
                    }
440 440
                } else {
441 441
                    Code code = context.getCode(argName);
442
                    if( code == null) {
443
                        code = context.getCodeBuilder().constant(null);
444
                    }
442
//                    if( code == null) {
443
//                        code = context.getCodeBuilder().constant(null);
444
//                    }
445 445
                    args.add(code);
446 446
                }
447 447
            }
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/spi/AbstractFunction.java
249 249
            throw new IllegalArgumentException(I18N.Required_argument_XargnX_and_only_found_XargcX_in_call_to_XIdentifierX(name(), args.size(), n));
250 250
        }
251 251
        Code arg = args.get(n);
252
        if( arg==null ) {
253
            return null;
254
        }
252 255
        Object value = interpreter.run(arg);
253 256
        return value;
254 257
    }

Also available in: Unified diff