org.jboss.security.mapping.providers.MappingProviderUtil Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.security.mapping.providers;
import java.lang.reflect.Constructor;
import java.security.Principal;
import java.security.acl.Group;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.StringTokenizer;
import org.jboss.security.PicketBoxLogger;
import org.jboss.security.PicketBoxMessages;
import org.jboss.security.SimplePrincipal;
/**
* Utility class for Mapping Providers
* @author Anil Saldhana
* @since Oct 10, 2006
* @version $Revision$
*/
public class MappingProviderUtil
{
/**
* Add principals passed via an enumeration into a group
* @param grp
* @param en
* @return
*/
public static Group addPrincipals(Group grp, Enumeration extends Principal> en)
{
while(en.hasMoreElements())
grp.addMember(en.nextElement());
return grp;
}
/**
* Add the roles into the Group
* @param roles Group of roles
* @param addRoles
* @return Group with the added roles
*/
public static Group addRoles(Group roles, String[] addRoles)
{
Class> pClass = getPrincipalClass(roles);
for(String str:addRoles)
{
roles.addMember(instantiatePrincipal(pClass,str));
}
return roles;
}
/**
* Given a comma-separated list of roles, return a string array
* @param str
* @return
*/
public static String[] getRolesFromCommaSeparatedString(String str)
{
if(str == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("str");
StringTokenizer st = new StringTokenizer(str,",");
int numTokens = st != null ? st.countTokens() : 0;
String[] tokens = new String[numTokens];
for(int i = 0; i < numTokens; i++)
{
tokens[i] = st.nextToken();
}
return tokens;
}
/**
* Instantiate a Principal representing a principal
* @param cls principal class
* @param role Name of the role
* @return
*/
public static Principal instantiatePrincipal(Class> cls, String role)
{
Principal p = null;
try
{
Constructor> ctr = cls.getConstructor(new Class[] {String.class});
p = (Principal)ctr.newInstance(new Object[]{role});
}
catch (Exception e)
{
PicketBoxLogger.LOGGER.debugIgnoredException(e);
}
return p;
}
/**
* Remove all the principals from the group
* @param grp
* @return
*/
public static Group removePrincipals(Group grp)
{
HashSet removeset = new HashSet();
Enumeration extends Principal> en = grp.members();
while(en.hasMoreElements())
{
removeset.add(en.nextElement());
}
for(Principal p:removeset)
grp.removeMember(p);
return grp;
}
/**
* Remove the roles from the Group
* @param roles Group of roles
* @param removeRoles
* @return Group with roles removed
*/
public static Group removeRoles(Group roles, String[] removeRoles)
{
//Assume that the roles all belong to the same principal class
Class> pClass = getPrincipalClass(roles);
for(String str:removeRoles)
{
roles.removeMember(instantiatePrincipal(pClass,str));
}
return roles;
}
/**
* Replace the principals in first group with those in the second
* @param fg
* @param sg
* @return
*/
public static Group replacePrincipals(Group fg, Group sg)
{
return addPrincipals( removePrincipals(fg),sg.members());
}
private static Class> getPrincipalClass(Group roles)
{
//Assume that the roles all belong to the same principal class
Class> principalClass = SimplePrincipal.class;
Enumeration extends Principal> en = roles.members();
if(en.hasMoreElements())
{
principalClass = roles.members().nextElement().getClass();
}
return principalClass;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy