Revision 44389 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

View differences:

DefaultInterpreter.java
1 1
package org.gvsig.expressionevaluator.impl;
2 2

  
3
import java.io.OutputStreamWriter;
4
import java.io.Writer;
3 5
import java.util.ArrayList;
4 6
import java.util.Comparator;
5 7
import java.util.Date;
......
18 20
import org.gvsig.expressionevaluator.Codes;
19 21
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
20 22
import org.gvsig.expressionevaluator.Function;
23
import org.gvsig.expressionevaluator.MutableSymbolTable;
21 24
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.RecursionControlSupport;
22 25
import org.gvsig.expressionevaluator.impl.function.operator.BinaryOperator;
23 26
import org.gvsig.expressionevaluator.impl.function.operator.UnaryOperator;
24 27
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException;
25 28
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
29
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
26 30

  
27 31
public class DefaultInterpreter implements Interpreter {
28 32

  
......
89 93
    private Cache cache;
90 94
    private int maxRecursionLimit;
91 95
    private boolean sqlCompatible = false;
96
    private Writer writer ;
97
    private ResourcesStorage resourcesStorage;
92 98

  
93 99
    public DefaultInterpreter() {
94 100
        this.cache = new DefaultCache();
95 101
        this.maxRecursionLimit = DEFAULT_MAX_RECURSION_LIMIT;
102
        this.writer = new OutputStreamWriter(System.out);
103
        this.resourcesStorage = ResourcesStorage.EMPTY_RESOURCESSTORAGE;
96 104
    }
97 105

  
98 106
    @Override
......
104 112
        }
105 113
        return other;
106 114
    }
115

  
116
    @Override
117
    public ResourcesStorage getResourcesStorage() {
118
        return resourcesStorage;
119
    }
120

  
121
    @Override
122
    public void setResourcesStorage(ResourcesStorage resourcesStorage) {
123
        if( resourcesStorage==null ) {
124
            this.resourcesStorage = ResourcesStorage.EMPTY_RESOURCESSTORAGE;
125
        } else {
126
            this.resourcesStorage = resourcesStorage;
127
        }
128
    }
107 129
    
108 130
    @Override
131
    public Writer getWriter() {
132
        return this.writer;
133
    }
134
    
135
    @Override
136
    public void setWriter(Writer writer) {
137
        if( writer == null ) {
138
            writer = new OutputStreamWriter(System.out);
139
        }
140
        this.writer = writer;
141
    }
142

  
143
    @Override
144
    public Object call(SymbolTable symbolTable, String funcname, Object... args) throws Exception {
145
        SymbolTable savedSymbolTable = this.symbolTable;
146
        try {
147
            symbolTable.addSymbolTable(this.symbolTable);
148
            this.symbolTable = symbolTable;
149
            return this.call(funcname, args);
150
        } finally {
151
            this.symbolTable = savedSymbolTable;
152
            symbolTable.removeSymbolTable(this.symbolTable);
153
        }
154
    }
155
    
156
    @Override
109 157
    public Object call(String function, Object... args) throws Exception {
110 158
        Function fn = this.symbolTable.function(function);
111 159
        Object value = fn.call(this, args);
......
114 162

  
115 163
    @Override
116 164
    public boolean hasFunction(String function) {
117
        Function fn = this.symbolTable.function(function);
165
        Function fn = this.getSymbolTable().function(function);
118 166
        if( fn == null ) {
119 167
            return false;
120 168
        }
......
170 218
    }
171 219

  
172 220
    @Override
221
    public void run(MutableSymbolTable symbolTable, Code code) {
222
        SymbolTable savedSymbolTable = this.symbolTable;
223
        try {
224
            symbolTable.addSymbolTable(this.symbolTable);
225
            this.symbolTable = symbolTable;
226
            this.run(code);
227
        } finally {
228
            this.symbolTable = savedSymbolTable;
229
            symbolTable.removeSymbolTable(this.symbolTable);
230
        }
231
    }
232
    
233
    @Override
173 234
    public Object run(Code code) {
174 235
        try {
175 236
            return this.runCode(code);

Also available in: Unified diff