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

History | View | Annotate | Download (5.13 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 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 43983 jjdelcerro
    private final Map<String,SymbolTable>symbolTables;
31 43987 jjdelcerro
    private final Set<String>autoloadSymbolTables;
32 43521 jjdelcerro
33
    public DefaultExpressionEvaluatorManager() {
34 43983 jjdelcerro
        this.symbolTables = new HashMap<>();
35 43987 jjdelcerro
        this.autoloadSymbolTables = new HashSet<>();
36
        this.registerSymbolTable(new SQLSymbolTable(), true);
37
        this.registerSymbolTable(new OGCSymbolTable(), true);
38 43939 jjdelcerro
    }
39
40 43521 jjdelcerro
    @Override
41 43983 jjdelcerro
    public SymbolTable getSymbolTable(String name) {
42
        return this.symbolTables.get(name.toUpperCase());
43 43939 jjdelcerro
    }
44
45
    @Override
46 43983 jjdelcerro
    public Collection<SymbolTable> getSymbolTables() {
47
        return this.symbolTables.values();
48 43939 jjdelcerro
    }
49
50
    @Override
51 43987 jjdelcerro
    public final void registerSymbolTable(SymbolTable symbolTable, boolean autoload) {
52 44006 jjdelcerro
        if( symbolTable instanceof MutableSymbolTable ) {
53
            LOGGER.warn("Registered a MutableSymbolTable '"+symbolTable.getName()+"'.");
54
        }
55 43983 jjdelcerro
        this.symbolTables.put(symbolTable.getName().toUpperCase(),symbolTable);
56 43987 jjdelcerro
        if( autoload ) {
57
            this.autoloadSymbolTables.add(symbolTable.getName().toUpperCase());
58
        }
59 43939 jjdelcerro
    }
60 43987 jjdelcerro
61 43939 jjdelcerro
    @Override
62 43987 jjdelcerro
    public boolean isAutoload(SymbolTable symbolTable) {
63
        return this.autoloadSymbolTables.contains(symbolTable.getName().toUpperCase());
64
    }
65
66
    @Override
67 43521 jjdelcerro
    public Object evaluate(String source) {
68
        DefaultInterpreter interpreter = new DefaultInterpreter();
69
        DefaultCompiler compiler = new DefaultCompiler();
70
        Code code = compiler.compileExpression(source);
71
        return interpreter.run(code);
72
    }
73
74
    @Override
75
    public Object evaluate(SymbolTable symbolTable, String source) {
76
        DefaultInterpreter interpreter = new DefaultInterpreter();
77
        DefaultCompiler compiler = new DefaultCompiler();
78
        Code code = compiler.compileExpression(source);
79
        interpreter.setSymbolTable(symbolTable);
80
        return interpreter.run(code);
81
    }
82
83
    @Override
84
    public Object evaluate(SymbolTable symbolTable, Code code) {
85
        DefaultInterpreter interpreter = new DefaultInterpreter();
86
        interpreter.setSymbolTable(symbolTable);
87
        return interpreter.run(code);
88
    }
89
90
    @Override
91
    public Code compile(String source) {
92
        DefaultCompiler compiler = new DefaultCompiler();
93
        return compiler.compileExpression(source);
94
    }
95
96
    @Override
97
    public Code compile(LexicalAnalyzer lex, String source) {
98
        DefaultCompiler compiler = new DefaultCompiler();
99
        compiler.setLexicalAnalyzer(lex);
100
        return compiler.compileExpression(source);
101
    }
102
103
    @Override
104
    public MutableSymbolTable createSymbolTable() {
105 43987 jjdelcerro
        DefaultSymbolTable theSymbolTable = new DefaultSymbolTable();
106
        return theSymbolTable;
107 43521 jjdelcerro
    }
108 43939 jjdelcerro
109 43987 jjdelcerro
    public void populateSymbolTable(SymbolTable aSymbolTable) {
110
        for (String name : this.autoloadSymbolTables ) {
111
            SymbolTable symbolTable = this.symbolTables.get(name);
112
            if( symbolTable!=null ) {
113
                aSymbolTable.addSymbolTable(symbolTable);
114
            }
115
        }
116
    }
117
118 43521 jjdelcerro
    @Override
119
    public LexicalAnalyzer createLexicalAnalyzer() {
120
        return new SQLLexicalAnalyzer();
121
    }
122
123
    @Override
124
    public CodeBuilder createCodeBuilder() {
125
        return new DefaultCodeBuilder();
126
    }
127
128
    @Override
129
    public Compiler createCompiler() {
130
        return new DefaultCompiler();
131
    }
132
133
    @Override
134
    public Interpreter createInterpreter() {
135
        return new DefaultInterpreter();
136
    }
137
138
    @Override
139
    public Double getAccuracy() {
140
        return this.accuracy;
141
    }
142
143
    @Override
144
    public void setAccuracy(Double accuracy) {
145
        this.accuracy = accuracy;
146
    }
147 43983 jjdelcerro
148
    @Override
149
    public Expression createExpression() {
150
        DefaultExpression e = new DefaultExpression();
151
        return e;
152
    }
153 44006 jjdelcerro
154
    @Override
155
    public ExpressionBuilder createExpressionBuilder() {
156
        ExpressionBuilder x = new DefaultExpressionBuilder();
157
        return x;
158
    }
159 44009 jjdelcerro
160
    @Override
161
    public Optimizer createOptimizer() {
162
        Optimizer x = new DefaultOptimizer();
163
        return x;
164
    }
165 43521 jjdelcerro
}