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

History | View | Annotate | Download (6.08 KB)

1 43521 jjdelcerro
package org.gvsig.expressionevaluator.impl;
2
3 44139 jjdelcerro
import org.gvsig.expressionevaluator.Grammar;
4
import org.gvsig.expressionevaluator.GrammarFactory;
5 43983 jjdelcerro
import java.util.Collection;
6 43939 jjdelcerro
import java.util.HashMap;
7
import java.util.Map;
8 43521 jjdelcerro
import org.gvsig.expressionevaluator.Code;
9
import org.gvsig.expressionevaluator.CodeBuilder;
10 43983 jjdelcerro
import org.gvsig.expressionevaluator.Expression;
11 44006 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionBuilder;
12 43521 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
13
import org.gvsig.expressionevaluator.Interpreter;
14
import org.gvsig.expressionevaluator.LexicalAnalyzer;
15
import org.gvsig.expressionevaluator.MutableSymbolTable;
16 44009 jjdelcerro
import org.gvsig.expressionevaluator.Optimizer;
17 43521 jjdelcerro
import org.gvsig.expressionevaluator.SymbolTable;
18 44126 jjdelcerro
import org.gvsig.expressionevaluator.SymbolTableFactory;
19 44139 jjdelcerro
import org.gvsig.expressionevaluator.Compiler;
20
import org.gvsig.expressionevaluator.GrammarSet;
21 44006 jjdelcerro
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23 43521 jjdelcerro
24
25
public class DefaultExpressionEvaluatorManager implements ExpressionEvaluatorManager {
26
27 44006 jjdelcerro
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExpressionEvaluatorManager.class);
28
29 43521 jjdelcerro
    private Double accuracy;
30 44126 jjdelcerro
    private final Map<String,SymbolTableFactory>symbolTableFactories;
31 44139 jjdelcerro
    private final Map<String,GrammarFactory> grammarFactories;
32 43521 jjdelcerro
33
    public DefaultExpressionEvaluatorManager() {
34 44126 jjdelcerro
        this.symbolTableFactories = new HashMap<>();
35 44139 jjdelcerro
        this.grammarFactories = new HashMap<>();
36 43939 jjdelcerro
    }
37
38 43521 jjdelcerro
    @Override
39 43983 jjdelcerro
    public SymbolTable getSymbolTable(String name) {
40 44126 jjdelcerro
        if( name == null ) {
41
            return null;
42
        }
43
        SymbolTableFactory factory = this.symbolTableFactories.get(name.toUpperCase());
44
        if( factory == null ) {
45
            return null;
46
        }
47
        return factory.createSymbolTable();
48 43939 jjdelcerro
    }
49
50
    @Override
51 44126 jjdelcerro
    public Collection<SymbolTableFactory> getSymbolTableFactories() {
52
        return this.symbolTableFactories.values();
53 43939 jjdelcerro
    }
54
55
    @Override
56 44126 jjdelcerro
    public final void registerSymbolTable(SymbolTableFactory factory) {
57
        if( factory == null ) {
58
            throw new IllegalArgumentException("factory can't be null");
59 44006 jjdelcerro
        }
60 44126 jjdelcerro
        this.symbolTableFactories.put(factory.getName().toUpperCase(),factory);
61 43939 jjdelcerro
    }
62 43987 jjdelcerro
63 43939 jjdelcerro
    @Override
64 43521 jjdelcerro
    public Object evaluate(String source) {
65
        DefaultInterpreter interpreter = new DefaultInterpreter();
66
        DefaultCompiler compiler = new DefaultCompiler();
67
        Code code = compiler.compileExpression(source);
68
        return interpreter.run(code);
69
    }
70
71
    @Override
72
    public Object evaluate(SymbolTable symbolTable, String source) {
73
        DefaultInterpreter interpreter = new DefaultInterpreter();
74
        DefaultCompiler compiler = new DefaultCompiler();
75
        Code code = compiler.compileExpression(source);
76
        interpreter.setSymbolTable(symbolTable);
77
        return interpreter.run(code);
78
    }
79
80
    @Override
81
    public Object evaluate(SymbolTable symbolTable, Code code) {
82
        DefaultInterpreter interpreter = new DefaultInterpreter();
83
        interpreter.setSymbolTable(symbolTable);
84
        return interpreter.run(code);
85
    }
86
87
    @Override
88
    public Code compile(String source) {
89 44139 jjdelcerro
        Compiler compiler = this.createCompiler();
90 43521 jjdelcerro
        return compiler.compileExpression(source);
91
    }
92
93
    @Override
94
    public Code compile(LexicalAnalyzer lex, String source) {
95 44139 jjdelcerro
        Compiler compiler = this.createCompiler();
96 43521 jjdelcerro
        compiler.setLexicalAnalyzer(lex);
97
        return compiler.compileExpression(source);
98
    }
99
100
    @Override
101 44019 jjdelcerro
    public Code optimize(SymbolTable symbolTable, Code code) {
102
        Optimizer optimizer = this.createOptimizer();
103
        return optimizer.optimize(symbolTable, code);
104
    }
105
106
    @Override
107 43521 jjdelcerro
    public MutableSymbolTable createSymbolTable() {
108 43987 jjdelcerro
        DefaultSymbolTable theSymbolTable = new DefaultSymbolTable();
109
        return theSymbolTable;
110 43521 jjdelcerro
    }
111 43939 jjdelcerro
112 43987 jjdelcerro
    public void populateSymbolTable(SymbolTable aSymbolTable) {
113 44126 jjdelcerro
        for (SymbolTableFactory factory : this.getSymbolTableFactories() ) {
114
            if( factory.isAutoload() ) {
115
                SymbolTable symbolTable = factory.createSymbolTable();
116 43987 jjdelcerro
                aSymbolTable.addSymbolTable(symbolTable);
117
            }
118
        }
119
    }
120
121 43521 jjdelcerro
    @Override
122
    public LexicalAnalyzer createLexicalAnalyzer() {
123
        return new SQLLexicalAnalyzer();
124
    }
125
126
    @Override
127
    public CodeBuilder createCodeBuilder() {
128
        return new DefaultCodeBuilder();
129
    }
130
131
    @Override
132
    public Compiler createCompiler() {
133 44139 jjdelcerro
        DefaultCompiler compiler = new DefaultCompiler();
134
        this.populateGrammars(compiler);
135
        return  compiler;
136 43521 jjdelcerro
    }
137
138
    @Override
139
    public Interpreter createInterpreter() {
140
        return new DefaultInterpreter();
141
    }
142
143
    @Override
144
    public Double getAccuracy() {
145
        return this.accuracy;
146
    }
147
148
    @Override
149
    public void setAccuracy(Double accuracy) {
150
        this.accuracy = accuracy;
151
    }
152 43983 jjdelcerro
153
    @Override
154
    public Expression createExpression() {
155
        DefaultExpression e = new DefaultExpression();
156
        return e;
157
    }
158 44006 jjdelcerro
159
    @Override
160
    public ExpressionBuilder createExpressionBuilder() {
161
        ExpressionBuilder x = new DefaultExpressionBuilder();
162
        return x;
163
    }
164 44009 jjdelcerro
165
    @Override
166
    public Optimizer createOptimizer() {
167
        Optimizer x = new DefaultOptimizer();
168
        return x;
169
    }
170 44139 jjdelcerro
171
    @Override
172
    public void registerGrammar(GrammarFactory factory) {
173
        if( factory==null ) {
174
            throw new IllegalArgumentException("factory can't be null");
175
        }
176
        this.grammarFactories.put(factory.getName(), factory);
177
    }
178
179
    @Override
180
    public Collection<GrammarFactory> getGrammarFactories() {
181
        return this.grammarFactories.values();
182
    }
183
184
    public void populateGrammars(Compiler compiler) {
185
        GrammarSet grammarSet = compiler.getGrammars();
186
        for (GrammarFactory factory : this.getGrammarFactories() ) {
187
            if( factory.isAutoload() ) {
188
                Grammar grammar = factory.createGrammar();
189
                grammarSet.add(grammar);
190
            }
191
        }
192
    }
193
194
    public Grammar createGrammar(String name) {
195
        DefaultGrammar grammar = new DefaultGrammar(name);
196
        return grammar;
197
    }
198 43521 jjdelcerro
}