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