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 / SQLSymbolTable.java @ 43809

History | View | Annotate | Download (13 KB)

1

    
2
package org.gvsig.expressionevaluator.impl;
3

    
4
import java.util.HashMap;
5
import java.util.Iterator;
6
import java.util.Map;
7
import org.gvsig.expressionevaluator.Function;
8
import org.gvsig.expressionevaluator.impl.function.operator.AddOperator;
9
import org.gvsig.expressionevaluator.impl.function.operator.AndOperator;
10
import org.gvsig.expressionevaluator.impl.function.operator.DivOperator;
11
import org.gvsig.expressionevaluator.impl.function.operator.EqOperator;
12
import org.gvsig.expressionevaluator.impl.function.operator.GeOperator;
13
import org.gvsig.expressionevaluator.impl.function.operator.GtOperator;
14
import org.gvsig.expressionevaluator.impl.function.operator.LeOperator;
15
import org.gvsig.expressionevaluator.impl.function.operator.LtOperator;
16
import org.gvsig.expressionevaluator.impl.function.operator.ModOperator;
17
import org.gvsig.expressionevaluator.impl.function.operator.MulOperator;
18
import org.gvsig.expressionevaluator.impl.function.operator.NeOperator;
19
import org.gvsig.expressionevaluator.impl.function.operator.NotOperator;
20
import org.gvsig.expressionevaluator.impl.function.operator.OrOperator;
21
import org.gvsig.expressionevaluator.impl.function.operator.SubstOperator;
22
import org.gvsig.expressionevaluator.impl.function.predicate.IlikeOperator;
23
import org.gvsig.expressionevaluator.impl.function.predicate.LikeOperator;
24
import org.gvsig.expressionevaluator.SymbolTable;
25
import org.gvsig.expressionevaluator.impl.function.numeric.ACosFunction;
26
import org.gvsig.expressionevaluator.impl.function.numeric.ASinFunction;
27
import org.gvsig.expressionevaluator.impl.function.numeric.ATanFunction;
28
import org.gvsig.expressionevaluator.impl.function.numeric.AbsFunction;
29
import org.gvsig.expressionevaluator.impl.function.numeric.BitAndFunction;
30
import org.gvsig.expressionevaluator.impl.function.numeric.BitOrFunction;
31
import org.gvsig.expressionevaluator.impl.function.numeric.BitXorFunction;
32
import org.gvsig.expressionevaluator.impl.function.numeric.CeilFunction;
33
import org.gvsig.expressionevaluator.impl.function.numeric.CosFunction;
34
import org.gvsig.expressionevaluator.impl.function.numeric.CoshFunction;
35
import org.gvsig.expressionevaluator.impl.function.numeric.CotFunction;
36
import org.gvsig.expressionevaluator.impl.function.numeric.DegreesFunction;
37
import org.gvsig.expressionevaluator.impl.function.numeric.ExpFunction;
38
import org.gvsig.expressionevaluator.impl.function.numeric.FloorFunction;
39
import org.gvsig.expressionevaluator.impl.function.numeric.Log10Function;
40
import org.gvsig.expressionevaluator.impl.function.numeric.LogFunction;
41
import org.gvsig.expressionevaluator.impl.function.numeric.PiFunction;
42
import org.gvsig.expressionevaluator.impl.function.numeric.PowFunction;
43
import org.gvsig.expressionevaluator.impl.function.numeric.RadiansFunction;
44
import org.gvsig.expressionevaluator.impl.function.numeric.RandFunction;
45
import org.gvsig.expressionevaluator.impl.function.numeric.RoundFunction;
46
import org.gvsig.expressionevaluator.impl.function.numeric.SignFunction;
47
import org.gvsig.expressionevaluator.impl.function.numeric.SinFunction;
48
import org.gvsig.expressionevaluator.impl.function.numeric.SinhFunction;
49
import org.gvsig.expressionevaluator.impl.function.numeric.SqrtFunction;
50
import org.gvsig.expressionevaluator.impl.function.numeric.TanFunction;
51
import org.gvsig.expressionevaluator.impl.function.numeric.TanhFunction;
52
import org.gvsig.expressionevaluator.impl.function.numeric.ZeroFunction;
53
import org.gvsig.expressionevaluator.impl.function.spatial.STAreaFunction;
54
import org.gvsig.expressionevaluator.impl.function.spatial.STAsTextFunction;
55
import org.gvsig.expressionevaluator.impl.function.spatial.STBufferFunction;
56
import org.gvsig.expressionevaluator.impl.function.spatial.STCentroidFunction;
57
import org.gvsig.expressionevaluator.impl.function.spatial.STContainsFunction;
58
import org.gvsig.expressionevaluator.impl.function.spatial.STConvexHullFunction;
59
import org.gvsig.expressionevaluator.impl.function.spatial.STCoveredByFunction;
60
import org.gvsig.expressionevaluator.impl.function.spatial.STCoversFunction;
61
import org.gvsig.expressionevaluator.impl.function.spatial.STCrossesFunction;
62
import org.gvsig.expressionevaluator.impl.function.spatial.STDifferenceFunction;
63
import org.gvsig.expressionevaluator.impl.function.spatial.STDimensionFunction;
64
import org.gvsig.expressionevaluator.impl.function.spatial.STDisjointFunction;
65
import org.gvsig.expressionevaluator.impl.function.spatial.STDistanceFunction;
66
import org.gvsig.expressionevaluator.impl.function.spatial.STEndPointFunction;
67
import org.gvsig.expressionevaluator.impl.function.spatial.STEnvelopeFunction;
68
import org.gvsig.expressionevaluator.impl.function.spatial.STGeomFromTextFunction;
69
import org.gvsig.expressionevaluator.impl.function.spatial.STGeometryNFunction;
70
import org.gvsig.expressionevaluator.impl.function.spatial.STIntersectionFunction;
71
import org.gvsig.expressionevaluator.impl.function.spatial.STIntersectsFunction;
72
import org.gvsig.expressionevaluator.impl.function.spatial.STIsSimpleFunction;
73
import org.gvsig.expressionevaluator.impl.function.spatial.STIsValidFunction;
74
import org.gvsig.expressionevaluator.impl.function.spatial.STNumGeometriesFunction;
75
import org.gvsig.expressionevaluator.impl.function.spatial.STNumPointsFunction;
76
import org.gvsig.expressionevaluator.impl.function.spatial.STOverlapsFunction;
77
import org.gvsig.expressionevaluator.impl.function.spatial.STPointNFunction;
78
import org.gvsig.expressionevaluator.impl.function.spatial.STStartPointFunction;
79
import org.gvsig.expressionevaluator.impl.function.spatial.STTouchesFunction;
80
import org.gvsig.expressionevaluator.impl.function.spatial.STUnionFunction;
81
import org.gvsig.expressionevaluator.impl.function.spatial.STWithinFunction;
82
import org.gvsig.expressionevaluator.impl.function.spatial.STXFunction;
83
import org.gvsig.expressionevaluator.impl.function.spatial.STYFunction;
84
import org.gvsig.expressionevaluator.impl.function.spatial.STZFunction;
85
import org.gvsig.expressionevaluator.impl.function.string.AsciiFunction;
86
import org.gvsig.expressionevaluator.impl.function.string.CharFunction;
87
import org.gvsig.expressionevaluator.impl.function.string.ConcatFunction;
88
import org.gvsig.expressionevaluator.impl.function.string.InstrFunction;
89
import org.gvsig.expressionevaluator.impl.function.string.LTrimFunction;
90
import org.gvsig.expressionevaluator.impl.function.string.LeftFunction;
91
import org.gvsig.expressionevaluator.impl.function.string.LengthFunction;
92
import org.gvsig.expressionevaluator.impl.function.string.LocateFunction;
93
import org.gvsig.expressionevaluator.impl.function.string.LowerFunction;
94
import org.gvsig.expressionevaluator.impl.function.string.LpadFunction;
95
import org.gvsig.expressionevaluator.impl.function.string.PositionFunction;
96
import org.gvsig.expressionevaluator.impl.function.string.RTrimFunction;
97
import org.gvsig.expressionevaluator.impl.function.string.RepeatFunction;
98
import org.gvsig.expressionevaluator.impl.function.string.ReplaceFunction;
99
import org.gvsig.expressionevaluator.impl.function.string.RightFunction;
100
import org.gvsig.expressionevaluator.impl.function.string.RpadFunction;
101
import org.gvsig.expressionevaluator.impl.function.string.SpaceFunction;
102
import org.gvsig.expressionevaluator.impl.function.string.SubstringFunction;
103
import org.gvsig.expressionevaluator.impl.function.string.TrimFunction;
104
import org.gvsig.expressionevaluator.impl.function.string.UpperFunction;
105

    
106

    
107
public class SQLSymbolTable implements SymbolTable {
108

    
109
    private final Map<String,Function> functions;
110
    
111
    private static SQLSymbolTable instance = null;
112
    
113
    public static SQLSymbolTable getInstance() {
114
        if( instance == null ) {
115
            instance = new SQLSymbolTable();
116
        }
117
        return instance;
118
    }
119
    
120
    private SQLSymbolTable() {
121
        this.functions = new HashMap<>();
122
        
123
        addFunction(new AndOperator());
124
        addFunction(new AddOperator());
125
        addFunction(new DivOperator());
126
        addFunction(new EqOperator());
127
        addFunction(new GeOperator());
128
        addFunction(new GtOperator());
129
        addFunction(new LeOperator());
130
        addFunction(new LtOperator());
131
        addFunction(new ModOperator());
132
        addFunction(new NeOperator());
133
        addFunction(new ModOperator());
134
        addFunction(new MulOperator());
135
        addFunction(new NeOperator());
136
        addFunction(new NotOperator());
137
        addFunction(new OrOperator());
138
        addFunction(new SubstOperator());
139
        
140
        addFunction(new IlikeOperator());
141
        addFunction(new LikeOperator());
142
        
143
        addFunction(new ACosFunction());
144
        addFunction(new ASinFunction());
145
        addFunction(new ATanFunction());
146
        addFunction(new AbsFunction());
147
        addFunction(new BitAndFunction());
148
        addFunction(new BitOrFunction());
149
        addFunction(new BitXorFunction());
150
        addFunction(new CeilFunction());
151
        addFunction(new CosFunction());
152
        addFunction(new CoshFunction());
153
        addFunction(new CotFunction());
154
        addFunction(new DegreesFunction());
155
        addFunction(new ExpFunction());
156
        addFunction(new FloorFunction());
157
        addFunction(new Log10Function());
158
        addFunction(new LogFunction());
159
        addFunction(new PiFunction());
160
        addFunction(new PowFunction());
161
        addFunction(new RadiansFunction());
162
        addFunction(new RandFunction());
163
        addFunction(new RoundFunction());
164
        addFunction(new SignFunction());
165
        addFunction(new SinFunction());
166
        addFunction(new SinhFunction());
167
        addFunction(new SqrtFunction());
168
        addFunction(new TanFunction());
169
        addFunction(new TanhFunction());
170
        addFunction(new ZeroFunction());
171
        addFunction(new LogFunction());
172
        
173
        addFunction(new AsciiFunction());
174
        addFunction(new CharFunction());
175
        addFunction(new ConcatFunction());
176
        addFunction(new InstrFunction());
177
        addFunction(new LTrimFunction());
178
        addFunction(new LeftFunction());
179
        addFunction(new LengthFunction());
180
        addFunction(new LocateFunction());
181
        addFunction(new LowerFunction());
182
        addFunction(new LpadFunction());
183
        addFunction(new PositionFunction());
184
        addFunction(new RTrimFunction());
185
        addFunction(new RepeatFunction());
186
        addFunction(new ReplaceFunction());
187
        addFunction(new RightFunction());
188
        addFunction(new RpadFunction());
189
        addFunction(new SpaceFunction());
190
        addFunction(new SubstringFunction());
191
        addFunction(new TrimFunction());
192
        addFunction(new UpperFunction());
193

    
194
        addFunction(new STAreaFunction());
195
        addFunction(new STAsTextFunction());
196
        addFunction(new STBufferFunction());
197
        addFunction(new STCentroidFunction());
198
        addFunction(new STContainsFunction());
199
        addFunction(new STConvexHullFunction());
200
        addFunction(new STCoveredByFunction());
201
        addFunction(new STCoversFunction());
202
        addFunction(new STCrossesFunction());
203
        addFunction(new STDifferenceFunction());
204
        addFunction(new STDimensionFunction());
205
        addFunction(new STDisjointFunction());
206
        addFunction(new STDistanceFunction());
207
        addFunction(new STEndPointFunction());
208
        addFunction(new STEnvelopeFunction());
209
        addFunction(new STGeomFromTextFunction());
210
        addFunction(new STGeometryNFunction());
211
        addFunction(new STIntersectionFunction());
212
        addFunction(new STIntersectsFunction());
213
        addFunction(new STIsSimpleFunction());
214
        addFunction(new STIsValidFunction());
215
        addFunction(new STNumGeometriesFunction());
216
        addFunction(new STNumPointsFunction());
217
        addFunction(new STOverlapsFunction());
218
        addFunction(new STPointNFunction());
219
        addFunction(new STStartPointFunction());
220
        addFunction(new STTouchesFunction());
221
        addFunction(new STUnionFunction());
222
        addFunction(new STWithinFunction());
223
        addFunction(new STXFunction());
224
        addFunction(new STYFunction());
225
        addFunction(new STZFunction());
226
    }
227

    
228
    @Override
229
    @SuppressWarnings("CloneDoesntCallSuperClone")
230
    public SymbolTable clone() throws CloneNotSupportedException {
231
        // SQLSymbolTable is singleton and immutable, so we just return 
232
        // the same instance.
233
        return this;
234
    }
235
    
236
    private void addFunction(Function function) {
237
        this.functions.put(function.name().toLowerCase(), function);
238
    }
239
    
240
    @Override
241
    public Function function(String name) {
242
        return this.functions.get(name.toLowerCase());
243
    }
244

    
245
    @Override
246
    public boolean exists(String name) {
247
        return false;
248
    }
249

    
250
    @Override
251
    public Object value(String name) {
252
        return null;
253
    }
254
    
255
    @Override
256
    public Iterator<String> itervars() {
257
        return new Iterator<String>() {
258
            @Override
259
            public boolean hasNext() {
260
                return false;
261
            }
262

    
263
            @Override
264
            public String next() {
265
                return null;
266
            }
267
        };
268
    }
269

    
270
    @Override
271
    public Iterator<Function> iterfuncs() {
272
        return this.functions.values().iterator();
273
    }
274

    
275
    @Override
276
    public Iterator<Function> iterator() {
277
        return iterfuncs();
278
    }
279
    
280
}