/*
* File: AclGroupDomain.java
* Author: Daniel Rogers
* Created on Feb 20, 2008
*
*/
package dan.security.acl;
import java.security.Principal;
import java.security.acl.Group;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
public class AclGroupDomain implements GroupDomain {
List groups = new ArrayList();
List users = new ArrayList();
// ----------------------------------------------- Registration
public void add(Principal principal) {
if (principal instanceof Group)
groups.add(principal);
else
users.add(principal);
}
public void remove(Principal principal) {
if (principal instanceof Group)
groups.remove(principal);
else
users.remove(principal);
//remove all references to group/user
Group group;
for (int i=0; i<groups.size(); i++) {
group = (Group)groups.get(i);
if (group.isMember(principal))
group.removeMember(principal);
}
}
public Iterator iterateAll() {
//TODO: optimize this
List all = new ArrayList();
all.addAll(groups);
all.addAll(users);
return all.iterator();
}
public Iterator iterateGroups() {
return groups.iterator();
}
public Iterator iterateUsers() {
return users.iterator();
}
// ------------------------------------------------ Implementation
public void addToGroup(Principal group, Principal user) {
if (group instanceof Group)
((Group)group).addMember(user);
else
throw new IllegalArgumentException("Principal object representing a group must implement java.security.acl.Group");
}
public void removeFromGroup(Principal group, Principal user) {
if (group instanceof Group)
((Group)group).removeMember(user);
else
throw new IllegalArgumentException("Principal object representing a group must implement java.security.acl.Group");
}
public boolean isInGroup(Principal group, Principal user) {
if (group instanceof Group)
return ((Group)group).isMember(user);
else
throw new IllegalArgumentException("Principal object representing a group must implement java.security.acl.Group");
}
public Principal [] getGroupsFor(Principal user) {
List userGroups = new ArrayList();
for (int i=0; i<groups.size(); i++) {
Group group = (Group)groups.get(i);
if (group.isMember(user))
userGroups.add(group);
}
return (Group [])userGroups.toArray(new Group [] {});
}
public String toString() {
StringBuffer s = new StringBuffer();
s.append("Users:\n");
Iterator users = iterateUsers();
if (!users.hasNext())
s.append(" (none)\n");
while (users.hasNext())
s.append(" ").append(users.next()).append("\n");
s.append("\n");
s.append("Groups:\n");
Iterator groups = iterateGroups();
if (!groups.hasNext())
s.append(" (none)\n");
while (groups.hasNext()) {
Group group = (Group)groups.next();
s.append(" ").append(group.getName()).append("\n");
java.util.Enumeration members = group.members();
while (members.hasMoreElements())
s.append(" ").append(members.nextElement()).append("\n");
}
s.append("\n");
return s.toString();
}
}