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

    
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
}