Statistics
| Revision:

svn-gvsig-desktop / 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 @ 44340

History | View | Annotate | Download (7.62 KB)

1 43521 jjdelcerro
package org.gvsig.expressionevaluator.impl;
2
3 44339 jjdelcerro
import java.io.InputStream;
4
import java.net.URI;
5
import java.net.URL;
6 44139 jjdelcerro
import org.gvsig.expressionevaluator.Grammar;
7
import org.gvsig.expressionevaluator.GrammarFactory;
8 43983 jjdelcerro
import java.util.Collection;
9 43939 jjdelcerro
import java.util.HashMap;
10
import java.util.Map;
11 44339 jjdelcerro
import org.apache.commons.io.FilenameUtils;
12
import org.apache.commons.io.IOUtils;
13 44263 jjdelcerro
import org.gvsig.expressionevaluator.Bookmarks;
14 43521 jjdelcerro
import org.gvsig.expressionevaluator.Code;
15
import org.gvsig.expressionevaluator.CodeBuilder;
16 43983 jjdelcerro
import org.gvsig.expressionevaluator.Expression;
17 44006 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionBuilder;
18 43521 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
19
import org.gvsig.expressionevaluator.Interpreter;
20
import org.gvsig.expressionevaluator.LexicalAnalyzer;
21
import org.gvsig.expressionevaluator.MutableSymbolTable;
22 44009 jjdelcerro
import org.gvsig.expressionevaluator.Optimizer;
23 43521 jjdelcerro
import org.gvsig.expressionevaluator.SymbolTable;
24 44126 jjdelcerro
import org.gvsig.expressionevaluator.SymbolTableFactory;
25 44139 jjdelcerro
import org.gvsig.expressionevaluator.Compiler;
26
import org.gvsig.expressionevaluator.GrammarSet;
27 44263 jjdelcerro
import org.gvsig.expressionevaluator.History;
28 44339 jjdelcerro
import org.gvsig.tools.script.Script;
29 44006 jjdelcerro
import org.slf4j.Logger;
30
import org.slf4j.LoggerFactory;
31 43521 jjdelcerro
32
33 44339 jjdelcerro
@SuppressWarnings("UseSpecificCatch")
34 43521 jjdelcerro
public class DefaultExpressionEvaluatorManager implements ExpressionEvaluatorManager {
35
36 44006 jjdelcerro
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExpressionEvaluatorManager.class);
37
38 43521 jjdelcerro
    private Double accuracy;
39 44126 jjdelcerro
    private final Map<String,SymbolTableFactory>symbolTableFactories;
40 44139 jjdelcerro
    private final Map<String,GrammarFactory> grammarFactories;
41 44263 jjdelcerro
    private Bookmarks bookmarks;
42
    private History history;
43 43521 jjdelcerro
44
    public DefaultExpressionEvaluatorManager() {
45 44126 jjdelcerro
        this.symbolTableFactories = new HashMap<>();
46 44139 jjdelcerro
        this.grammarFactories = new HashMap<>();
47 43939 jjdelcerro
    }
48
49 43521 jjdelcerro
    @Override
50 43983 jjdelcerro
    public SymbolTable getSymbolTable(String name) {
51 44126 jjdelcerro
        if( name == null ) {
52
            return null;
53
        }
54
        SymbolTableFactory factory = this.symbolTableFactories.get(name.toUpperCase());
55
        if( factory == null ) {
56
            return null;
57
        }
58
        return factory.createSymbolTable();
59 43939 jjdelcerro
    }
60
61
    @Override
62 44126 jjdelcerro
    public Collection<SymbolTableFactory> getSymbolTableFactories() {
63
        return this.symbolTableFactories.values();
64 43939 jjdelcerro
    }
65
66
    @Override
67 44126 jjdelcerro
    public final void registerSymbolTable(SymbolTableFactory factory) {
68
        if( factory == null ) {
69
            throw new IllegalArgumentException("factory can't be null");
70 44006 jjdelcerro
        }
71 44126 jjdelcerro
        this.symbolTableFactories.put(factory.getName().toUpperCase(),factory);
72 43939 jjdelcerro
    }
73 43987 jjdelcerro
74 43939 jjdelcerro
    @Override
75 43521 jjdelcerro
    public Object evaluate(String source) {
76
        DefaultInterpreter interpreter = new DefaultInterpreter();
77
        DefaultCompiler compiler = new DefaultCompiler();
78
        Code code = compiler.compileExpression(source);
79
        return interpreter.run(code);
80
    }
81
82
    @Override
83
    public Object evaluate(SymbolTable symbolTable, String source) {
84
        DefaultInterpreter interpreter = new DefaultInterpreter();
85
        DefaultCompiler compiler = new DefaultCompiler();
86
        Code code = compiler.compileExpression(source);
87
        interpreter.setSymbolTable(symbolTable);
88
        return interpreter.run(code);
89
    }
90
91
    @Override
92
    public Object evaluate(SymbolTable symbolTable, Code code) {
93
        DefaultInterpreter interpreter = new DefaultInterpreter();
94
        interpreter.setSymbolTable(symbolTable);
95
        return interpreter.run(code);
96
    }
97
98
    @Override
99
    public Code compile(String source) {
100 44139 jjdelcerro
        Compiler compiler = this.createCompiler();
101 43521 jjdelcerro
        return compiler.compileExpression(source);
102
    }
103
104
    @Override
105
    public Code compile(LexicalAnalyzer lex, String source) {
106 44139 jjdelcerro
        Compiler compiler = this.createCompiler();
107 43521 jjdelcerro
        compiler.setLexicalAnalyzer(lex);
108
        return compiler.compileExpression(source);
109
    }
110
111
    @Override
112 44019 jjdelcerro
    public Code optimize(SymbolTable symbolTable, Code code) {
113
        Optimizer optimizer = this.createOptimizer();
114
        return optimizer.optimize(symbolTable, code);
115
    }
116
117
    @Override
118 43521 jjdelcerro
    public MutableSymbolTable createSymbolTable() {
119 43987 jjdelcerro
        DefaultSymbolTable theSymbolTable = new DefaultSymbolTable();
120
        return theSymbolTable;
121 43521 jjdelcerro
    }
122 43939 jjdelcerro
123 43987 jjdelcerro
    public void populateSymbolTable(SymbolTable aSymbolTable) {
124 44126 jjdelcerro
        for (SymbolTableFactory factory : this.getSymbolTableFactories() ) {
125
            if( factory.isAutoload() ) {
126
                SymbolTable symbolTable = factory.createSymbolTable();
127 43987 jjdelcerro
                aSymbolTable.addSymbolTable(symbolTable);
128
            }
129
        }
130
    }
131
132 43521 jjdelcerro
    @Override
133
    public LexicalAnalyzer createLexicalAnalyzer() {
134
        return new SQLLexicalAnalyzer();
135
    }
136
137
    @Override
138
    public CodeBuilder createCodeBuilder() {
139
        return new DefaultCodeBuilder();
140
    }
141
142
    @Override
143
    public Compiler createCompiler() {
144 44139 jjdelcerro
        DefaultCompiler compiler = new DefaultCompiler();
145
        this.populateGrammars(compiler);
146
        return  compiler;
147 43521 jjdelcerro
    }
148
149
    @Override
150
    public Interpreter createInterpreter() {
151
        return new DefaultInterpreter();
152
    }
153
154
    @Override
155
    public Double getAccuracy() {
156
        return this.accuracy;
157
    }
158
159
    @Override
160
    public void setAccuracy(Double accuracy) {
161
        this.accuracy = accuracy;
162
    }
163 43983 jjdelcerro
164
    @Override
165
    public Expression createExpression() {
166
        DefaultExpression e = new DefaultExpression();
167
        return e;
168
    }
169 44006 jjdelcerro
170
    @Override
171
    public ExpressionBuilder createExpressionBuilder() {
172
        ExpressionBuilder x = new DefaultExpressionBuilder();
173
        return x;
174
    }
175 44009 jjdelcerro
176
    @Override
177
    public Optimizer createOptimizer() {
178
        Optimizer x = new DefaultOptimizer();
179
        return x;
180
    }
181 44139 jjdelcerro
182
    @Override
183
    public void registerGrammar(GrammarFactory factory) {
184
        if( factory==null ) {
185
            throw new IllegalArgumentException("factory can't be null");
186
        }
187
        this.grammarFactories.put(factory.getName(), factory);
188
    }
189
190
    @Override
191
    public Collection<GrammarFactory> getGrammarFactories() {
192
        return this.grammarFactories.values();
193
    }
194
195
    public void populateGrammars(Compiler compiler) {
196
        GrammarSet grammarSet = compiler.getGrammars();
197
        for (GrammarFactory factory : this.getGrammarFactories() ) {
198
            if( factory.isAutoload() ) {
199
                Grammar grammar = factory.createGrammar();
200
                grammarSet.add(grammar);
201
            }
202
        }
203
    }
204
205 44263 jjdelcerro
    @Override
206 44139 jjdelcerro
    public Grammar createGrammar(String name) {
207
        DefaultGrammar grammar = new DefaultGrammar(name);
208
        return grammar;
209
    }
210 44263 jjdelcerro
211
    @Override
212
    public Bookmarks getBookmarks() {
213
        if( this.bookmarks==null ) {
214
            this.bookmarks = new DefaultBookmarks();
215
        }
216
        return this.bookmarks;
217
    }
218
219
    @Override
220
    public History getHistory() {
221
        if( this.history==null ) {
222
            this.history = new DefaultHistory(20);
223
        }
224
        return this.history;
225
    }
226 44339 jjdelcerro
227
    @Override
228
    public Script createScript(String name, String code, String languaje) {
229
        SimpleScript sc = new SimpleScript(name, code);
230
        return sc;
231
    }
232
233
    @Override
234
    public Script locateScript(String name) {
235
        return null;
236
    }
237
238
    @Override
239
    public Script loadScript(URI location) {
240
        InputStream is = null;
241
        String code = null;
242
        String name = null;
243
        try {
244
            URL url = location.toURL();
245
            is = url.openStream();
246
            code = IOUtils.toString(is);
247
            name = FilenameUtils.getBaseName(location.getPath());
248
        } catch(Exception ex) {
249
            return null;
250
        } finally {
251
            IOUtils.closeQuietly(is);
252
        }
253
        return this.createScript(name, code, "COSA");
254
    }
255
256 43521 jjdelcerro
}