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 / AbstractSymbolTable.java @ 43913

History | View | Annotate | Download (2.63 KB)

1 43913 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.impl.function.ScriptFunction;
10
import org.gvsig.tools.ToolsLocator;
11
import org.gvsig.tools.script.Script;
12
import org.gvsig.tools.script.ScriptManager;
13
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
public abstract class AbstractSymbolTable implements SymbolTable {
19
20
    protected Map<String, Function> functions;
21
    protected SymbolTable delegatedSymbolTable;
22
    protected Script script = null;
23
24
25
    public AbstractSymbolTable() {
26
        this.functions = new HashMap<>();
27
    }
28
29
    public AbstractSymbolTable(SymbolTable delegatedSymbolTable) {
30
        this();
31
        this.delegatedSymbolTable = delegatedSymbolTable;
32
    }
33
34
    @Override
35
    public SymbolTable clone() throws CloneNotSupportedException {
36
        AbstractSymbolTable other = (AbstractSymbolTable) super.clone();
37
        if( this.delegatedSymbolTable!=null ) {
38
            other.delegatedSymbolTable = this.delegatedSymbolTable.clone();
39
        }
40
        other.functions = new HashMap<>(functions);
41
        return other;
42
    }
43
44
    @Override
45
    public Script getScript() {
46
        return this.script;
47
    }
48
49
    @Override
50
    public void setScript(String name) {
51
        ScriptManager scriptManager = ToolsLocator.getScriptManager();
52
        this.script = scriptManager.locateScript(name);
53
    }
54
55
    @Override
56
    public void setScript(Script script) {
57
        this.script = script;
58
    }
59
60
    public void addFunction(Function function) {
61
        this.functions.put(function.name(), function);
62
    }
63
64
    @Override
65
    public Function function(String name) {
66
        Function fn = this.functions.get(name);
67
        if( fn == null ) {
68
            if( this.delegatedSymbolTable != null ) {
69
                fn = this.delegatedSymbolTable.function(name);
70
            }
71
            if( fn == null && this.script != null ) {
72
                fn = new ScriptFunction(this.script, name);
73
            }
74
        }
75
        return fn;
76
    }
77
78
    @Override
79
    public Iterator<Function> iterfuncs() {
80
        return this.functions.values().iterator();
81
    }
82
83
    @Override
84
    public Iterator<Function> iterator() {
85
        return iterfuncs();
86
    }
87
88
    public void setSymbolTable(SymbolTable symbolTable) {
89
        this.delegatedSymbolTable = symbolTable;
90
    }
91
92
    public SymbolTable getSymbolTable() {
93
        return this.delegatedSymbolTable;
94
    }
95
96
    public void removeFunction(String name) {
97
        this.functions.remove(name);
98
    }
99
}