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

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