001: /*
002: * Copyright 1999,2004 The Apache Software Foundation.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.apache.catalina.util;
018:
019: import java.util.Collection;
020: import java.util.HashSet;
021:
022: /**
023: * Extended implementation of <strong>HashSet</strong> that includes a
024: * <code>locked</code> property. This class can be used to safely expose
025: * resource path sets to user classes without having to clone them in order
026: * to avoid modifications. When first created, a <code>ResourceMap</code>
027: * is not locked.
028: *
029: * @author Craig R. McClanahan
030: * @version $Revision: 1.3 $ $Date: 2004/02/27 14:58:50 $
031: */
032:
033: public final class ResourceSet extends HashSet {
034:
035: // ----------------------------------------------------------- Constructors
036:
037: /**
038: * Construct a new, empty set with the default initial capacity and
039: * load factor.
040: */
041: public ResourceSet() {
042:
043: super ();
044:
045: }
046:
047: /**
048: * Construct a new, empty set with the specified initial capacity and
049: * default load factor.
050: *
051: * @param initialCapacity The initial capacity of this set
052: */
053: public ResourceSet(int initialCapacity) {
054:
055: super (initialCapacity);
056:
057: }
058:
059: /**
060: * Construct a new, empty set with the specified initial capacity and
061: * load factor.
062: *
063: * @param initialCapacity The initial capacity of this set
064: * @param loadFactor The load factor of this set
065: */
066: public ResourceSet(int initialCapacity, float loadFactor) {
067:
068: super (initialCapacity, loadFactor);
069:
070: }
071:
072: /**
073: * Construct a new set with the same contents as the existing collection.
074: *
075: * @param coll The collection whose contents we should copy
076: */
077: public ResourceSet(Collection coll) {
078:
079: super (coll);
080:
081: }
082:
083: // ------------------------------------------------------------- Properties
084:
085: /**
086: * The current lock state of this parameter map.
087: */
088: private boolean locked = false;
089:
090: /**
091: * Return the locked state of this parameter map.
092: */
093: public boolean isLocked() {
094:
095: return (this .locked);
096:
097: }
098:
099: /**
100: * Set the locked state of this parameter map.
101: *
102: * @param locked The new locked state
103: */
104: public void setLocked(boolean locked) {
105:
106: this .locked = locked;
107:
108: }
109:
110: /**
111: * The string manager for this package.
112: */
113: private static final StringManager sm = StringManager
114: .getManager("org.apache.catalina.util");
115:
116: // --------------------------------------------------------- Public Methods
117:
118: /**
119: * Add the specified element to this set if it is not already present.
120: * Return <code>true</code> if the element was added.
121: *
122: * @param o The object to be added
123: *
124: * @exception IllegalStateException if this ResourceSet is locked
125: */
126: public boolean add(Object o) {
127:
128: if (locked)
129: throw new IllegalStateException(sm
130: .getString("resourceSet.locked"));
131: return (super .add(o));
132:
133: }
134:
135: /**
136: * Remove all of the elements from this set.
137: *
138: * @exception IllegalStateException if this ResourceSet is locked
139: */
140: public void clear() {
141:
142: if (locked)
143: throw new IllegalStateException(sm
144: .getString("resourceSet.locked"));
145: super .clear();
146:
147: }
148:
149: /**
150: * Remove the given element from this set if it is present.
151: * Return <code>true</code> if the element was removed.
152: *
153: * @param o The object to be removed
154: *
155: * @exception IllegalStateException if this ResourceSet is locked
156: */
157: public boolean remove(Object o) {
158:
159: if (locked)
160: throw new IllegalStateException(sm
161: .getString("resourceSet.locked"));
162: return (super.remove(o));
163:
164: }
165:
166: }
|