001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/users/MemoryGroup.java,v 1.5 2002/02/10 08:06:20 craigmcc Exp $
003: * $Revision: 1.5 $
004: * $Date: 2002/02/10 08:06:20 $
005: *
006: * ====================================================================
007: * The Apache Software License, Version 1.1
008: *
009: * Copyright (c) 2002 The Apache Software Foundation. All rights
010: * reserved.
011: *
012: * Redistribution and use in source and binary forms, with or without
013: * modification, are permitted provided that the following conditions
014: * are met:
015: *
016: * 1. Redistributions of source code must retain the above copyright
017: * notice, this list of conditions and the following disclaimer.
018: *
019: * 2. Redistributions in binary form must reproduce the above copyright
020: * notice, this list of conditions and the following disclaimer in
021: * the documentation and/or other materials provided with the
022: * distribution.
023: *
024: * 3. The end-user documentation included with the redistribution, if
025: * any, must include the following acknowlegement:
026: * "This product includes software developed by the
027: * Apache Software Foundation (http://www.apache.org/)."
028: * Alternately, this acknowlegement may appear in the software itself,
029: * if and wherever such third-party acknowlegements normally appear.
030: *
031: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
032: * Foundation" must not be used to endorse or promote products derived
033: * from this software without prior written permission. For written
034: * permission, please contact apache@apache.org.
035: *
036: * 5. Products derived from this software may not be called "Apache"
037: * nor may "Apache" appear in their names without prior written
038: * permission of the Apache Group.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
044: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
045: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
046: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Apache Software Foundation. For more
056: * information on the Apache Software Foundation, please see
057: * <http://www.apache.org/>.
058: *
059: * [Additional notices, if required by prior licensing conditions]
060: *
061: */
062:
063: package org.apache.catalina.users;
064:
065: import java.util.ArrayList;
066: import java.util.Iterator;
067: import org.apache.catalina.Group;
068: import org.apache.catalina.Role;
069: import org.apache.catalina.User;
070: import org.apache.catalina.UserDatabase;
071:
072: /**
073: * <p>Concrete implementation of {@link Group} for the
074: * {@link MemoryUserDatabase} implementation of {@link UserDatabase}.</p>
075: *
076: * @author Craig R. McClanahan
077: * @version $Revision: 1.5 $ $Date: 2002/02/10 08:06:20 $
078: * @since 4.1
079: */
080:
081: public class MemoryGroup extends AbstractGroup {
082:
083: // ----------------------------------------------------------- Constructors
084:
085: /**
086: * Package-private constructor used by the factory method in
087: * {@link MemoryUserDatabase}.
088: *
089: * @param database The {@link MemoryUserDatabase} that owns this group
090: * @param groupname Group name of this group
091: * @param description Description of this group
092: */
093: MemoryGroup(MemoryUserDatabase database, String groupname,
094: String description) {
095:
096: super ();
097: this .database = database;
098: setGroupname(groupname);
099: setDescription(description);
100:
101: }
102:
103: // ----------------------------------------------------- Instance Variables
104:
105: /**
106: * The {@link MemoryUserDatabase} that owns this group.
107: */
108: protected MemoryUserDatabase database = null;
109:
110: /**
111: * The set of {@link Role}s associated with this group.
112: */
113: protected ArrayList roles = new ArrayList();
114:
115: // ------------------------------------------------------------- Properties
116:
117: /**
118: * Return the set of {@link Role}s assigned specifically to this group.
119: */
120: public Iterator getRoles() {
121:
122: synchronized (roles) {
123: return (roles.iterator());
124: }
125:
126: }
127:
128: /**
129: * Return the {@link UserDatabase} within which this Group is defined.
130: */
131: public UserDatabase getUserDatabase() {
132:
133: return (this .database);
134:
135: }
136:
137: /**
138: * Return the set of {@link User}s that are members of this group.
139: */
140: public Iterator getUsers() {
141:
142: ArrayList results = new ArrayList();
143: Iterator users = database.getUsers();
144: while (users.hasNext()) {
145: MemoryUser user = (MemoryUser) users.next();
146: if (user.isInGroup(this )) {
147: results.add(user);
148: }
149: }
150: return (results.iterator());
151:
152: }
153:
154: // --------------------------------------------------------- Public Methods
155:
156: /**
157: * Add a new {@link Role} to those assigned specifically to this group.
158: *
159: * @param role The new role
160: */
161: public void addRole(Role role) {
162:
163: synchronized (roles) {
164: if (!roles.contains(role)) {
165: roles.add(role);
166: }
167: }
168:
169: }
170:
171: /**
172: * Is this group specifically assigned the specified {@link Role}?
173: *
174: * @param role The role to check
175: */
176: public boolean isInRole(Role role) {
177:
178: synchronized (roles) {
179: return (roles.contains(role));
180: }
181:
182: }
183:
184: /**
185: * Remove a {@link Role} from those assigned to this group.
186: *
187: * @param role The old role
188: */
189: public void removeRole(Role role) {
190:
191: synchronized (roles) {
192: roles.remove(role);
193: }
194:
195: }
196:
197: /**
198: * Remove all {@link Role}s from those assigned to this group.
199: */
200: public void removeRoles() {
201:
202: synchronized (roles) {
203: roles.clear();
204: }
205:
206: }
207:
208: /**
209: * <p>Return a String representation of this group in XML format.</p>
210: */
211: public String toString() {
212:
213: StringBuffer sb = new StringBuffer("<group groupname=\"");
214: sb.append(groupname);
215: sb.append("\"");
216: if (description != null) {
217: sb.append(" description=\"");
218: sb.append(description);
219: sb.append("\"");
220: }
221: synchronized (roles) {
222: if (roles.size() > 0) {
223: sb.append(" roles=\"");
224: int n = 0;
225: Iterator values = roles.iterator();
226: while (values.hasNext()) {
227: if (n > 0) {
228: sb.append(',');
229: }
230: n++;
231: sb.append((String) ((Role) values.next())
232: .getRolename());
233: }
234: sb.append("\"");
235: }
236: }
237: sb.append("/>");
238: return (sb.toString());
239:
240: }
241:
242: }
|