package org.jboss.seam.security;
import java.io.Serializable;
import java.security.Principal;
import java.security.acl.Group;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
/**
* Implementation of the Group interface, used for holding roles etc.
*
* @author Shane Bryzak
*/
public class SimpleGroup implements Group, Serializable
{
private static final long serialVersionUID = 5766373925836425908L;
/**
* The name of the group
*/
private String name;
/**
* The members of this group
*/
private Set<Principal> members = new HashSet<Principal>();
public SimpleGroup(String name)
{
this.name = name;
}
public boolean addMember(Principal user)
{
return members.add(user);
}
public boolean isMember(Principal member)
{
if ( members.contains(member) )
{
return true;
}
else
{
for (Principal m : members)
{
if (m instanceof Group && ((Group) m).isMember(member))
{
return true;
}
}
}
return false;
}
public Enumeration<? extends Principal> members()
{
return Collections.enumeration(members);
}
public boolean removeMember(Principal user)
{
return members.remove(user);
}
public String getName()
{
return name;
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof SimpleGroup)
{
SimpleGroup other = (SimpleGroup) obj;
return other.name.equals(name);
}
else
{
return false;
}
}
@Override
public int hashCode()
{
return name.hashCode();
}
}