epugh       2003/08/25 15:49:14

  Modified:    security/src/java/org/apache/fulcrum/security/spi/hibernate/simple
                        HibernateGroupManagerImpl.java
                        BaseHibernateManager.java
                        HibernateRoleManagerImpl.java
                        HibernateUserManagerImpl.java
                        HibernatePermissionManagerImpl.java
               
security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity
                        HibernateSimpleUser.java HibernateSimpleRole.java
                        HibernateSimpleGroup.java
  Added:       
security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity
                        UserSet.java
  Log:
  Allow hibernate SPI to particpate in a Session.  Allows lazy loading of collections. 
 also 
  some bug fixes.
  
  Revision  Changes    Path
  1.5       +33 -19    
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernateGroupManagerImpl.java
  
  Index: HibernateGroupManagerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernateGroupManagerImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HibernateGroupManagerImpl.java    25 Aug 2003 15:31:40 -0000      1.4
  +++ HibernateGroupManagerImpl.java    25 Aug 2003 22:49:14 -0000      1.5
  @@ -53,9 +53,9 @@
    * <http://www.apache.org/>.
    */
   import java.util.List;
  -
   import net.sf.hibernate.Hibernate;
   import net.sf.hibernate.HibernateException;
  +import net.sf.hibernate.Session;
   
   import org.apache.commons.lang.StringUtils;
   import org.apache.commons.logging.Log;
  @@ -146,10 +146,22 @@
        */
       public Group getGroupByName(String name) throws DataBackendException, 
UnknownEntityException
       {
  -        Group group = getAllGroups().getGroupByName(name);
  -        if (group == null)
  +        Group group = null;
  +        try
           {
  -            throw new UnknownEntityException("The specified group does not exist");
  +          
  +            List groups =
  +                     retrieveSession().find("from HibernateSimpleGroup g where 
g.name=?", name.toLowerCase(), Hibernate.STRING);
  +            if (groups.size() == 0)
  +            {
  +                throw new UnknownEntityException("Could not find group" + name);
  +            }
  +            group = (Group) groups.get(0);
  +            //session.close();
  +        }
  +        catch (HibernateException e)
  +        {
  +            throw new DataBackendException("Error retriving group information", e);
           }
           return group;
       }
  @@ -186,10 +198,9 @@
           GroupSet groupSet = new GroupSet();
           try
           {
  -            session = hibernateService.openSession();
  -            List groups = session.find("from HibernateSimpleGroup");
  +            
  +            List groups = retrieveSession().find("from HibernateSimpleGroup");
               groupSet.add(groups);
  -                     session.close();
           }
           catch (HibernateException e)
           {
  @@ -247,9 +258,8 @@
           List groups;
           try
           {
  -            session = hibernateService.openSession();
  -            groups = session.find("from HibernateSimpleGroup sg where sg.name=?", 
group.getName(), Hibernate.STRING);
  -                     session.close();
  +            
  +            groups = retrieveSession().find("from HibernateSimpleGroup sg where 
sg.name=?", group.getName(), Hibernate.STRING);
           }
           catch (HibernateException e)
           {
  @@ -307,10 +317,14 @@
               roleExists = checkExists(role);
               if (groupExists && roleExists)
               {
  -                             ((HibernateSimpleGroup) group).addRole(role);
  -                             ((HibernateSimpleRole) role).addGroup(group);
  -                             updateEntity(group);
  -                             //updateEntity(role);
  +                ((HibernateSimpleGroup) group).addRole(role);
  +                ((HibernateSimpleRole) role).addGroup(group);
  +                             Session session = hibernateService.openSession(); 
//retrieveSession();
  +                             transaction = session.beginTransaction();
  +                             session.update(role);
  +                             session.update(group);
  +                             transaction.commit();
  +                             session.close();
                   return;
               }
           }
  @@ -346,10 +360,10 @@
               roleExists = checkExists(role);
               if (groupExists && roleExists)
               {
  -                             ((SimpleGroup) group).removeRole(role);
  -                             ((SimpleRole) role).removeGroup(group);
  -                             updateEntity(group);
  -                             //updateEntity(role);
  +                ((SimpleGroup) group).removeRole(role);
  +                ((SimpleRole) role).removeGroup(group);
  +                updateEntity(group);
  +                //updateEntity(role);
                   return;
               }
           }
  
  
  
  1.4       +47 -11    
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/BaseHibernateManager.java
  
  Index: BaseHibernateManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/BaseHibernateManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BaseHibernateManager.java 25 Aug 2003 15:31:40 -0000      1.3
  +++ BaseHibernateManager.java 25 Aug 2003 22:49:14 -0000      1.4
  @@ -82,13 +82,27 @@
       /** Logging */
       private static Log log = LogFactory.getLog(BaseHibernateManager.class);
       protected HibernateService hibernateService;
  -    protected Session session;
  +    private Session session;
       protected Transaction transaction;
       protected ComponentManager manager = null;
       protected PermissionManager permissionManager;
       protected RoleManager roleManager;
       protected GroupManager groupManager;
       /**
  +     * @return
  +     */
  +    public Session getHibernateSession()
  +    {
  +        return session;
  +    }
  +    /**
  +     * @param session
  +     */
  +    public void setHibernateSession(Session session)
  +    {
  +        this.session = session;
  +    }
  +    /**
         * @return
         */
       ComponentManager getComponentManager()
  @@ -105,6 +119,11 @@
               try
               {
                   permissionManager = (PermissionManager) 
manager.lookup(PermissionManager.ROLE);
  +                ((BaseHibernateManager) 
permissionManager).setHibernateSession(retrieveSession());
  +            }
  +            catch (HibernateException he)
  +            {
  +                throw new DataBackendException(he.getMessage(), he);
               }
               catch (ComponentException ce)
               {
  @@ -123,6 +142,11 @@
               try
               {
                   roleManager = (RoleManager) manager.lookup(RoleManager.ROLE);
  +                ((BaseHibernateManager) 
roleManager).setHibernateSession(retrieveSession());
  +            }
  +            catch (HibernateException he)
  +            {
  +                throw new DataBackendException(he.getMessage(), he);
               }
               catch (ComponentException ce)
               {
  @@ -141,6 +165,11 @@
               try
               {
                   groupManager = (GroupManager) manager.lookup(GroupManager.ROLE);
  +                ((BaseHibernateManager) 
groupManager).setHibernateSession(retrieveSession());
  +            }
  +            catch (HibernateException he)
  +            {
  +                throw new DataBackendException(he.getMessage(), he);
               }
               catch (ComponentException ce)
               {
  @@ -153,11 +182,10 @@
       {
           try
           {
  -            session = hibernateService.openSession();
  +            session = retrieveSession();
               transaction = session.beginTransaction();
               session.delete(entity);
               transaction.commit();
  -                     session.close();
           }
           catch (HibernateException he)
           {
  @@ -183,11 +211,11 @@
       {
           try
           {
  -            session = hibernateService.openSession();
  +            session = retrieveSession();
               transaction = session.beginTransaction();
               session.update(entity);
               transaction.commit();
  -            session.close();
  +            
           }
           catch (HibernateException he)
           {
  @@ -198,7 +226,7 @@
               catch (HibernateException hex)
               {
               }
  -            throw new DataBackendException("updateEntity(" + entity+")", he);
  +            throw new DataBackendException("updateEntity(" + entity + ")", he);
           }
           return;
       }
  @@ -214,11 +242,11 @@
       {
           try
           {
  -            session = hibernateService.openSession();
  +            session = retrieveSession();
               transaction = session.beginTransaction();
               session.save(entity);
               transaction.commit();
  -                     session.close();
  +            //session.close();
           }
           catch (HibernateException he)
           {
  @@ -245,11 +273,11 @@
       {
           try
           {
  -            session = hibernateService.openSession();
  +            //session = hibernateService.openSession();
               transaction = session.beginTransaction();
               session.delete(entity);
               transaction.commit();
  -                     session.close();
  +            session = retrieveSession();
           }
           catch (HibernateException he)
           {
  @@ -263,6 +291,14 @@
               throw new DataBackendException("delete()", he);
           }
           return;
  +    }
  +    protected Session retrieveSession() throws HibernateException
  +    {
  +        if (session==null || (!session.isConnected() && !session.isOpen()))
  +        {
  +            session = hibernateService.openSession();
  +        }
  +        return session;
       }
       /**
       * Avalon component lifecycle method
  
  
  
  1.5       +5 -7      
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernateRoleManagerImpl.java
  
  Index: HibernateRoleManagerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernateRoleManagerImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HibernateRoleManagerImpl.java     25 Aug 2003 15:31:40 -0000      1.4
  +++ HibernateRoleManagerImpl.java     25 Aug 2003 22:49:14 -0000      1.5
  @@ -309,9 +309,9 @@
           List roles;
           try
           {
  -            session = hibernateService.openSession();
  -            roles = session.find("from HibernateSimpleRole sr where sr.name=?", 
role.getName(), Hibernate.STRING);
  -                     session.close();
  +            
  +            roles = retrieveSession().find("from HibernateSimpleRole sr where 
sr.name=?", role.getName(), Hibernate.STRING);
  +
           }
           catch (HibernateException e)
           {
  @@ -335,10 +335,8 @@
           RoleSet roleSet = new RoleSet();
           try
           {
  -            session = hibernateService.openSession();
  -            List roles = session.find("from HibernateSimpleRole");
  +            List roles = retrieveSession().find("from HibernateSimpleRole");
               roleSet.add(roles);
  -                     session.close();
           }
           catch (HibernateException e)
           {
  
  
  
  1.6       +38 -31    
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernateUserManagerImpl.java
  
  Index: HibernateUserManagerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernateUserManagerImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HibernateUserManagerImpl.java     25 Aug 2003 15:31:40 -0000      1.5
  +++ HibernateUserManagerImpl.java     25 Aug 2003 22:49:14 -0000      1.6
  @@ -56,10 +56,9 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
  -
   import net.sf.hibernate.Hibernate;
   import net.sf.hibernate.HibernateException;
  -
  +import net.sf.hibernate.Session;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.commons.lang.StringUtils;
   import org.apache.commons.logging.Log;
  @@ -75,10 +74,10 @@
   import org.apache.fulcrum.security.model.simple.entity.SimpleRole;
   import org.apache.fulcrum.security.model.simple.entity.SimpleUser;
   import org.apache.fulcrum.security.model.simple.manager.SimpleUserManager;
  +import org.apache.fulcrum.security.spi.hibernate.simple.entity.HibernateSimpleGroup;
   import org.apache.fulcrum.security.spi.hibernate.simple.entity.HibernateSimpleUser;
   import org.apache.fulcrum.security.util.DataBackendException;
   import org.apache.fulcrum.security.util.EntityExistsException;
  -import org.apache.fulcrum.security.util.GroupSet;
   import org.apache.fulcrum.security.util.PasswordMismatchException;
   import org.apache.fulcrum.security.util.RoleSet;
   import org.apache.fulcrum.security.util.UnknownEntityException;
  @@ -126,9 +125,7 @@
           List users = null;
           try
           {
  -            session = hibernateService.openSession();
  -            users = session.find("from HibernateSimpleUser su where su.name=?", 
userName, Hibernate.STRING);
  -                     session.close();
  +            users = retrieveSession().find("from HibernateSimpleUser su where 
su.name=?", userName, Hibernate.STRING);
           }
           catch (HibernateException e)
           {
  @@ -156,10 +153,11 @@
           List users = null;
           try
           {
  -            session = hibernateService.openSession();
               users =
  -                session.find("from HibernateSimpleUser su where su.name=?", 
userName.toLowerCase(), Hibernate.STRING);
  -                     session.close();
  +                retrieveSession().find(
  +                    "from HibernateSimpleUser su where su.name=?",
  +                    userName.toLowerCase(),
  +                    Hibernate.STRING);
           }
           catch (HibernateException e)
           {
  @@ -226,8 +224,9 @@
                   throw new DataBackendException(ce.getMessage(), ce);
               }
           }
  -        if (!authenticator.authenticate(user,password)){
  -             throw new PasswordMismatchException("Can not authenticate user.");
  +        if (!authenticator.authenticate(user, password))
  +        {
  +            throw new PasswordMismatchException("Can not authenticate user.");
           }
       }
       /**
  @@ -341,24 +340,23 @@
       public synchronized void revokeAll(User user) throws DataBackendException, 
UnknownEntityException
       {
           boolean userExists = false;
  -        try
  +        userExists = checkExists(user);
  +        if (userExists)
           {
  -            userExists = checkExists(user);
  -            if (userExists)
  +            Object groups[] = ((SimpleUser) user).getGroups().toArray();
  +           
  +            for (int i = 0; i < groups.length; i++)
               {
  -                ((SimpleUser) user).setGroups(new GroupSet());
  -                updateEntity(user);
  -                return;
  +                Group group = (Group) groups[i];
  +                revoke(user, group);
               }
  +           
  +            return;
           }
  -        catch (Exception e)
  -        {
  -            throw new DataBackendException("revokeAll(User) failed", e);
  -        }
  -        finally
  +        else
           {
  +            throw new UnknownEntityException("Unknown user '" + user.getName() + 
"'");
           }
  -        throw new UnknownEntityException("Unknown user '" + user.getName() + "'");
       }
       /**
       * Determines if the <code>Group</code> exists in the security system.
  @@ -521,10 +519,14 @@
               userExists = checkExists(user);
               if (groupExists && userExists)
               {
  -                             ((SimpleUser) user).addGroup(group);
  -                             ((SimpleGroup) group).addUser(user);
  -                             updateEntity(user);
  -                             //updateEntity(group);
  +                ((HibernateSimpleUser) user).addGroup(group);
  +                ((HibernateSimpleGroup) group).addUser(user);
  +                Session session = hibernateService.openSession(); 
//retrieveSession();
  +                transaction = session.beginTransaction();
  +                session.update(user);
  +                session.update(group);
  +                transaction.commit();
  +                session.close();
                   return;
               }
           }
  @@ -564,9 +566,14 @@
               userExists = checkExists(user);
               if (groupExists && userExists)
               {
  -                             ((SimpleUser) user).removeGroup(group);
  -
  -                updateEntity(user);
  +                ((HibernateSimpleUser) user).removeGroup(group);
  +                ((HibernateSimpleGroup) group).removeUser(user);
  +                Session session = hibernateService.openSession(); 
//retrieveSession();
  +                transaction = session.beginTransaction();
  +                session.update(user);
  +                session.update(group);
  +                transaction.commit();
  +                session.close();
                   return;
               }
           }
  
  
  
  1.5       +7 -7      
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernatePermissionManagerImpl.java
  
  Index: HibernatePermissionManagerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/HibernatePermissionManagerImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HibernatePermissionManagerImpl.java       25 Aug 2003 15:31:40 -0000      1.4
  +++ HibernatePermissionManagerImpl.java       25 Aug 2003 22:49:14 -0000      1.5
  @@ -167,10 +167,10 @@
           PermissionSet permissionSet = new PermissionSet();
           try
           {
  -            session = hibernateService.openSession();
  -            List permissions = session.find("from SimplePermission");
  +            
  +            List permissions = retrieveSession().find("from SimplePermission");
               permissionSet.add(permissions);
  -                     session.close();
  +     
           }
           catch (HibernateException e)
           {
  @@ -217,10 +217,10 @@
           List permissions;
           try
           {
  -            session = hibernateService.openSession();
  +        
               permissions =
  -                session.find("from SimplePermission sr where sr.name=?", 
permission.getName(), Hibernate.STRING);
  -                     session.close();
  +                     retrieveSession().find("from SimplePermission sr where 
sr.name=?", permission.getName(), Hibernate.STRING);
  +             
           }
           catch (HibernateException e)
           {
  
  
  
  1.2       +8 -12     
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/HibernateSimpleUser.java
  
  Index: HibernateSimpleUser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/HibernateSimpleUser.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HibernateSimpleUser.java  24 Aug 2003 19:41:35 -0000      1.1
  +++ HibernateSimpleUser.java  25 Aug 2003 22:49:14 -0000      1.2
  @@ -3,11 +3,9 @@
    *
    */
   package org.apache.fulcrum.security.spi.hibernate.simple.entity;
  -
   import java.util.Set;
   
   import org.apache.fulcrum.security.model.simple.entity.SimpleUser;
  -
   /**
    * @author Eric Pugh
    *
  @@ -17,14 +15,12 @@
    */
   public class HibernateSimpleUser extends SimpleUser
   {
  -     
  -     void setHibernateGroups(Set permissions){
  -             this.getGroups().add(permissions);
  -     }
  -     
  -     Set getHibernateGroups(){
  -             return getGroups().getSet();    
  -     }
  -     
  -     
  +    void setHibernateGroups(Set groups)
  +    {
  +        getGroups().add(groups);
  +    }
  +    Set getHibernateGroups()
  +    {
  +        return getGroups().getSet();
  +    }
   }
  
  
  
  1.3       +16 -21    
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/HibernateSimpleRole.java
  
  Index: HibernateSimpleRole.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/HibernateSimpleRole.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HibernateSimpleRole.java  25 Aug 2003 15:30:24 -0000      1.2
  +++ HibernateSimpleRole.java  25 Aug 2003 22:49:14 -0000      1.3
  @@ -3,11 +3,8 @@
    *
    */
   package org.apache.fulcrum.security.spi.hibernate.simple.entity;
  -
   import java.util.Set;
  -
   import org.apache.fulcrum.security.model.simple.entity.SimpleRole;
  -
   /**
    * @author Eric Pugh
    *
  @@ -16,22 +13,20 @@
    */
   public class HibernateSimpleRole extends SimpleRole
   {
  -     
  -     void setHibernatePermissions(Set permissions){
  -             this.getPermissions().add(permissions);
  -     }
  -     
  -     Set getHibernatePermissions(){
  -             return getPermissions().getSet();       
  -     }
  -     
  -     void setHibernateGroups(Set groups){
  -                     this.getGroups().add(groups);
  -             }
  -     
  -             Set getHibernateGroups(){
  -                     return getGroups().getSet();    
  -             }
  -     
  -     
  +    void setHibernatePermissions(Set permissions)
  +    {
  +        this.getPermissions().add(permissions);
  +    }
  +    Set getHibernatePermissions()
  +    {
  +        return getPermissions().getSet();
  +    }
  +    void setHibernateGroups(Set groups)
  +    {
  +        this.getGroups().add(groups);
  +    }
  +    Set getHibernateGroups()
  +    {
  +        return getGroups().getSet();
  +    }
   }
  
  
  
  1.2       +39 -13    
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/HibernateSimpleGroup.java
  
  Index: HibernateSimpleGroup.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/HibernateSimpleGroup.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HibernateSimpleGroup.java 24 Aug 2003 19:41:35 -0000      1.1
  +++ HibernateSimpleGroup.java 25 Aug 2003 22:49:14 -0000      1.2
  @@ -3,11 +3,10 @@
    *
    */
   package org.apache.fulcrum.security.spi.hibernate.simple.entity;
  -
  +import java.util.Iterator;
   import java.util.Set;
  -
  +import org.apache.fulcrum.security.entity.User;
   import org.apache.fulcrum.security.model.simple.entity.SimpleGroup;
  -
   /**
    * @author Eric Pugh
    *
  @@ -17,14 +16,41 @@
    */
   public class HibernateSimpleGroup extends SimpleGroup
   {
  -     
  -     void setHibernateRoles(Set permissions){
  -             this.getRoles().add(permissions);
  -     }
  -     
  -     Set getHibernateRoles(){
  -             return getRoles().getSet();     
  -     }
  -     
  -     
  +    private UserSet users = new UserSet();
  +    public void addUser(User user)
  +    {
  +        users.add(user);
  +    }
  +    public void removeUser(User user)
  +    {
  +        users.remove(user);
  +    }
  +    public void setUsers(Set users)
  +    {
  +        this.users.addAll(users);
  +    }
  +    public Set getUsers()
  +    {
  +        return this.users;
  +    }
  +    void setHibernateUsers(Set users)
  +    {
  +        for (Iterator i = users.iterator(); i.hasNext();)
  +        {
  +            User user = (User) i.next();
  +            this.users.add(user);
  +        }
  +    }
  +    Set getHibernateUsers()
  +    {
  +        return users.getSet();
  +    }
  +    void setHibernateRoles(Set roles)
  +    {
  +        this.getRoles().add(roles);
  +    }
  +    Set getHibernateRoles()
  +    {
  +        return getRoles().getSet();
  +    }
   }
  
  
  
  1.1                  
jakarta-turbine-fulcrum/security/src/java/org/apache/fulcrum/security/spi/hibernate/simple/entity/UserSet.java
  
  Index: UserSet.java
  ===================================================================
  package org.apache.fulcrum.security.spi.hibernate.simple.entity;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Turbine" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Turbine", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import java.util.Collection;
  import java.util.Iterator;
  
  import org.apache.commons.lang.StringUtils;
  import org.apache.fulcrum.security.entity.User;
  import org.apache.fulcrum.security.util.SecuritySet;
  
  /**
   * This class represents a set of Users.  It is based on UserSet.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Eric Pugh</a>
   * @version $Id: UserSet.java,v 1.1 2003/08/25 22:49:14 epugh Exp $
   */
  public class UserSet
          extends SecuritySet
  {
      /**
       * Constructs an empty UserSet
       */
      public UserSet()
      {
          super();
      }
  
      /**
       * Constructs a new UserSet with specified contents.
       *
       * If the given collection contains multiple objects that are
       * identical WRT equals() method, some objects will be overwritten.
       *
       * @param users A collection of users to be contained in the set.
       */
      public UserSet(Collection users)
      {
          super();
          add(users);
      }
  
      /**
       * Adds a User to this UserSet.
       *
       * @param user A User.
       * @return True if User was added; false if UserSet already
       * contained the User.
       */
      public boolean add(User user)
      {
          boolean res = contains(user);
          nameMap.put(user.getName(), user);
          idMap.put(getIdAsObject(user.getId()), user);
          return res;
      }
  
      /**
       * Adds the Users in a Collection to this UserSet.
       *
       * @param users A Collection of Users.
       * @return True if this UserSet changed as a result; false
       * if no change to this UserSet occurred (this UserSet
       * already contained all members of the added UserSet).
       */
      public boolean add(Collection users)
      {
          boolean res = false;
          for (Iterator it = users.iterator(); it.hasNext();)
          {
              User r = (User) it.next();
              res |= add(r);
          }
          return res;
      }
  
      /**
       * Adds the Users in another UserSet to this UserSet.
       *
       * @param userSet A UserSet.
       * @return True if this UserSet changed as a result; false
       * if no change to this UserSet occurred (this UserSet
       * already contained all members of the added UserSet).
       */
      public boolean add(UserSet userSet)
      {
          boolean res = false;
          for( Iterator it = userSet.iterator(); it.hasNext();)
          {
              User r = (User) it.next();
              res |= add(r);
          }
          return res;
      }
  
      /**
       * Removes a User from this UserSet.
       *
       * @param user A User.
       * @return True if this UserSet contained the User
       * before it was removed.
       */
      public boolean remove(User user)
      {
          boolean res = contains(user);
          nameMap.remove(user.getName());
          idMap.remove(getIdAsObject(user.getId()));
          return res;
      }
  
      /**
       * Checks whether this UserSet contains a User.
       *
       * @param user A User.
       * @return True if this UserSet contains the User,
       * false otherwise.
       */
      public boolean contains(User user)
      {
          return nameMap.containsValue((Object) user);
      }
  
  
      /**
       * Returns a User with the given name, if it is contained in
       * this UserSet.
       *
       * @param userName Name of User.
       * @return User if argument matched a User in this
       * UserSet; null if no match.
       */
      public User getUserByName(String userName)
      {
                userName=userName.toLowerCase();
          return (StringUtils.isNotEmpty(userName))
                  ? (User) nameMap.get(userName) : null;
      }
  
      /**
       * Returns a User with the given id, if it is contained in this
       * UserSet.
       *
       * @param userId id of the User.
       * @return User if argument matched a User in this UserSet; null
       * if no match.
       */
      public User getUserById(long userId)
      {
          return (userId != 0) 
                  ? (User) idMap.get(new Long(userId)) : null;
      }
  
      /**
       * Returns an Array of Users in this UserSet.
       *
       * @return An Array of User objects.
       */
      public User[] getUsersArray()
      {
          return (User[]) getSet().toArray(new User[0]);
      }
  
      /**
       * Print out a UserSet as a String
       *
       * @returns The User Set as String
       *
       */
      public String toString()
      {
          StringBuffer sb = new StringBuffer();
          sb.append("UserSet: ");
  
          for(Iterator it = iterator(); it.hasNext();)
          {
              User r = (User) it.next();
              sb.append('[');
              sb.append(r.getName());
              sb.append(" -> ");
              sb.append(r.getId());
              sb.append(']');
              if (it.hasNext())
              {
                  sb.append(", ");
              }
          }
  
          return sb.toString();
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to