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 / DefaultSymbolTable.java @ 43809
History | View | Annotate | Download (2.78 KB)
1 | 43512 | jjdelcerro | |
---|---|---|---|
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.SymbolTable; |
||
9 | import org.gvsig.expressionevaluator.MutableSymbolTable; |
||
10 | |||
11 | |||
12 | public class DefaultSymbolTable implements MutableSymbolTable { |
||
13 | |||
14 | 43809 | jjdelcerro | private SymbolTable delegatedSymbolTable;
|
15 | private Map<String,Object> vars; |
||
16 | private Map<String,Function> functions; |
||
17 | 43512 | jjdelcerro | |
18 | 43809 | jjdelcerro | public DefaultSymbolTable(SymbolTable delegatedSymbolTable) {
|
19 | this.delegatedSymbolTable = delegatedSymbolTable;
|
||
20 | 43512 | jjdelcerro | this.vars = new HashMap<>(); |
21 | this.functions = new HashMap<>(); |
||
22 | } |
||
23 | |||
24 | public DefaultSymbolTable() {
|
||
25 | this(null); |
||
26 | } |
||
27 | 43809 | jjdelcerro | |
28 | @Override
|
||
29 | public MutableSymbolTable clone() throws CloneNotSupportedException { |
||
30 | DefaultSymbolTable other = (DefaultSymbolTable) super.clone();
|
||
31 | if( this.delegatedSymbolTable!=null ) { |
||
32 | other.delegatedSymbolTable = this.delegatedSymbolTable.clone();
|
||
33 | } |
||
34 | other.vars = new HashMap<>(vars); |
||
35 | other.functions = new HashMap<>(functions); |
||
36 | return other;
|
||
37 | } |
||
38 | 43512 | jjdelcerro | |
39 | @Override
|
||
40 | public void addVar(String name, Object value) { |
||
41 | this.vars.put(name, value);
|
||
42 | } |
||
43 | |||
44 | @Override
|
||
45 | public void addFunction(Function function) { |
||
46 | this.functions.put(function.name(), function);
|
||
47 | } |
||
48 | |||
49 | @Override
|
||
50 | public Function function(String name) { |
||
51 | Function fn = this.functions.get(name);
|
||
52 | 43809 | jjdelcerro | if( fn == null && this.delegatedSymbolTable != null ) { |
53 | fn = this.delegatedSymbolTable.function(name);
|
||
54 | 43512 | jjdelcerro | } |
55 | return fn;
|
||
56 | } |
||
57 | |||
58 | @Override
|
||
59 | public boolean exists(String name) { |
||
60 | boolean e = this.vars.containsKey(name); |
||
61 | if( !e ) {
|
||
62 | 43809 | jjdelcerro | e = this.delegatedSymbolTable.exists(name);
|
63 | 43512 | jjdelcerro | } |
64 | return e;
|
||
65 | } |
||
66 | |||
67 | @Override
|
||
68 | public Object value(String name) { |
||
69 | if( this.vars.containsKey(name) ) { |
||
70 | return this.vars.get(name); |
||
71 | } |
||
72 | 43809 | jjdelcerro | return this.delegatedSymbolTable.value(name); |
73 | 43512 | jjdelcerro | } |
74 | |||
75 | @Override
|
||
76 | public void setSymbolTable(SymbolTable symbolTable) { |
||
77 | 43809 | jjdelcerro | this.delegatedSymbolTable = symbolTable;
|
78 | 43512 | jjdelcerro | } |
79 | |||
80 | @Override
|
||
81 | public SymbolTable getSymbolTable() {
|
||
82 | 43809 | jjdelcerro | return this.delegatedSymbolTable; |
83 | 43512 | jjdelcerro | } |
84 | |||
85 | @Override
|
||
86 | public void removeVar(String name) { |
||
87 | this.vars.remove(name);
|
||
88 | } |
||
89 | |||
90 | @Override
|
||
91 | public void removeFunction(String name) { |
||
92 | this.functions.remove(name);
|
||
93 | } |
||
94 | |||
95 | @Override
|
||
96 | public Iterator<String> itervars() { |
||
97 | return this.vars.keySet().iterator(); |
||
98 | } |
||
99 | |||
100 | @Override
|
||
101 | public Iterator<Function> iterfuncs() { |
||
102 | return this.functions.values().iterator(); |
||
103 | } |
||
104 | 43521 | jjdelcerro | |
105 | @Override
|
||
106 | public Iterator<Function> iterator() { |
||
107 | return iterfuncs();
|
||
108 | } |
||
109 | 43512 | jjdelcerro | |
110 | } |