1 30 31 34 package com.nightlabs.ipanema.security; 35 36 import java.util.Collection ; 37 import java.util.HashMap ; 38 import java.util.Iterator ; 39 import java.util.Map ; 40 41 import org.apache.log4j.Logger; 42 43 46 47 55 public class UserGroup extends User 56 { 57 public static Logger LOGGER = Logger.getLogger(UserGroup.class); 58 59 public UserGroup() { } 60 61 64 public UserGroup(String _userID) { 65 super(_userID); 66 if (USERTYPE_USERGROUP != getUserType()) 67 throw new IllegalArgumentException ("UserID must start with \""+USERID_PREFIX_TYPE_USERGROUP+"\" to create a user group!"); 68 } 69 70 74 public UserGroup(String _organisationID, String _userID) { 75 super(_organisationID, _userID); 76 if (USERTYPE_USERGROUP != getUserType()) 77 throw new IllegalArgumentException ("UserID must start with \""+USERID_PREFIX_TYPE_USERGROUP+"\" to create a user group!"); 78 } 79 80 96 private Map users = new HashMap (); 97 98 public void addUser(User user) 99 { 100 if (user == null) 101 throw new NullPointerException ("user must not be null!"); 102 103 if (user instanceof UserGroup) 104 throw new IllegalArgumentException ("A user group cannot contain another user group!"); 105 106 if (users.get(user.getUserID()) != null) 107 return; 108 109 for (Iterator itUserGroupRefs = getUserRefs().iterator(); itUserGroupRefs.hasNext(); ) { 113 UserRef userGroupRef = (UserRef) itUserGroupRefs.next(); 114 115 for (Iterator itRoleRefs = userGroupRef.getRoleRefs().iterator(); itRoleRefs.hasNext(); ) { 117 RoleRef roleRef = (RoleRef)itRoleRefs.next(); 118 UserRef userRef = roleRef.getAuthority()._createUserRef(user, false); 121 userRef.incrementUserGroupReferenceCount(1); 122 123 userRef._addRole(roleRef.getRole(), roleRef.getReferenceCount()); 125 } 126 } 127 128 user._addUserGroup(this); 129 users.put(user.getUserID(), user); 130 } 131 132 public void removeUser(String userID) 133 { 134 if (userID == null) 135 throw new NullPointerException ("userID must not be null!"); 136 137 User user = (User)users.get(userID); 138 if (user == null) 139 return; 140 141 for (Iterator itUserGroupRefs = getUserRefs().iterator(); itUserGroupRefs.hasNext(); ) { 145 UserRef userGroupRef = (UserRef) itUserGroupRefs.next(); 146 for (Iterator itRoleRefs = userGroupRef.getRoleRefs().iterator(); itRoleRefs.hasNext(); ) { 148 RoleRef roleRef = (RoleRef)itRoleRefs.next(); 149 UserRef userRef = roleRef.getAuthority().getUserRef(userID); 152 if(userRef == null) continue; 154 155 if (userID == null) 157 LOGGER.warn("UserGroup \""+getUserID()+"\" exists in Authority \""+roleRef.getAuthority().getAuthorityID()+"\", but the Authority does not contain a UserRef for User \""+userID+"\"!", new IllegalStateException ("UserRef missing.")); 158 else 159 userRef._removeRole(roleRef.getRole(), roleRef.getReferenceCount()); 160 161 userRef.decrementUserGroupReferenceCount(1); 163 roleRef.getAuthority()._destroyUserRef(userID, false); 165 } 166 } 167 user._removeUserGroup(this.getUserID()); 168 users.remove(userID); 169 } 170 171 174 protected void _addUserRef(UserRef userGroupRef) { 175 if (!(userGroupRef instanceof UserGroupRef)) 176 throw new IllegalArgumentException ("userGroupRef is not an instance of UserGroupRef!"); 177 178 super._addUserRef(userGroupRef); 179 180 for (Iterator itUsers = getUsers().iterator(); itUsers.hasNext(); ) { 183 User user = (User)itUsers.next(); 184 UserRef userRef = userGroupRef.getAuthority()._createUserRef(user, false); 185 userRef.incrementUserGroupReferenceCount(1); 186 } 187 188 } 198 201 protected void _removeUserRef(String authorityID) { 202 UserRef userGroupRef = getUserRef(authorityID); 203 if (userGroupRef == null) { 204 LOGGER.warn("Call to _removeUserRef(\""+authorityID+"\"), but no userGroupRef existent for userGroup \""+getUserID()+"\" in this authority.", new IllegalStateException ("UserGroupRef missing.")); 205 return; 206 } 207 208 Authority authority = userGroupRef.getAuthority(); 209 210 for (Iterator itUsers = getUsers().iterator(); itUsers.hasNext(); ) { 211 User user = (User)itUsers.next(); 212 UserRef userRef = userGroupRef.getAuthority().getUserRef(user.getUserID()); 213 if (userRef == null) 214 LOGGER.warn("UserGroup \""+getUserID()+"\" existed in Authority \""+authorityID+"\", but the Authority does not contain a UserRef for User \""+user.getUserID()+"\"!", new IllegalStateException ("UserRef missing.")); 215 else { 216 userRef.decrementUserGroupReferenceCount(1); 218 authority._destroyUserRef(user.getUserID(), false); 220 } 221 } 222 223 237 super._removeUserRef(authorityID); 238 } 239 240 public Collection getUsers() 241 { 242 return users.values(); 243 } 244 245 public static final int INCLUDE_USERS = 0x4; 246 249 public void makeTransient(int includeMask) { 250 Map tmpUsers = new HashMap (); 251 252 if ((includeMask & INCLUDE_USERS) != 0) { 253 for (Iterator it = users.values().iterator(); it.hasNext(); ) { 254 User user = (User)it.next(); 255 user.makeTransient(INCLUDE_NONE); 256 tmpUsers.put(user.getUserID(), user); 257 } 258 } 259 260 super.makeTransient(includeMask); 261 262 this.users = tmpUsers; 263 } 264 } 265 | Popular Tags |