You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/09/14 01:24:56 UTC

svn commit: r443165 - in /maven/shared/trunk/maven-user: maven-user-acegi/src/main/java/org/apache/maven/user/acegi/ maven-user-acegi/src/test/java/org/apache/maven/user/acegi/ maven-user-controller/src/main/java/org/apache/maven/user/controller/action...

Author: carlos
Date: Wed Sep 13 16:24:55 2006
New Revision: 443165

URL: http://svn.apache.org/viewvc?view=rev&rev=443165
Log:
[CONTINUUM-857] Allow several groups per user
Submitted by: Lester Ecarma

Added:
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/addRole.jsp
      - copied, changed from r443163, maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/addRole.jsp
Removed:
    maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/AddUserRoleAction.java
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/addRole.jsp
Modified:
    maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/AcegiUserManager.java
    maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java
    maven/shared/trunk/maven-user/maven-user-acegi/src/test/java/org/apache/maven/user/acegi/MavenUserDetailsServiceTest.java
    maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java
    maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserGroupAction.java
    maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/localization/MavenUser.properties
    maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/org/apache/maven/user/webapp/xwork.xml
    maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/UserManager.java
    maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java
    maven/shared/trunk/maven-user/maven-user-model/src/main/mdo/user.xml
    maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/delete.jsp
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/edit.jsp
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/list.jsp
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/userForm.jsp

Modified: maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/AcegiUserManager.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/AcegiUserManager.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/AcegiUserManager.java (original)
+++ maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/AcegiUserManager.java Wed Sep 13 16:24:55 2006
@@ -204,4 +204,9 @@
     {
         return getUserManager().getSecurityPolicy();
     }
+
+    public UserGroup getDefaultUserGroup()
+    {
+        return getUserManager().getDefaultUserGroup();
+    }
 }

Modified: maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java (original)
+++ maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java Wed Sep 13 16:24:55 2006
@@ -29,6 +29,7 @@
 import org.acegisecurity.userdetails.UsernameNotFoundException;
 import org.apache.maven.user.model.Permission;
 import org.apache.maven.user.model.User;
+import org.apache.maven.user.model.UserGroup;
 import org.apache.maven.user.model.UserManager;
 import org.apache.maven.user.model.UserSecurityPolicy;
 import org.springframework.dao.DataAccessException;
@@ -87,7 +88,14 @@
      */
     public UserDetails getUserDetails( User user )
     {
-        List permissions = user.getGroup().getPermissions();
+        List groups = user.getGroups();
+        List permissions = new ArrayList();
+        Iterator groupsIt = groups.iterator();
+        while ( groupsIt.hasNext() )
+        {
+            UserGroup group = (UserGroup) groupsIt.next();
+            permissions.addAll( group.getPermissions() );
+        }
 
         List grantedAuthorities = new ArrayList( permissions.size() + 1 );
         Iterator it = permissions.iterator();
@@ -127,4 +135,4 @@
 
         return userDetails;
     }
-}
+    }

Modified: maven/shared/trunk/maven-user/maven-user-acegi/src/test/java/org/apache/maven/user/acegi/MavenUserDetailsServiceTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-acegi/src/test/java/org/apache/maven/user/acegi/MavenUserDetailsServiceTest.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-acegi/src/test/java/org/apache/maven/user/acegi/MavenUserDetailsServiceTest.java (original)
+++ maven/shared/trunk/maven-user/maven-user-acegi/src/test/java/org/apache/maven/user/acegi/MavenUserDetailsServiceTest.java Wed Sep 13 16:24:55 2006
@@ -109,7 +109,7 @@
         User mavenUser = new User();
         mavenUser.setUsername( "username" );
         mavenUser.setEncodedPassword( shaPassword );
-        mavenUser.setGroup( group );
+        mavenUser.addGroup( group );
 
         mavenUser.setLastPasswordChange( new Date() );
 

Modified: maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java (original)
+++ maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java Wed Sep 13 16:24:55 2006
@@ -23,7 +23,6 @@
 
 import org.apache.maven.user.model.PasswordRuleViolationException;
 import org.apache.maven.user.model.PasswordRuleViolations;
-import org.apache.maven.user.model.Permission;
 import org.apache.maven.user.model.User;
 import org.apache.maven.user.model.UserGroup;
 import org.apache.maven.user.model.UserManager;
@@ -57,16 +56,6 @@
 
     private UserGroup userGroup;
 
-    private List staticPermissions;
-
-    private List availablePermissions;
-
-    private Permission staticPermission;
-
-    private Permission permission;
-
-    private String permissionName;
-
     private boolean addMode = false;
 
     private String username;
@@ -77,10 +66,12 @@
 
     private String email;
 
-    private List permissions;
-
     private HttpServletRequest request;
 
+    private List groups;
+
+    private List allGroups;
+    
     public String execute()
         throws Exception
     {
@@ -103,14 +94,13 @@
         }
         if ( addMode )
         {
-            userGroup = new UserGroup();
-            userGroup.setName( username );
+            userGroup = userManager.getDefaultUserGroup();
 
             user = new User();
             user.setUsername( username );
             user.setPassword( password );
             user.setEmail( email );
-            user.setGroup( userGroup );
+            user.addGroup( userGroup );
             try
             {
                 userManager.addUser( user );
@@ -131,8 +121,8 @@
             user.setUsername( username );
             user.setPassword( password );
             user.setEmail( email );
-            permissions = (List) request.getSession().getAttribute( "permissions" );
-            user.getGroup().setPermissions( permissions );
+            user.setGroups( groups );
+            
             try
             {
                 userManager.updateUser( user );
@@ -152,7 +142,6 @@
         request.getSession().removeAttribute( "username" );
         request.getSession().removeAttribute( "password" );
         request.getSession().removeAttribute( "email" );
-        request.getSession().removeAttribute( "permissions" );
 
         return SUCCESS;
     }
@@ -169,13 +158,9 @@
     {
         addMode = false;
         user = userManager.getUser( username );
-        // password = user.getPassword(); don't access the password
         email = user.getEmail();
-        permissions = user.getGroup().getPermissions();
-        if ( permissions.size() == 1 )
-        {
-            permissionName = ( (Permission) permissions.get( 0 ) ).getName();
-        }
+        groups = user.getGroups();
+        allGroups = userManager.getUserGroups();
 
         return INPUT;
     }
@@ -187,134 +172,12 @@
         user = userManager.getMyUser();
         username = user.getUsername();
         email = user.getEmail();
-        permissions = user.getGroup().getPermissions();
+        groups = user.getGroups();
+        allGroups = userManager.getUserGroups();
     
         return INPUT;
     }
-
-    public String doGetAvailablePermissions()
-        throws Exception
-    {
-        int i, j;
-        availablePermissions = new ArrayList();
-        staticPermissions = userManager.getPermissions();
-        permissions = (List) request.getSession().getAttribute( "permissions" );
-        if ( permissions == null || permissions.size() == 0 )
-        {
-            availablePermissions.addAll( staticPermissions );
-        }
-        else
-        {
-            for ( i = 0; i < staticPermissions.size(); i++ )
-            {
-                staticPermission = (Permission) staticPermissions.get( i );
-                for ( j = 0; j < permissions.size(); j++ )
-                {
-                    permission = (Permission) permissions.get( j );
-                    if ( permission.getName().equalsIgnoreCase( staticPermission.getName() ) )
-                    {
-                        break;
-                    }
-                }
-                if ( j >= permissions.size() )
-                {
-                    availablePermissions.add( staticPermission );
-                }
-            }
-        }
-
-        request.getSession().setAttribute( "addMode", Boolean.valueOf( addMode ) );
-        request.getSession().setAttribute( "username", username );
-        request.getSession().setAttribute( "password", password );
-        request.getSession().setAttribute( "email", email );
-
-        return "permissions";
-    }
-
-    public String doAddPermission()
-        throws Exception
-    {
-        staticPermissions = userManager.getPermissions();
-        int i, j;
-        for ( i = 0; i < staticPermissions.size(); i++ )
-        {
-            permission = (Permission) staticPermissions.get( i );
-            if ( permission.getName().equalsIgnoreCase( permissionName ) )
-            {
-                permissions = (List) request.getSession().getAttribute( "permissions" );
-                if ( permissions == null )
-                {
-                    permissions = new ArrayList();
-                    permissions.add( permission );
-                }
-                else
-                {
-                    for ( j = 0; j < permissions.size(); j++ )
-                    {
-                        Permission permission = (Permission) permissions.get( j );
-                        if ( permission.getName().equalsIgnoreCase( permissionName ) )
-                        {
-                            break;
-                        }
-                    }
-                    if ( j >= permissions.size() )
-                    {
-                        permissions.add( permission );
-                    }
-                }
-                if ( permissions.size() == 1 )
-                {
-                    permissionName = ( (Permission) permissions.get( 0 ) ).getName();
-                }
-                break;
-            }
-        }
-
-        addMode = ( (Boolean) request.getSession().getAttribute( "addMode" ) ).booleanValue();
-        username = (String) request.getSession().getAttribute( "username" );
-        password = (String) request.getSession().getAttribute( "password" );
-        email = (String) request.getSession().getAttribute( "email" );
-
-        return INPUT;
-    }
-
-    public String doDeletePermission()
-        throws Exception
-    {
-        int i = 0;
-        permissions = (List) request.getSession().getAttribute( "permissions" );
-        for ( ; i < permissions.size(); i++ )
-        {
-            permission = (Permission) permissions.get( i );
-            if ( permission.getName().equalsIgnoreCase( permissionName ) )
-            {
-                permissions.remove( i );
-                break;
-            }
-            if ( permissions.size() == 1 )
-            {
-                permissionName = ( (Permission) permissions.get( 0 ) ).getName();
-            }
-        }
-
-        return INPUT;
-    }
-
-    public List getAvailablePermissions()
-    {
-        return availablePermissions;
-    }
-
-    public String getPermissionName()
-    {
-        return permissionName;
-    }
-
-    public void setPermissionName( String permissionName )
-    {
-        this.permissionName = permissionName;
-    }
-
+    
     public boolean isAddMode()
     {
         return addMode;
@@ -363,13 +226,42 @@
         this.email = email;
     }
 
-    public List getPermissions()
+    public void setServletRequest( HttpServletRequest request )
     {
-        return this.permissions;
+        this.request = request;
     }
 
-    public void setServletRequest( HttpServletRequest request )
+    public List getGroups()
     {
-        this.request = request;
+        return groups;
+    }
+
+    public void setGroups( List sgroups )
+    {
+        groups = new ArrayList();
+        
+        for( int i = 0; i < sgroups.size(); i++)
+        {
+            UserGroup dgroup = userManager.getUserGroup( Integer.parseInt(sgroups.get(i).toString()) );
+            
+            groups.add( dgroup );
+        }
+    }
+    
+    public List getAllGroups()
+    {
+        return allGroups;
+    }
+
+    public int[] getSelectedGroups()
+    {
+        int[] selectedGroups = new int[groups.size()];
+        
+        for( int i = 0; i < groups.size(); i++)
+        {
+            selectedGroups[i] = ( (UserGroup) groups.get( i ) ).getId();
+        }
+        
+        return selectedGroups;
     }
 }

Modified: maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserGroupAction.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserGroupAction.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserGroupAction.java (original)
+++ maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserGroupAction.java Wed Sep 13 16:24:55 2006
@@ -124,7 +124,6 @@
     {
         addMode = false;
         userGroup = userManager.getUserGroup( id );
-        // password = user.getPassword(); don't access the password
         name = userGroup.getName();
         description = userGroup.getDescription();
         permissions = userGroup.getPermissions();
@@ -172,7 +171,6 @@
         request.getSession().setAttribute( "name", name );
         request.getSession().setAttribute( "description", description );
         
-
         return "permissions";
     }
 
@@ -241,6 +239,11 @@
                 permissionName = ( (Permission) permissions.get( 0 ) ).getName();
             }
         }
+
+        addMode = ( (Boolean) request.getSession().getAttribute( "addMode" ) ).booleanValue();
+        id = Integer.parseInt( (String) request.getSession().getAttribute( "id" ) );
+        name = (String) request.getSession().getAttribute( "name" );
+        description = (String) request.getSession().getAttribute( "description" );
 
         return INPUT;
     }

Modified: maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/localization/MavenUser.properties
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/localization/MavenUser.properties?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/localization/MavenUser.properties (original)
+++ maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/localization/MavenUser.properties Wed Sep 13 16:24:55 2006
@@ -50,6 +50,7 @@
 role.page.title = Roles List
 role.section.title = Roles List
 role.rolename = Roles
+user.group.header = Groups
 
 # ----------------------------------------------------------------------
 # Page: Add/Edit/DeleteUsergroups

Modified: maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/org/apache/maven/user/webapp/xwork.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/org/apache/maven/user/webapp/xwork.xml?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/org/apache/maven/user/webapp/xwork.xml (original)
+++ maven/shared/trunk/maven-user/maven-user-controller/src/main/resources/org/apache/maven/user/webapp/xwork.xml Wed Sep 13 16:24:55 2006
@@ -1,12 +1,9 @@
 <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
 
 <xwork>
-
   <package name="maven-user" extends="webwork-default" namespace="/user">
-
     <action name="edit" class="editUser">
       <result name="input">/user/edit.jsp</result>
-      <result name="permissions">/user/addRole.jsp</result>
       <result name="success" type="chain">list</result>
     </action>
 
@@ -28,14 +25,12 @@
       <result name="input">/user/edit.jsp</result>
       <result name="success" type="chain">list</result>
     </action>
-
   </package>
-
+  
   <package name="maven-user-group" extends="webwork-default" namespace="/user/group">
-
     <action name="edit" class="editUserGroup">
       <result name="input">/user/group/edit.jsp</result>
-      <result name="permissions">/user/addRole.jsp</result>
+      <result name="permissions">/user/group/addRole.jsp</result>
       <result name="success" type="chain">list</result>
     </action>
     
@@ -47,7 +42,5 @@
     <action name="list" class="listUserGroup">
       <result name="success">/user/group/list.jsp</result>
     </action>
-
   </package>
-
 </xwork>

Modified: maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/UserManager.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/UserManager.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/UserManager.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/UserManager.java Wed Sep 13 16:24:55 2006
@@ -120,7 +120,7 @@
     // ----------------------------------------------------------------------
 
     /**
-     * Perform login attempt to see if username and password are valid.
+     * Perform login attempt to see if username and password are valid. 
      * 
      * @deprecated use other services like maven-user-acegi to log in 
      * 
@@ -264,4 +264,11 @@
      * @return the security policy.
      */
     UserSecurityPolicy getSecurityPolicy();
+
+    /**
+     * Gets the default user group.
+     * 
+     * @return the default user group.
+     */
+    UserGroup getDefaultUserGroup();
 }

Modified: maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java Wed Sep 13 16:24:55 2006
@@ -64,6 +64,12 @@
      */
     private UserHolder userHolder;
 
+    /**
+     * @plexus.configuration default-value="user"
+     */
+    private String defaultGroupName = "user"; 
+    //TODO get this !#$#!@$#!@$ plexus injection to work!!!
+
     // ----------------------------------------------------------------------
     // Component Lifecycle
     // ----------------------------------------------------------------------
@@ -325,7 +331,7 @@
 
         return (Permission) userStore.addPermission( perm );
     }
-
+    
     /**
      * This implementation return empty permissions for each user. 
      */
@@ -352,5 +358,27 @@
     public User getMyUser()
     {
         return getUser( userHolder.getCurrentUserName() );
+    }
+    
+    public UserGroup getDefaultUserGroup()
+    {
+        UserGroup defaultGroup = getUserGroup( defaultGroupName );
+        
+        if( defaultGroup == null )
+        {
+            defaultGroup = new UserGroup();
+            
+            defaultGroup.setName( defaultGroupName );
+
+            List defaultPermissions = new ArrayList();
+
+            defaultPermissions.add( getPermission( "buildProject" ) );
+
+            defaultPermissions.add( getPermission( "showProject" ) );
+
+            defaultGroup.setPermissions( defaultPermissions );
+        }
+        
+        return defaultGroup;
     }
 }

Modified: maven/shared/trunk/maven-user/maven-user-model/src/main/mdo/user.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/mdo/user.xml?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/main/mdo/user.xml (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/main/mdo/user.xml Wed Sep 13 16:24:55 2006
@@ -132,11 +132,12 @@
             <multiplicity>*</multiplicity>
           </association>
         </field>
-        <field jpox.column="userGroup" jpox.dependent="false">
-          <name>group</name>
+        <field jpox.dependent="false">
+          <name>groups</name>
           <version>1.0.0+</version>
-          <association stash.part="true">
+          <association stash.part="true" jpox.dependent="false">
             <type>UserGroup</type>
+            <multiplicity>*</multiplicity>
           </association> 
         </field>
       </fields>

Modified: maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java Wed Sep 13 16:24:55 2006
@@ -27,7 +27,6 @@
 
 import org.apache.maven.user.model.PasswordRule;
 import org.apache.maven.user.model.PasswordRuleViolationException;
-import org.apache.maven.user.model.PasswordRuleViolations;
 import org.apache.maven.user.model.Permission;
 import org.apache.maven.user.model.User;
 import org.apache.maven.user.model.UserGroup;
@@ -378,19 +377,19 @@
         rattenborough.setUsername( "rattenborough" ); //$NON-NLS-1$
         rattenborough.setFullName( "Richard Attenborough" ); //$NON-NLS-1$
         rattenborough.setPassword( "the big x" ); //$NON-NLS-1$
-        rattenborough.setGroup( british );
+        rattenborough.addGroup( british );
 
         /* Add new user with new usergroup (Shouldn't work) */
         User added = getUserManager().addUser( rattenborough );
-        assertNotNull( "Added UserGroup should not by null.", added.getGroup() ); //$NON-NLS-1$
+        assertNotNull( "Added UserGroup should not by null.", added.getGroups() ); //$NON-NLS-1$
 
         assertEquals( 1, getUserManager().getUsers().size() );
         assertEquals( 1, getUserManager().getUserGroups().size() );
 
         User actual = getUserManager().getUser( "rattenborough" ); //$NON-NLS-1$
         assertEquals( added, actual );
-        assertNotNull( "Actual UserGroup should not be null.", actual.getGroup() ); //$NON-NLS-1$
-        assertEquals( added.getGroup(), actual.getGroup() );
+        assertNotNull( "Actual UserGroups should not be null.", actual.getGroups() ); //$NON-NLS-1$
+        assertEquals( added.getGroups(), actual.getGroups() );
     }
 
     public void testGetSetUserGroupInUserPreloaded() throws Exception
@@ -413,17 +412,17 @@
          * If you use the (unresolved) british UserGroup here, you will
          * inadvertently create 2 UserGroups with the same name, but different IDs.
          */
-        rattenborough.setGroup( addedGroup ); 
+        rattenborough.addGroup( addedGroup ); 
         User added = getUserManager().addUser( rattenborough );
-        assertNotNull( "Added UserGroup should not by null.", added.getGroup() ); //$NON-NLS-1$
+        assertNotNull( "Added UserGroup should not by null.", added.getGroups() ); //$NON-NLS-1$
 
         assertEquals( 1, getUserManager().getUsers().size() );
         assertEquals( 1, getUserManager().getUserGroups().size() );
 
         User actual = getUserManager().getUser( "rattenborough" ); //$NON-NLS-1$
         assertEquals( added, actual );
-        assertNotNull( "Actual UserGroup should not be null.", actual.getGroup() ); //$NON-NLS-1$
-        assertEquals( added.getGroup(), actual.getGroup() );
+        assertNotNull( "Actual UserGroup should not be null.", actual.getGroups() ); //$NON-NLS-1$
+        assertEquals( added.getGroups(), actual.getGroups() );
     }
 
     public void testGetSetPermissions()

Modified: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp Wed Sep 13 16:24:55 2006
@@ -48,46 +48,6 @@
           <ww:include value="userForm.jsp">
             <ww:param name="addMode" value="${addMode}"/>
           </ww:include>
-        <authz:authorize ifAnyGranted="ROLE_admin,ROLE_manageUsers">
-        <ww:if test="addMode == false">
-          <div id="h3">
-            <h3><ww:text name="role.section.title"/></h3>
-            <ww:set name="permissions" value="permissions" scope="session"/>
-              <table>
-                <tr>
-                  <td><ww:text name="role.rolename"/></td>
-                  <td>&nbsp;</td>
-                </tr>
-                <ww:iterator value="permissions">
-                <tr>
-                  <td><ww:property value="name"/></td>
-                  <td>
-                    <ww:form action="edit!doDeletePermission.action" method="post">
-                      <ww:hidden id="addMode" name="addMode"/>
-                      <ww:hidden id="accountId" name="accountId"/>
-                      <ww:hidden id="username" name="username"/>
-                      <ww:hidden id="password" name="password"/>
-                      <ww:hidden id="email" name="email"/>
-                      <input type="hidden" name="permissionName" value="<ww:property value="name"/>">
-                      <ww:submit onclick="getData()" value="%{getText('delete')}"/>
-                    </ww:form>
-                  </td>
-                </tr>
-                </ww:iterator>
-              </table>
-            </div>
-          <div id="h3">
-            <ww:form action="edit!doGetAvailablePermissions.action" method="post">
-              <ww:hidden id="addMode" name="addMode"/>
-              <ww:hidden id="accountId" name="accountId"/>
-              <ww:hidden id="username" name="username"/>
-              <ww:hidden id="password" name="password"/>
-              <ww:hidden id="email" name="email"/>
-              <ww:submit onclick="getData()" value="%{getText('add')}"/>
-            </ww:form>
-          </div>
-        </ww:if>
-        </authz:authorize>
         </div>
       </div>
     </body>

Copied: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/addRole.jsp (from r443163, maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/addRole.jsp)
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/addRole.jsp?view=diff&rev=443165&p1=maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/addRole.jsp&r1=443163&p2=maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/addRole.jsp&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/addRole.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/addRole.jsp Wed Sep 13 16:24:55 2006
@@ -21,7 +21,7 @@
           <ec:row>
             <ec:column property="name" title="role.rolename"/>
             <ec:column property="actions" title="&nbsp;">
-              <c:url var="editUrl" value="/user/edit!doAddPermission.action">
+              <c:url var="editUrl" value="/user/group/edit!doAddPermission.action">
                 <c:param name="permissionName" value="${availablePermission.name}"/>
               </c:url>
               <input type="button" onclick="window.location.href='<c:out value='${editUrl}'/>'" value=<ww:text name="add"/>>

Modified: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/delete.jsp
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/delete.jsp?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/delete.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/delete.jsp Wed Sep 13 16:24:55 2006
@@ -17,7 +17,7 @@
           </p>
         </div>
         <div class="functnbar3">
-          <ww:form action="deleteGroup.action" method="post">
+          <ww:form action="delete.action" method="post">
             <ww:hidden name="id"/>
             <ww:submit value="%{getText('delete')}"/> <!-- todo: change to submit/cancel button -->
           </ww:form>

Modified: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/edit.jsp
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/edit.jsp?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/edit.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/edit.jsp Wed Sep 13 16:24:55 2006
@@ -39,47 +39,63 @@
           <h3><ww:text name="usergroup.edit.section.title"/></h3>
         </ww:else>
         <div class="axial">
-          <ww:include value="userForm.jsp">
-            <ww:param name="addMode" value="${addMode}"/>
-          </ww:include>
-        <authz:authorize ifAnyGranted="ROLE_admin,ROLE_manageUsers">
-        <ww:if test="addMode == false">
-          <div id="h3">
-            <h3><ww:text name="role.section.title"/></h3>
-            <ww:set name="permissions" value="permissions" scope="session"/>
-              <table>
-                <tr>
-                  <td><ww:text name="role.rolename"/></td>
-                  <td>&nbsp;</td>
-                </tr>
-                <ww:iterator value="permissions">
-                <tr>
-                  <td><ww:property value="name"/></td>
-                  <td>
-                    <ww:form action="editGroup!doDeletePermission.action" method="post">
-                      <ww:hidden id="addMode" name="addMode"/>
-                      <ww:hidden id="id" name="id"/>
-                      <ww:hidden id="name" name="name"/>
-                      <ww:hidden id="description" name="description"/>
-                      <input type="hidden" name="permissionName" value="<ww:property value="name"/>">
-                      <ww:submit onclick="getData()" value="%{getText('delete')}"/>
-                    </ww:form>
-                  </td>
-                </tr>
-                </ww:iterator>
-              </table>
+          <ww:form action="edit.action" method="post">
+            <table>
+              <tbody>
+                <ww:hidden id="addMode_field" name="addMode"/>
+                <ww:hidden id="id_field" name="id"/>
+                <ww:textfield id="name_field" label="%{getText('usergroup.name')}" name="name" required="false"/>
+                <ww:textfield id="description_field" label="%{getText('usergroup.description')}" name="description" required="false"/>
+              </tbody>
+            </table>
+            <div class="functnbar3">
+              <ww:submit value="%{getText('save')}"/> <!-- todo: change to submit/cancel button -->
             </div>
-          <div id="h3">
-            <ww:form action="editGroup!doGetAvailablePermissions.action" method="post">
-              <ww:hidden id="addMode" name="addMode"/>
-              <ww:hidden id="id" name="id"/>
-              <ww:hidden id="name" name="name"/>
-              <ww:hidden id="description" name="description"/>
-              <ww:submit onclick="getData()" value="%{getText('add')}"/>
-            </ww:form>
-          </div>
-        </ww:if>
-        </authz:authorize>
+          </ww:form>
+          <authz:authorize ifAnyGranted="ROLE_admin,ROLE_manageUsers">
+            <ww:if test="addMode == false">
+              <div id="h3">
+                <h3><ww:text name="role.section.title"/></h3>
+                <div class="eXtremeTable">
+                  <ww:set name="permissions" value="permissions" scope="session"/>
+                  <table id="ec_table" border="1" cellspacing="2" cellpadding="3" class="tableRegion" width="100%">
+                    <thead>
+                      <tr>
+                        <td class="tableHeader"><ww:text name="role.rolename"/></td>
+                        <td class="tableHeader">&nbsp;</td>
+                      </tr>
+                    </thead>
+                    <tbody class="tableBody">
+                      <ww:iterator value="permissions" status="rowCounter">
+                        <tr class="<ww:if test="#rowCounter.odd == true">odd</ww:if><ww:else>even</ww:else>">
+                          <td><ww:property value="name"/></td>
+                          <td>
+                            <ww:form action="edit!doDeletePermission.action" method="post">
+                              <ww:hidden id="addMode" name="addMode"/>
+                              <ww:hidden id="id" name="id"/>
+                              <ww:hidden id="name" name="name"/>
+                              <ww:hidden id="description" name="description"/>
+                              <input type="hidden" name="permissionName" value="<ww:property value="name"/>">
+                              <ww:submit onclick="getData()" value="%{getText('delete')}"/>
+                            </ww:form>
+                          </td>
+                        </tr>
+                      </ww:iterator>
+                    </tbody>
+                  </table>
+                </div>
+              </div>
+              <div id="h3">
+                <ww:form action="edit!doGetAvailablePermissions.action" method="post">
+                  <ww:hidden id="addMode" name="addMode"/>
+                  <ww:hidden id="id" name="id"/>
+                  <ww:hidden id="name" name="name"/>
+                  <ww:hidden id="description" name="description"/>
+                  <ww:submit onclick="getData()" value="%{getText('add')}"/>
+                </ww:form>
+              </div>
+            </ww:if>
+          </authz:authorize>
         </div>
       </div>
     </body>

Modified: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/list.jsp
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/list.jsp?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/list.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/group/list.jsp Wed Sep 13 16:24:55 2006
@@ -21,14 +21,14 @@
             <ec:column property="description" title="usergroup.description"/>
             <ec:column property="actions" title="&nbsp;">
 
-              <c:url var="editUrl" value="/user/groups/editGroup!doEdit.action">
+              <c:url var="editUrl" value="/user/group/edit!doEdit.action">
                 <c:param name="id" value="${usergroup.id}"/>
                 <c:param name="name" value="${usergroup.name}"/>
               </c:url>
 
               <a href="<c:out value='${editUrl}'/>"><ww:text name="edit"/></a>
 
-              <c:url var="deleteUrl" value="/user/groups/deleteGroup!doDelete.action">
+              <c:url var="deleteUrl" value="/user/group/delete!doDelete.action">
                 <c:param name="id" value="${usergroup.id}"/>
                 <c:param name="name" value="${usergroup.name}"/>
               </c:url>
@@ -39,7 +39,7 @@
         </ec:table>
       </div>
       <div class="functnbar3">
-        <ww:form action="editGroup!doAdd.action" method="post">
+        <ww:form action="edit!doAdd.action" method="post">
           <ww:submit value="%{getText('add')}"/>
         </ww:form>
     </div>

Modified: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/userForm.jsp
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/userForm.jsp?view=diff&rev=443165&r1=443164&r2=443165
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/userForm.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/userForm.jsp Wed Sep 13 16:24:55 2006
@@ -1,6 +1,8 @@
 <%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
 <%@ taglib uri="/webwork" prefix="ww" %>
 <%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>
+<%@ taglib uri="http://acegisecurity.org/authz" prefix="authz" %>
+
 <ww:form action="saveAccount.action" method="post">
   <c:if test="${!empty actionErrors}">
     <div class="errormessage">
@@ -11,6 +13,7 @@
   </c:if>
   <table>
     <tbody>
+      <ww:hidden id="addMode" name="addMode"/>
       <ww:hidden id="addMode_field" name="addMode"/>
       <ww:hidden id="accountId_field" name="accountId"/>
       <ww:if test="addMode == true">
@@ -23,9 +26,23 @@
       <ww:password id="password_field" label="%{getText('user.password')}" name="password" required="true"/>
       <ww:password id="confirm_password_field" label="%{getText('user.confirm.password')}" name="confirmPassword" required="true"/>
       <ww:textfield id="email_field" label="%{getText('user.email')}" name="email" required="true"/>
+      <ww:if test="addMode == false">
+        <authz:authorize ifAnyGranted="ROLE_admin,ROLE_manageUsers">
+          <ww:select label="%{getText('user.group.header')}"
+                         list="allGroups"
+                         name="groups"
+                         value="selectedGroups"
+                         listKey="id"
+                         listValue="name"
+                         multiple="true"
+                         size="6"
+                         required="true"/>
+        </authz:authorize>
+      </ww:if>
     </tbody>
   </table>
   <div class="functnbar3">
     <ww:submit value="%{getText('save')}"/> <!-- todo: change to submit/cancel button -->
   </div>
 </ww:form>
+