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

History | View | Annotate | Download (6.62 KB)

1
package org.gvsig.expressionevaluator.impl;
2

    
3
import org.gvsig.expressionevaluator.Grammar;
4
import org.gvsig.expressionevaluator.GrammarFactory;
5
import java.util.Collection;
6
import java.util.HashMap;
7
import java.util.Map;
8
import org.gvsig.expressionevaluator.Bookmarks;
9
import org.gvsig.expressionevaluator.Code;
10
import org.gvsig.expressionevaluator.CodeBuilder;
11
import org.gvsig.expressionevaluator.Expression;
12
import org.gvsig.expressionevaluator.ExpressionBuilder;
13
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
14
import org.gvsig.expressionevaluator.Interpreter;
15
import org.gvsig.expressionevaluator.LexicalAnalyzer;
16
import org.gvsig.expressionevaluator.MutableSymbolTable;
17
import org.gvsig.expressionevaluator.Optimizer;
18
import org.gvsig.expressionevaluator.SymbolTable;
19
import org.gvsig.expressionevaluator.SymbolTableFactory;
20
import org.gvsig.expressionevaluator.Compiler;
21
import org.gvsig.expressionevaluator.GrammarSet;
22
import org.gvsig.expressionevaluator.History;
23
import org.slf4j.Logger;
24
import org.slf4j.LoggerFactory;
25

    
26

    
27
public class DefaultExpressionEvaluatorManager implements ExpressionEvaluatorManager {
28

    
29
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExpressionEvaluatorManager.class);
30
    
31
    private Double accuracy;
32
    private final Map<String,SymbolTableFactory>symbolTableFactories;
33
    private final Map<String,GrammarFactory> grammarFactories;
34
    private Bookmarks bookmarks;
35
    private History history;
36

    
37
    public DefaultExpressionEvaluatorManager() {
38
        this.symbolTableFactories = new HashMap<>();
39
        this.grammarFactories = new HashMap<>();
40
    }
41

    
42
    @Override
43
    public SymbolTable getSymbolTable(String name) {
44
        if( name == null ) {
45
            return null;
46
        }
47
        SymbolTableFactory factory = this.symbolTableFactories.get(name.toUpperCase());
48
        if( factory == null ) {
49
            return null;
50
        }
51
        return factory.createSymbolTable();
52
    }
53

    
54
    @Override
55
    public Collection<SymbolTableFactory> getSymbolTableFactories() {
56
        return this.symbolTableFactories.values();
57
    }
58

    
59
    @Override
60
    public final void registerSymbolTable(SymbolTableFactory factory) {
61
        if( factory == null ) {
62
            throw new IllegalArgumentException("factory can't be null");
63
        }
64
        this.symbolTableFactories.put(factory.getName().toUpperCase(),factory);
65
    }
66

    
67
    @Override
68
    public Object evaluate(String source) {
69
        DefaultInterpreter interpreter = new DefaultInterpreter();
70
        DefaultCompiler compiler = new DefaultCompiler();
71
        Code code = compiler.compileExpression(source);
72
        return interpreter.run(code);
73
    }
74

    
75
    @Override
76
    public Object evaluate(SymbolTable symbolTable, String source) {
77
        DefaultInterpreter interpreter = new DefaultInterpreter();
78
        DefaultCompiler compiler = new DefaultCompiler();
79
        Code code = compiler.compileExpression(source);
80
        interpreter.setSymbolTable(symbolTable);
81
        return interpreter.run(code);
82
    }
83

    
84
    @Override
85
    public Object evaluate(SymbolTable symbolTable, Code code) {
86
        DefaultInterpreter interpreter = new DefaultInterpreter();
87
        interpreter.setSymbolTable(symbolTable);
88
        return interpreter.run(code);
89
    }
90

    
91
    @Override
92
    public Code compile(String source) {
93
        Compiler compiler = this.createCompiler();
94
        return compiler.compileExpression(source);
95
    }
96

    
97
    @Override
98
    public Code compile(LexicalAnalyzer lex, String source) {
99
        Compiler compiler = this.createCompiler();
100
        compiler.setLexicalAnalyzer(lex);
101
        return compiler.compileExpression(source);
102
    }
103

    
104
    @Override
105
    public Code optimize(SymbolTable symbolTable, Code code) {
106
        Optimizer optimizer = this.createOptimizer();
107
        return optimizer.optimize(symbolTable, code);
108
    }
109

    
110
    @Override
111
    public MutableSymbolTable createSymbolTable() {
112
        DefaultSymbolTable theSymbolTable = new DefaultSymbolTable();
113
        return theSymbolTable;
114
    }
115
    
116
    public void populateSymbolTable(SymbolTable aSymbolTable) {
117
        for (SymbolTableFactory factory : this.getSymbolTableFactories() ) {
118
            if( factory.isAutoload() ) {
119
                SymbolTable symbolTable = factory.createSymbolTable();
120
                aSymbolTable.addSymbolTable(symbolTable);
121
            }
122
        }
123
    }
124
    
125
    @Override
126
    public LexicalAnalyzer createLexicalAnalyzer() {
127
        return new SQLLexicalAnalyzer();
128
    }
129

    
130
    @Override
131
    public CodeBuilder createCodeBuilder() {
132
        return new DefaultCodeBuilder();
133
    }
134

    
135
    @Override
136
    public Compiler createCompiler() {
137
        DefaultCompiler compiler = new DefaultCompiler();
138
        this.populateGrammars(compiler);
139
        return  compiler;
140
    }
141

    
142
    @Override
143
    public Interpreter createInterpreter() {
144
        return new DefaultInterpreter();
145
    }
146

    
147
    @Override
148
    public Double getAccuracy() {
149
        return this.accuracy;
150
    }
151

    
152
    @Override
153
    public void setAccuracy(Double accuracy) {
154
        this.accuracy = accuracy;
155
    }
156

    
157
    @Override
158
    public Expression createExpression() {
159
        DefaultExpression e = new DefaultExpression();
160
        return e;
161
    }
162

    
163
    @Override
164
    public ExpressionBuilder createExpressionBuilder() {
165
        ExpressionBuilder x = new DefaultExpressionBuilder();
166
        return x;
167
    }
168

    
169
    @Override
170
    public Optimizer createOptimizer() {
171
        Optimizer x = new DefaultOptimizer();
172
        return x;
173
    }
174

    
175
    @Override
176
    public void registerGrammar(GrammarFactory factory) {
177
        if( factory==null ) {
178
            throw new IllegalArgumentException("factory can't be null");
179
        }
180
        this.grammarFactories.put(factory.getName(), factory);
181
    }
182

    
183
    @Override
184
    public Collection<GrammarFactory> getGrammarFactories() {
185
        return this.grammarFactories.values();
186
    }
187

    
188
    public void populateGrammars(Compiler compiler) {
189
        GrammarSet grammarSet = compiler.getGrammars();
190
        for (GrammarFactory factory : this.getGrammarFactories() ) {
191
            if( factory.isAutoload() ) {
192
                Grammar grammar = factory.createGrammar();
193
                grammarSet.add(grammar);
194
            }
195
        }
196
    }
197

    
198
    @Override
199
    public Grammar createGrammar(String name) {
200
        DefaultGrammar grammar = new DefaultGrammar(name);
201
        return grammar;
202
    }
203
    
204
    @Override
205
    public Bookmarks getBookmarks() {
206
        if( this.bookmarks==null ) {
207
            this.bookmarks = new DefaultBookmarks();
208
        }
209
        return this.bookmarks;
210
    }
211

    
212
    @Override
213
    public History getHistory() {
214
        if( this.history==null ) {
215
            this.history = new DefaultHistory(20);
216
        }
217
        return this.history;
218
    }
219
}
220