001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ParameterMap.java,v 1.2 2001/07/22 20:25:13 pier Exp $
003: * $Revision: 1.2 $
004: * $Date: 2001/07/22 20:25:13 $
005: *
006: * ====================================================================
007: *
008: * The Apache Software License, Version 1.1
009: *
010: * Copyright (c) 1999 The Apache Software Foundation. All rights
011: * reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions
015: * are met:
016: *
017: * 1. Redistributions of source code must retain the above copyright
018: * notice, this list of conditions and the following disclaimer.
019: *
020: * 2. Redistributions in binary form must reproduce the above copyright
021: * notice, this list of conditions and the following disclaimer in
022: * the documentation and/or other materials provided with the
023: * distribution.
024: *
025: * 3. The end-user documentation included with the redistribution, if
026: * any, must include the following acknowlegement:
027: * "This product includes software developed by the
028: * Apache Software Foundation (http://www.apache.org/)."
029: * Alternately, this acknowlegement may appear in the software itself,
030: * if and wherever such third-party acknowlegements normally appear.
031: *
032: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
033: * Foundation" must not be used to endorse or promote products derived
034: * from this software without prior written permission. For written
035: * permission, please contact apache@apache.org.
036: *
037: * 5. Products derived from this software may not be called "Apache"
038: * nor may "Apache" appear in their names without prior written
039: * permission of the Apache Group.
040: *
041: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
042: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
043: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
044: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
045: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
046: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
047: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
048: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
049: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
050: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
051: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
052: * SUCH DAMAGE.
053: * ====================================================================
054: *
055: * This software consists of voluntary contributions made by many
056: * individuals on behalf of the Apache Software Foundation. For more
057: * information on the Apache Software Foundation, please see
058: * <http://www.apache.org/>.
059: *
060: * [Additional notices, if required by prior licensing conditions]
061: *
062: */
063:
064: package org.apache.catalina.util;
065:
066: import java.util.HashMap;
067: import java.util.Map;
068:
069: /**
070: * Extended implementation of <strong>HashMap</strong> that includes a
071: * <code>locked</code> property. This class can be used to safely expose
072: * Catalina internal parameter map objects to user classes without having
073: * to clone them in order to avoid modifications. When first created, a
074: * <code>ParmaeterMap</code> instance is not locked.
075: *
076: * @author Craig R. McClanahan
077: * @version $Revision: 1.2 $ $Date: 2001/07/22 20:25:13 $
078: */
079:
080: public final class ParameterMap extends HashMap {
081:
082: // ----------------------------------------------------------- Constructors
083:
084: /**
085: * Construct a new, empty map with the default initial capacity and
086: * load factor.
087: */
088: public ParameterMap() {
089:
090: super ();
091:
092: }
093:
094: /**
095: * Construct a new, empty map with the specified initial capacity and
096: * default load factor.
097: *
098: * @param initialCapacity The initial capacity of this map
099: */
100: public ParameterMap(int initialCapacity) {
101:
102: super (initialCapacity);
103:
104: }
105:
106: /**
107: * Construct a new, empty map with the specified initial capacity and
108: * load factor.
109: *
110: * @param initialCapacity The initial capacity of this map
111: * @param loadFactor The load factor of this map
112: */
113: public ParameterMap(int initialCapacity, float loadFactor) {
114:
115: super (initialCapacity, loadFactor);
116:
117: }
118:
119: /**
120: * Construct a new map with the same mappings as the given map.
121: *
122: * @param map Map whose contents are dupliated in the new map
123: */
124: public ParameterMap(Map map) {
125:
126: super (map);
127:
128: }
129:
130: // ------------------------------------------------------------- Properties
131:
132: /**
133: * The current lock state of this parameter map.
134: */
135: private boolean locked = false;
136:
137: /**
138: * Return the locked state of this parameter map.
139: */
140: public boolean isLocked() {
141:
142: return (this .locked);
143:
144: }
145:
146: /**
147: * Set the locked state of this parameter map.
148: *
149: * @param locked The new locked state
150: */
151: public void setLocked(boolean locked) {
152:
153: this .locked = locked;
154:
155: }
156:
157: /**
158: * The string manager for this package.
159: */
160: private static final StringManager sm = StringManager
161: .getManager("org.apache.catalina.util");
162:
163: // --------------------------------------------------------- Public Methods
164:
165: /**
166: * Remove all mappings from this map.
167: *
168: * @exception IllegalStateException if this map is currently locked
169: */
170: public void clear() {
171:
172: if (locked)
173: throw new IllegalStateException(sm
174: .getString("parameterMap.locked"));
175: super .clear();
176:
177: }
178:
179: /**
180: * Associate the specified value with the specified key in this map. If
181: * the map previously contained a mapping for this key, the old value is
182: * replaced.
183: *
184: * @param key Key with which the specified value is to be associated
185: * @param value Value to be associated with the specified key
186: *
187: * @return The previous value associated with the specified key, or
188: * <code>null</code> if there was no mapping for key
189: *
190: * @exception IllegalStateException if this map is currently locked
191: */
192: public Object put(Object key, Object value) {
193:
194: if (locked)
195: throw new IllegalStateException(sm
196: .getString("parameterMap.locked"));
197: return (super .put(key, value));
198:
199: }
200:
201: /**
202: * Copy all of the mappings from the specified map to this one. These
203: * mappings replace any mappings that this map had for any of the keys
204: * currently in the specified Map.
205: *
206: * @param map Mappings to be stored into this map
207: *
208: * @exception IllegalStateException if this map is currently locked
209: */
210: public void putAll(Map map) {
211:
212: if (locked)
213: throw new IllegalStateException(sm
214: .getString("parameterMap.locked"));
215: super .putAll(map);
216:
217: }
218:
219: /**
220: * Remove the mapping for this key from the map if present.
221: *
222: * @param key Key whose mapping is to be removed from the map
223: *
224: * @return The previous value associated with the specified key, or
225: * <code>null</code> if there was no mapping for that key
226: *
227: * @exception IllegalStateException if this map is currently locked
228: */
229: public Object remove(Object key) {
230:
231: if (locked)
232: throw new IllegalStateException(sm
233: .getString("parameterMap.locked"));
234: return (super.remove(key));
235:
236: }
237:
238: }
|