View Javadoc

1   /*
2    * Copyright (C) 2004 TiongHiang Lee
3    *
4    * This library is free software; you can redistribute it and/or
5    * modify it under the terms of the GNU Lesser General Public
6    * License as published by the Free Software Foundation; either
7    * version 2.1 of the License, or (at your option) any later version.
8    *
9    * This library is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12   * Lesser General Public License for more details.
13   *
14   * You should have received a copy of the GNU Lesser General Public
15   * License along with this library; if not,  write to the Free Software
16   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17   *
18   * Email: thlee@onemindsoft.org
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          //TODO: need declaration check?
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 }