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

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