[jboss-cvs] JBossAS SVN: r67128 - in projects/metadata/trunk/src: main/java/org/jboss/metadata/javaee/spec and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Nov 15 07:08:55 EST 2007


Author: wolfc
Date: 2007-11-15 07:08:54 -0500 (Thu, 15 Nov 2007)
New Revision: 67128

Added:
   projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/ejb/JBoss50_testPrincipalVersusRolesMap.xml
Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java
Log:
JBAS-4506: fixed principal versus roles map

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java	2007-11-15 11:48:43 UTC (rev 67127)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossAssemblyDescriptorMetaData.java	2007-11-15 12:08:54 UTC (rev 67128)
@@ -325,6 +325,7 @@
     * @return the security roles containing the principal or null for no roles
     * @throws IllegalArgumentException for a null user name
     */
+   @Deprecated
    public SecurityRolesMetaData getSecurityRolesByPrincipal(String userName)
    {
       if (userName == null)
@@ -356,25 +357,9 @@
     */
    public Map<String,Set<String>> getPrincipalVersusRolesMap()
    {
-	  Map<String,Set<String>> principalRolesMap = new HashMap<String,Set<String>>();
-	  Set<String> roleNameSet = securityRoles.keySet();
-	  for(String rolename: roleNameSet)
-	  {
-		  SecurityRoleMetaData srm = (SecurityRoleMetaData) securityRoles.get(rolename);
-	      Set<String> principals = srm.getPrincipals();
-	      if(principals == null)
-	    	  break;
-	      for(String pr:principals)
-	      {
-	         Set<String> roleset = (Set<String>)principalRolesMap.get(pr);
-	         if(roleset == null)
-	           roleset = new HashSet<String>();
-	         if(!roleset.contains(rolename))
-	           roleset.add(rolename);
-	         principalRolesMap.put(pr, roleset);
-	      } 
-	  }  
-	  return principalRolesMap;
+      if(securityRoles == null)
+         return null;
+      return securityRoles.getPrincipalVersusRolesMap();
    }
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java	2007-11-15 11:48:43 UTC (rev 67127)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/javaee/spec/SecurityRolesMetaData.java	2007-11-15 12:08:54 UTC (rev 67128)
@@ -22,7 +22,9 @@
 package org.jboss.metadata.javaee.spec;
 
 import java.util.Collections;
-import java.util.LinkedHashSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
@@ -39,6 +41,9 @@
    /** The serialVersionUID */
    private static final long serialVersionUID = 4551308976124434096L;
 
+   private Map<String,Set<String>> principalVersusRolesMap = new HashMap<String, Set<String>>();
+   private Map<String,Set<String>> readOnlyPrincipalVersusRolesMap = Collections.unmodifiableMap(principalVersusRolesMap);
+   
    /**
     * Create a new SecurityRolesMetaData.
     */
@@ -47,6 +52,32 @@
       super("role name for security role");
    }
 
+   @Override
+   protected void addNotification(SecurityRoleMetaData added)
+   {
+      super.addNotification(added);
+      
+      Set<String> principals = added.getPrincipals();
+      if(principals == null)
+         return;
+      
+      for(String principal : principals)
+      {
+         Set<String> roles = principalVersusRolesMap.get(principal);
+         if(roles == null)
+         {
+            roles = new HashSet<String>();
+            principalVersusRolesMap.put(principal, roles);
+         }
+         roles.add(added.getRoleName());
+      }
+   }
+   
+   public Map<String,Set<String>> getPrincipalVersusRolesMap()
+   {
+      return readOnlyPrincipalVersusRolesMap;
+   }
+   
    /**
     * Get the security roles by principal
     * 
@@ -54,6 +85,7 @@
     * @return the security roles containing the principal or null for no roles
     * @throws IllegalArgumentException for a null user name
     */
+   @Deprecated
    public SecurityRolesMetaData getSecurityRolesByPrincipal(String userName)
    {
       if (userName == null)
@@ -80,15 +112,10 @@
    {
       if (userName == null)
          throw new IllegalArgumentException("Null userName");
-      if (isEmpty())
+      Set<String> roles = readOnlyPrincipalVersusRolesMap.get(userName);
+      if(roles == null)
          return Collections.emptySet();
-      Set<String> result = new LinkedHashSet<String>();
-      for (SecurityRoleMetaData role : this)
-      {
-         if (role.hasPrincipal(userName))
-            result.add(role.getRoleName());
-      }
-      return result;
+      return roles;
    }
 
    /**
@@ -132,4 +159,22 @@
       }
    }
 
+   @Override
+   protected void removeNotification(SecurityRoleMetaData removed)
+   {
+      super.removeNotification(removed);
+      
+      Set<String> principals = removed.getPrincipals();
+      if(principals == null)
+         return;
+      
+      for(String principal : principals)
+      {
+         Set<String> roles = principalVersusRolesMap.get(principal);
+         if(roles != null)
+         {
+            roles.remove(removed.getRoleName());
+         }
+      }
+   }
 }

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java	2007-11-15 11:48:43 UTC (rev 67127)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/ejb/JBoss50UnitTestCase.java	2007-11-15 12:08:54 UTC (rev 67128)
@@ -21,8 +21,10 @@
 */
 package org.jboss.test.metadata.ejb;
 
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Set;
 
 import junit.framework.Test;
@@ -37,6 +39,7 @@
 import org.jboss.metadata.ejb.jboss.InvokerProxyBindingsMetaData;
 import org.jboss.metadata.ejb.jboss.JBoss50DTDMetaData;
 import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
+import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
 import org.jboss.metadata.ejb.jboss.JBossConsumerBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
@@ -788,4 +791,27 @@
       assertEquals("topic/testTopic", jmsRef2.getJndiName());
    }
    
+   public void testPrincipalVersusRolesMap() throws Exception
+   {
+      JBossMetaData jbossXmlMetaData = unmarshal();
+      JBossAssemblyDescriptorMetaData assemblyDescriptor = jbossXmlMetaData.getAssemblyDescriptor();
+      assertNotNull(assemblyDescriptor);
+      Map<String,Set<String>> principalVersusRolesMap = assemblyDescriptor.getPrincipalVersusRolesMap();
+      assertNotNull(principalVersusRolesMap);
+      Map<String,Set<String>> expected = new HashMap<String, Set<String>>();
+      expected.put("principal1", toSet("test1", "test2", "test3"));
+      expected.put("principal2", toSet("test2", "test3"));
+      expected.put("principal3", toSet("test3"));
+      assertEquals(expected, principalVersusRolesMap);
+   }
+   
+   private <T> Set<T> toSet(T ... obj)
+   {
+      Set<T> set = new HashSet<T>();
+      for(T o : obj)
+      {
+         set.add(o);
+      }
+      return set;
+   }
 }

Added: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/ejb/JBoss50_testPrincipalVersusRolesMap.xml
===================================================================
--- projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/ejb/JBoss50_testPrincipalVersusRolesMap.xml	                        (rev 0)
+++ projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/ejb/JBoss50_testPrincipalVersusRolesMap.xml	2007-11-15 12:08:54 UTC (rev 67128)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+<jboss xmlns="http://www.jboss.com/xml/ns/javaee"
+       xmlns:jee="http://java.sun.com/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
+       version="3.0"
+       id="jboss-id">
+   <assembly-descriptor>
+      <security-role>
+         <role-name>test1</role-name>
+         <principal-name>principal1</principal-name>
+      </security-role>
+      <security-role>
+         <role-name>test2</role-name>
+         <principal-name>principal1</principal-name>
+         <principal-name>principal2</principal-name>
+      </security-role>
+      <security-role>
+         <role-name>test3</role-name>
+         <principal-name>principal1</principal-name>
+         <principal-name>principal2</principal-name>
+         <principal-name>principal3</principal-name>
+      </security-role>
+   </assembly-descriptor>
+</jboss>
\ No newline at end of file


Property changes on: projects/metadata/trunk/src/test/resources/org/jboss/test/metadata/ejb/JBoss50_testPrincipalVersusRolesMap.xml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native




More information about the jboss-cvs-commits mailing list