001: /**
002: * EasyBeans
003: * Copyright (C) 2006 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: JGroup.java 1970 2007-10-16 11:49:25Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.security.struct;
025:
026: import java.io.Serializable;
027: import java.security.Principal;
028: import java.security.acl.Group;
029: import java.util.Enumeration;
030: import java.util.Vector;
031:
032: /**
033: * This class represents all the roles of a principal (group of principals).
034: * These roles are added to the Subject
035: * @author Florent Benoit
036: */
037: public class JGroup implements Group, Serializable {
038:
039: /**
040: * UID for serialization.
041: */
042: private static final long serialVersionUID = 7035827226889396034L;
043:
044: /**
045: * Name of this group.
046: */
047: private String groupName = null;
048:
049: /**
050: * Members of this group.
051: */
052: private Vector<Principal> members = null;
053:
054: /**
055: * Build a new group with the following name.
056: * @param groupName name of the group
057: */
058: public JGroup(final String groupName) {
059: this .groupName = groupName;
060: this .members = new Vector<Principal>();
061: }
062:
063: /**
064: * Compares this principal to the specified object. Returns true if the
065: * object passed in matches the principal represented by the implementation
066: * of this interface.
067: * @param another principal to compare with.
068: * @return true if the principal passed in is the same as that encapsulated
069: * by this principal, and false otherwise.
070: */
071: @Override
072: public boolean equals(final Object another) {
073: if (!(another instanceof Group)) {
074: return false;
075: }
076: // else
077: return groupName.equals(((Group) another).getName());
078: }
079:
080: /**
081: * Returns a string representation of this principal.
082: * @return a string representation of this principal.
083: */
084: @Override
085: public String toString() {
086: return "Principal[" + groupName + "]";
087: }
088:
089: /**
090: * Returns a hashcode for this principal.
091: * @return a hashcode for this principal.
092: */
093: @Override
094: public int hashCode() {
095: return groupName.hashCode();
096: }
097:
098: /**
099: * Returns the name of this principal.
100: * @return the name of this principal.
101: */
102: public String getName() {
103: return groupName;
104: }
105:
106: /**
107: * Adds the specified member to the group.
108: * @param user the principal to add to this group.
109: * @return true if the member was successfully added, false if the principal
110: * was already a member.
111: */
112: public boolean addMember(final Principal user) {
113: if (isMember(user)) {
114: return false;
115: }
116: // else
117: members.add(user);
118: return true;
119: }
120:
121: /**
122: * Removes the specified member from the group.
123: * @param user the principal to remove from this group.
124: * @return true if the principal was removed, or false if the principal was
125: * not a member.
126: */
127: public boolean removeMember(final Principal user) {
128: if (!isMember(user)) {
129: return false;
130: }
131: // else
132: members.remove(user);
133: return true;
134: }
135:
136: /**
137: * Returns true if the passed principal is a member of the group. This
138: * method does a recursive search, so if a principal belongs to a group
139: * which is a member of this group, true is returned.
140: * @param member the principal whose membership is to be checked.
141: * @return true if the principal is a member of this group, false otherwise.
142: */
143: public boolean isMember(final Principal member) {
144: return members.contains(member);
145: }
146:
147: /**
148: * Returns an enumeration of the members in the group. The returned objects
149: * can be instances of either Principal or Group (which is a subclass of
150: * Principal).
151: * @return an enumeration of the group members.
152: */
153: public Enumeration<? extends Principal> members() {
154: return members.elements();
155: }
156:
157: }
|