KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > el > EnumeratedMap


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  * Copyright (c) 1999 The Apache Software Foundation. All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if
20  * any, must include the following acknowlegement:
21  * "This product includes software developed by the
22  * Apache Software Foundation (http://www.apache.org/)."
23  * Alternately, this acknowlegement may appear in the software itself,
24  * if and wherever such third-party acknowlegements normally appear.
25  *
26  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
27  * Foundation" must not be used to endorse or promote products derived
28  * from this software without prior written permission. For written
29  * permission, please contact apache@apache.org.
30  *
31  * 5. Products derived from this software may not be called "Apache"
32  * nor may "Apache" appear in their names without prior written
33  * permission of the Apache Group.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of the Apache Software Foundation. For more
51  * information on the Apache Software Foundation, please see
52  * <http://www.apache.org/>.
53  *
54  */

55
56 package org.apache.commons.el;
57
58 import java.util.Collection JavaDoc;
59 import java.util.Enumeration JavaDoc;
60 import java.util.HashMap JavaDoc;
61 import java.util.Map JavaDoc;
62 import java.util.Set JavaDoc;
63
64 /**
65  *
66  * <p>This is a Map implementation driven by a data source that only
67  * provides an enumeration of keys and a getValue(key) method. This
68  * class must be subclassed to implement those methods.
69  *
70  * <p>Some of the methods may incur a performance penalty that
71  * involves enumerating the entire data source. In these cases, the
72  * Map will try to save the results of that enumeration, but only if
73  * the underlying data source is immutable.
74  *
75  * @author Nathan Abramson - Art Technology Group
76  * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: luehe $
77  **/

78
79 public abstract class EnumeratedMap
80   implements Map JavaDoc
81 {
82   //-------------------------------------
83
// Member variables
84
//-------------------------------------
85

86   Map JavaDoc mMap;
87
88   //-------------------------------------
89
public void clear ()
90   {
91     throw new UnsupportedOperationException JavaDoc ();
92   }
93
94   //-------------------------------------
95
public boolean containsKey (Object JavaDoc pKey)
96   {
97     return getValue (pKey) != null;
98   }
99
100   //-------------------------------------
101
public boolean containsValue (Object JavaDoc pValue)
102   {
103     return getAsMap ().containsValue (pValue);
104   }
105
106   //-------------------------------------
107
public Set JavaDoc entrySet ()
108   {
109     return getAsMap ().entrySet ();
110   }
111
112   //-------------------------------------
113
public Object JavaDoc get (Object JavaDoc pKey)
114   {
115     return getValue (pKey);
116   }
117
118   //-------------------------------------
119
public boolean isEmpty ()
120   {
121     return !enumerateKeys ().hasMoreElements ();
122   }
123
124   //-------------------------------------
125
public Set JavaDoc keySet ()
126   {
127     return getAsMap ().keySet ();
128   }
129
130   //-------------------------------------
131
public Object JavaDoc put (Object JavaDoc pKey, Object JavaDoc pValue)
132   {
133     throw new UnsupportedOperationException JavaDoc ();
134   }
135
136   //-------------------------------------
137
public void putAll (Map JavaDoc pMap)
138   {
139     throw new UnsupportedOperationException JavaDoc ();
140   }
141
142   //-------------------------------------
143
public Object JavaDoc remove (Object JavaDoc pKey)
144   {
145     throw new UnsupportedOperationException JavaDoc ();
146   }
147
148   //-------------------------------------
149
public int size ()
150   {
151     return getAsMap ().size ();
152   }
153
154   //-------------------------------------
155
public Collection JavaDoc values ()
156   {
157     return getAsMap ().values ();
158   }
159
160   //-------------------------------------
161
// Abstract methods
162
//-------------------------------------
163
/**
164    *
165    * Returns an enumeration of the keys
166    **/

167   public abstract Enumeration JavaDoc enumerateKeys ();
168
169   //-------------------------------------
170
/**
171    *
172    * Returns true if it is possible for this data source to change
173    **/

174   public abstract boolean isMutable ();
175
176   //-------------------------------------
177
/**
178    *
179    * Returns the value associated with the given key, or null if not
180    * found.
181    **/

182   public abstract Object JavaDoc getValue (Object JavaDoc pKey);
183
184   //-------------------------------------
185
/**
186    *
187    * Converts the MapSource to a Map. If the map is not mutable, this
188    * is cached
189    **/

190   public Map JavaDoc getAsMap ()
191   {
192     if (mMap != null) {
193       return mMap;
194     }
195     else {
196       Map JavaDoc m = convertToMap ();
197       if (!isMutable ()) {
198     mMap = m;
199       }
200       return m;
201     }
202   }
203
204   //-------------------------------------
205
/**
206    *
207    * Converts to a Map
208    **/

209   Map JavaDoc convertToMap ()
210   {
211     Map JavaDoc ret = new HashMap JavaDoc ();
212     for (Enumeration JavaDoc e = enumerateKeys (); e.hasMoreElements (); ) {
213       Object JavaDoc key = e.nextElement ();
214       Object JavaDoc value = getValue (key);
215       ret.put (key, value);
216     }
217     return ret;
218   }
219
220   //-------------------------------------
221
}
222
Popular Tags