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