1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.onemind.commons.java.datastructure;
22
23 import java.util.Collections;
24 import java.util.Map;
25 /***
26 * A simple implementation of nametable
27 * @author TiongHiang Lee (thlee@onemindsoft.org)
28 */
29 public class SimpleNametable implements Nametable
30 {
31
32 private final Map _table;
33
34 /***
35 * Constructor
36 * @param m the name
37 */
38 public SimpleNametable(Map m)
39 {
40 _table = m;
41 }
42
43 /***
44 * {@inheritDoc}
45 */
46 public void declare(String name, Object value)
47 {
48 if (_table.containsKey(name))
49 {
50 throw new IllegalArgumentException("Variable '" + name + "' has been declared.");
51 } else
52 {
53 _table.put(name, value);
54 }
55 }
56
57 /***
58 * {@inheritDoc}
59 */
60 public Object assign(String name, Object value)
61 {
62 if (_table.containsKey(name))
63 {
64 return _table.put(name, value);
65 } else
66 {
67 throw new IllegalArgumentException("Variable '" + name + "' has not been declared.");
68 }
69 }
70
71 /***
72 * {@inheritDoc}
73 */
74 public boolean containsName(String name)
75 {
76 return _table.containsKey(name);
77 }
78
79 /***
80 * {@inheritDoc}
81 */
82 public Object access(String name)
83 {
84 if (containsName(name))
85 {
86 return _table.get(name);
87 } else
88 {
89 throw new IllegalArgumentException("Varaible '" + name + "' has not been declared.");
90 }
91 }
92
93 /***
94 * {@inheritDoc}
95 */
96 public void undeclare(String name)
97 {
98
99 _table.remove(name);
100 }
101
102 public String toString()
103 {
104 return _table.toString();
105 }
106
107 /***
108 * Return the name table as a map
109 * @return unmodifiable map representation of the name table
110 */
111 public Map asMap()
112 {
113 return Collections.unmodifiableMap(_table);
114 }
115 }