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
package org.gvsig.expressionevaluator.impl;
2

    
3
import java.util.Collection;
4
import java.util.HashMap;
5
import java.util.HashSet;
6
import java.util.Map;
7
import java.util.Set;
8
import org.gvsig.expressionevaluator.Code;
9
import org.gvsig.expressionevaluator.CodeBuilder;
10
import org.gvsig.expressionevaluator.Compiler;
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.impl.symboltable.OGCSymbolTable;
20
import org.gvsig.expressionevaluator.impl.symboltable.SQLSymbolTable;
21
import org.gvsig.expressionevaluator.impl.symboltable.UtilsSymbolTable;
22
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
24

    
25

    
26
public class DefaultExpressionEvaluatorManager implements ExpressionEvaluatorManager {
27

    
28
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExpressionEvaluatorManager.class);
29
    
30
    private Double accuracy;
31
    private final Map<String,SymbolTable>symbolTables;
32
    private final Set<String>autoloadSymbolTables;
33

    
34
    public DefaultExpressionEvaluatorManager() {
35
        this.symbolTables = new HashMap<>();
36
        this.autoloadSymbolTables = new HashSet<>();
37
        this.registerSymbolTable(new SQLSymbolTable(), true);
38
        this.registerSymbolTable(new OGCSymbolTable(), true);
39
        this.registerSymbolTable(new UtilsSymbolTable(), true);
40
    }
41

    
42
    @Override
43
    public SymbolTable getSymbolTable(String name) {
44
        return this.symbolTables.get(name.toUpperCase());
45
    }
46

    
47
    @Override
48
    public Collection<SymbolTable> getSymbolTables() {
49
        return this.symbolTables.values();
50
    }
51

    
52
    @Override
53
    public final void registerSymbolTable(SymbolTable symbolTable, boolean autoload) {
54
        if( symbolTable instanceof MutableSymbolTable ) {
55
            LOGGER.warn("Registered a MutableSymbolTable '"+symbolTable.getName()+"'.");
56
        }
57
        this.symbolTables.put(symbolTable.getName().toUpperCase(),symbolTable);
58
        if( autoload ) {
59
            this.autoloadSymbolTables.add(symbolTable.getName().toUpperCase());
60
        }
61
    }
62

    
63
    @Override
64
    public boolean isAutoload(SymbolTable symbolTable) {
65
        return this.autoloadSymbolTables.contains(symbolTable.getName().toUpperCase());
66
    }
67

    
68
    @Override
69
    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
    public Code optimize(SymbolTable symbolTable, Code code) {
107
        Optimizer optimizer = this.createOptimizer();
108
        return optimizer.optimize(symbolTable, code);
109
    }
110

    
111
    @Override
112
    public MutableSymbolTable createSymbolTable() {
113
        DefaultSymbolTable theSymbolTable = new DefaultSymbolTable();
114
        return theSymbolTable;
115
    }
116
    
117
    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
    @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

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

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

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