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

History | View | Annotate | Download (5.45 KB)

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