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