001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/users/MemoryUser.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 User} 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 MemoryUser extends AbstractUser {
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 user
090: * @param username Logon username of the new user
091: * @param password Logon password of the new user
092: * @param fullName Full name of the new user
093: */
094: MemoryUser(MemoryUserDatabase database, String username,
095: String password, String fullName) {
096:
097: super ();
098: this .database = database;
099: setUsername(username);
100: setPassword(password);
101: setFullName(fullName);
102:
103: }
104:
105: // ----------------------------------------------------- Instance Variables
106:
107: /**
108: * The {@link MemoryUserDatabase} that owns this user.
109: */
110: protected MemoryUserDatabase database = null;
111:
112: /**
113: * The set of {@link Group}s that this user is a member of.
114: */
115: protected ArrayList groups = new ArrayList();
116:
117: /**
118: * The set of {@link Role}s associated with this user.
119: */
120: protected ArrayList roles = new ArrayList();
121:
122: // ------------------------------------------------------------- Properties
123:
124: /**
125: * Return the set of {@link Group}s to which this user belongs.
126: */
127: public Iterator getGroups() {
128:
129: synchronized (groups) {
130: return (groups.iterator());
131: }
132:
133: }
134:
135: /**
136: * Return the set of {@link Role}s assigned specifically to this user.
137: */
138: public Iterator getRoles() {
139:
140: synchronized (roles) {
141: return (roles.iterator());
142: }
143:
144: }
145:
146: /**
147: * Return the {@link UserDatabase} within which this User is defined.
148: */
149: public UserDatabase getUserDatabase() {
150:
151: return (this .database);
152:
153: }
154:
155: // --------------------------------------------------------- Public Methods
156:
157: /**
158: * Add a new {@link Group} to those this user belongs to.
159: *
160: * @param group The new group
161: */
162: public void addGroup(Group group) {
163:
164: synchronized (groups) {
165: if (!groups.contains(group)) {
166: groups.add(group);
167: }
168: }
169:
170: }
171:
172: /**
173: * Add a new {@link Role} to those assigned specifically to this user.
174: *
175: * @param role The new role
176: */
177: public void addRole(Role role) {
178:
179: synchronized (roles) {
180: if (!roles.contains(role)) {
181: roles.add(role);
182: }
183: }
184:
185: }
186:
187: /**
188: * Is this user in the specified group?
189: *
190: * @param group The group to check
191: */
192: public boolean isInGroup(Group group) {
193:
194: synchronized (groups) {
195: return (groups.contains(group));
196: }
197:
198: }
199:
200: /**
201: * Is this user specifically assigned the specified {@link Role}? This
202: * method does <strong>NOT</strong> check for roles inherited based on
203: * {@link Group} membership.
204: *
205: * @param role The role to check
206: */
207: public boolean isInRole(Role role) {
208:
209: synchronized (roles) {
210: return (roles.contains(role));
211: }
212:
213: }
214:
215: /**
216: * Remove a {@link Group} from those this user belongs to.
217: *
218: * @param group The old group
219: */
220: public void removeGroup(Group group) {
221:
222: synchronized (groups) {
223: groups.remove(group);
224: }
225:
226: }
227:
228: /**
229: * Remove all {@link Group}s from those this user belongs to.
230: */
231: public void removeGroups() {
232:
233: synchronized (groups) {
234: groups.clear();
235: }
236:
237: }
238:
239: /**
240: * Remove a {@link Role} from those assigned to this user.
241: *
242: * @param role The old role
243: */
244: public void removeRole(Role role) {
245:
246: synchronized (roles) {
247: roles.remove(role);
248: }
249:
250: }
251:
252: /**
253: * Remove all {@link Role}s from those assigned to this user.
254: */
255: public void removeRoles() {
256:
257: synchronized (roles) {
258: roles.clear();
259: }
260:
261: }
262:
263: /**
264: * <p>Return a String representation of this user in XML format.</p>
265: *
266: * <p><strong>IMPLEMENTATION NOTE</strong> - For backwards compatibility,
267: * the reader that processes this entry will accept either
268: * <code>username</code> or </code>name</code> for the username
269: * property.</p>
270: */
271: public String toString() {
272:
273: StringBuffer sb = new StringBuffer("<user username=\"");
274: sb.append(username);
275: sb.append("\" password=\"");
276: sb.append(password);
277: sb.append("\"");
278: if (fullName != null) {
279: sb.append(" fullName=\"");
280: sb.append(fullName);
281: sb.append("\"");
282: }
283: synchronized (groups) {
284: if (groups.size() > 0) {
285: sb.append(" groups=\"");
286: int n = 0;
287: Iterator values = groups.iterator();
288: while (values.hasNext()) {
289: if (n > 0) {
290: sb.append(',');
291: }
292: n++;
293: sb.append(((Group) values.next()).getGroupname());
294: }
295: sb.append("\"");
296: }
297: }
298: synchronized (roles) {
299: if (roles.size() > 0) {
300: sb.append(" roles=\"");
301: int n = 0;
302: Iterator values = roles.iterator();
303: while (values.hasNext()) {
304: if (n > 0) {
305: sb.append(',');
306: }
307: n++;
308: sb.append(((Role) values.next()).getRolename());
309: }
310: sb.append("\"");
311: }
312: }
313: sb.append("/>");
314: return (sb.toString());
315:
316: }
317:
318: }
|