Package dan.security.acl

Source Code of dan.security.acl.AclGroupDomain

/*
* 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();
    }
}
TOP

Related Classes of dan.security.acl.AclGroupDomain

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.