Revision 44446

View differences:

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/AbstractLexicalAnalyzer.java
409 409
            }
410 410
            while (true) {
411 411
                if (ch == EOF) {
412
                    throw new ExpressionSyntaxException(I18N.End_of_string_was_expected_and_end_of_source_was_found(), this);        
412
//                    throw new ExpressionSyntaxException(I18N.End_of_string_was_expected_and_end_of_source_was_found(), this);        
413
                    break;
413 414
                }
414 415
                if( !Character.isDigit(ch) ) {
415 416
                    break;
......
422 423
        } else {
423 424
            s_d = 0;
424 425
        }
425
        if( !StringUtils.contains(" \"", ch) ) {
426
        if( ch!=EOF && !StringUtils.contains(" \"", ch) ) {
426 427
            throw new ExpressionSyntaxException(I18N.Expected_XexpectedX_and_found_XfoundX(" ", String.valueOf(ch)), this);
427 428
        }
428 429
        
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/ExpressionEvaluatorManager.java
31 31
    
32 32
    public MutableSymbolTable createSymbolTable();
33 33
    
34
    public SymbolTable getInmutableSymbolTable();
35
    
34 36
    public SymbolTable getSymbolTable(String name);
35 37
    
36 38
    public Collection<SymbolTableFactory> getSymbolTableFactories();
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/ExpressionUtils.java
104 104
        if( StringUtils.isBlank(expression) ) {
105 105
            return null;
106 106
        }
107
        if( symbolTable==null ) {
108
            symbolTable = createSymbolTable();
109
        }
110 107
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
111 108
        Object x = manager.evaluate(symbolTable, expression);
112 109
        return x;
......
229 226
        if( StringUtils.isBlank(s) ) {
230 227
            throw new NumberFormatException("Can't get integer from a blank string.");
231 228
        }
232
        MutableSymbolTable symbolTable = createSymbolTable();
233 229
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
230
        SymbolTable symbolTable = null; //manager.getInmutableSymbolTable();
234 231
        Object x;
235 232
        try {
236 233
            x = manager.evaluate(symbolTable, s);
......
252 249
        if( StringUtils.isBlank(s) ) {
253 250
            throw new NumberFormatException("Can't get long from a blank string.");
254 251
        }
255
        MutableSymbolTable symbolTable = createSymbolTable();
256 252
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
253
        SymbolTable symbolTable = null; //manager.getInmutableSymbolTable();
257 254
        Object x;
258 255
        try {
259 256
            x = manager.evaluate(symbolTable, s);
......
275 272
        if( StringUtils.isBlank(s) ) {
276 273
            throw new NumberFormatException("Can't get double from a blank string.");
277 274
        }
278
        MutableSymbolTable symbolTable = createSymbolTable();
279 275
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
276
        SymbolTable symbolTable = null; //manager.getInmutableSymbolTable();
280 277
        Object x;
281 278
        try {
282 279
            x = manager.evaluate(symbolTable, 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/InmutableSymbolTable.java
1
package org.gvsig.expressionevaluator.impl;
2

  
3
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
4
import org.gvsig.expressionevaluator.SymbolTable;
5
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
6

  
7
/**
8
 *
9
 * @author jjdelcerro
10
 */
11
public class InmutableSymbolTable 
12
        extends AbstractSymbolTable
13
        implements SymbolTable {
14
    
15
    private boolean locked;
16
    public InmutableSymbolTable() {
17
        this.locked = false;
18
        this.init();
19
    }
20
    
21
    private void init() {
22
        DefaultExpressionEvaluatorManager manager = (DefaultExpressionEvaluatorManager) ExpressionEvaluatorLocator.getManager();
23
        manager.populateSymbolTable(this);
24
        this.locked = true;
25
    }
26

  
27
    @Override
28
    public boolean addSymbolTable(SymbolTable symbolTable) {
29
        if( this.locked ) {
30
            throw new UnsupportedOperationException();
31
        }
32
        return super.addSymbolTable(symbolTable); 
33
    }
34

  
35
    @Override
36
    public boolean removeSymbolTable(SymbolTable symbolTable) {
37
        throw new UnsupportedOperationException();
38
    }
39

  
40
    
41
}
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
47 47
    private final Map<String,GrammarFactory> grammarFactories;
48 48
    private Bookmarks<Expression> bookmarks;
49 49
    private History<Expression> history;
50
    private SymbolTable inmutableSymbolTable;
50 51

  
51 52
    public DefaultExpressionEvaluatorManager() {
52 53
        this.symbolTableFactories = new HashMap<>();
......
76 77
            throw new IllegalArgumentException("factory can't be null");
77 78
        }
78 79
        this.symbolTableFactories.put(factory.getName().toUpperCase(),factory);
80
        this.inmutableSymbolTable = null;
79 81
    }
80 82

  
81 83
    @Override
84
    public SymbolTable getInmutableSymbolTable() {
85
        if( this.inmutableSymbolTable==null ) {
86
            this.inmutableSymbolTable = new InmutableSymbolTable();
87
        }
88
        return this.inmutableSymbolTable;
89
    }
90
    
91
    @Override
82 92
    public Object evaluate(String source) {
83 93
        DefaultInterpreter interpreter = new DefaultInterpreter();
84 94
        DefaultCompiler compiler = new DefaultCompiler();
......
91 101
        DefaultInterpreter interpreter = new DefaultInterpreter();
92 102
        DefaultCompiler compiler = new DefaultCompiler();
93 103
        Code code = compiler.compileExpression(source);
94
        interpreter.setSymbolTable(symbolTable);
104
        if( symbolTable!=null ) {
105
            interpreter.setSymbolTable(symbolTable);
106
        }
95 107
        return interpreter.run(code);
96 108
    }
97 109

  
98 110
    @Override
99 111
    public Object evaluate(SymbolTable symbolTable, Code code) {
100 112
        DefaultInterpreter interpreter = new DefaultInterpreter();
101
        interpreter.setSymbolTable(symbolTable);
113
        if( symbolTable!=null ) {
114
            interpreter.setSymbolTable(symbolTable);
115
        }
102 116
        return interpreter.run(code);
103 117
    }
104 118

  

Also available in: Unified diff