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

    
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
    private SymbolTable delegatedSymbolTable;
15
    private Map<String,Object> vars;
16
    private Map<String,Function> functions;
17
    
18
    public DefaultSymbolTable(SymbolTable delegatedSymbolTable) {
19
        this.delegatedSymbolTable = delegatedSymbolTable;
20
        this.vars = new HashMap<>();
21
        this.functions = new HashMap<>();
22
    }
23

    
24
    public DefaultSymbolTable() {
25
        this(null);
26
    }
27

    
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
    
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
        if( fn == null && this.delegatedSymbolTable != null ) {
53
            fn = this.delegatedSymbolTable.function(name);
54
        }
55
        return fn;
56
    }
57

    
58
    @Override
59
    public boolean exists(String name) {
60
        boolean e = this.vars.containsKey(name);
61
        if( !e ) {
62
            e = this.delegatedSymbolTable.exists(name);
63
        }
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
        return this.delegatedSymbolTable.value(name);
73
    }
74

    
75
    @Override
76
    public void setSymbolTable(SymbolTable symbolTable) {
77
        this.delegatedSymbolTable = symbolTable;
78
    }
79

    
80
    @Override
81
    public SymbolTable getSymbolTable() {
82
        return this.delegatedSymbolTable;
83
    }
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

    
105
    @Override
106
    public Iterator<Function> iterator() {
107
        return iterfuncs();
108
    }
109
    
110
}