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 / 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
}