Author: gk
Date: Fri Jan 12 14:31:04 2018
New Revision: 1820996

URL: http://svn.apache.org/viewvc?rev=1820996&view=rev
Log:
- Update to complete custom peer configuration, i.e. to allow ACL to get custom 
OM (without overriding methods in OM classes):
- (1) user manager configuration requires additionally element userGroupRole 
with peerClassName, cft. TurbineDefaultWithPeersComponentConfig.xml and 
TurbineDefaultLazyWithPeersComponentConfig.xml
- (2) in schema configuration added interface 
TurbineUserGroupRoleModelPeerMapper for table TurbineUserGroupRole, cft. 
schema/fulcrum-turbine-default-schema.xml. As it requires up to now 
javaName="TurbineUser", TurbineGroup and TurbineRole for table mapping its NOT 
added to schema/fulcrum-turbine-schema.xml. May be resolved by using another 
manager.
- (3) added interface TorqueTurbineUserGroupRolePeer to OM class 
TurbineUserGroupRolePeerImpl^(still not generatable in torque 4.0)
- as a consequence TorqueTurbineUserManagerImpl overrides now three getXUserX 
method to allow for this behaviour.
- added LazyLoadable interface
- tests added with user relationships
- license updates

Added:
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/LazyLoadable.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/om/TurbineUserGroupRolePeerImpl.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbineUserGroupRolePeer.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TurbineUserGroupRoleModelPeerMapper.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntityDefault.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/test/org/apache/fulcrum/security/torque/turbine/AbstractTurbineUserManagerTest.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/test/org/apache/fulcrum/security/torque/turbine/TurbineUserManagerDefaultPeerLazyTest.java
   (with props)
    
turbine/fulcrum/trunk/security/torque/src/test/org/apache/fulcrum/security/torque/turbine/TurbineUserManagerTest.java
   (with props)
Modified:
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/GroupManager.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/PermissionManager.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/RoleManager.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/SecurityService.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/UserManager.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/TurbineUserGroupRoleEntity.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/impl/AbstractTurbineSecurityEntityImpl.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractManager.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java
    
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java
    
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/turbine/test/AbstractTurbineModelManagerTest.java
    
turbine/fulcrum/trunk/security/torque/schema/fulcrum-turbine-default-schema.xml
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractGroupManager.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractRoleManager.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/Peer.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagable.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManager.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagerDefaultImpl.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbinePeer.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/managers/PeerUserManager.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/TorqueAbstractSecurityEntity.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntity.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/DefaultAbstractTurbineUser.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineModelManagerImpl.java
    
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
    
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultLazyWithPeersComponentConfig.xml
    
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultWithPeersComponentConfig.xml
    
turbine/fulcrum/trunk/security/torque/src/test/org/apache/fulcrum/security/torque/turbine/TurbineDefaultModelManagerLazyTest.java
    
turbine/fulcrum/trunk/security/torque/src/test/org/apache/fulcrum/security/torque/turbine/TurbineDefaultModelManagerTest.java

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/GroupManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/GroupManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/GroupManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/GroupManager.java
 Fri Jan 12 14:31:04 2018
@@ -27,7 +27,7 @@ import org.apache.fulcrum.security.util.
 import org.apache.fulcrum.security.util.UnknownEntityException;
 
 /**
- * An GroupManager performs {@link org.apache.fulcrum.security.entity.Group}
+ * A GroupManager performs {@link org.apache.fulcrum.security.entity.Group}
  * objects related tasks on behalf of the
  * {@link org.apache.fulcrum.security.BaseSecurityService}.
  *

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/PermissionManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/PermissionManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/PermissionManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/PermissionManager.java
 Fri Jan 12 14:31:04 2018
@@ -27,13 +27,13 @@ import org.apache.fulcrum.security.util.
 import org.apache.fulcrum.security.util.UnknownEntityException;
 
 /**
- * An GroupManager performs {@link org.apache.fulcrum.security.entity.Group}
+ * A PermissionManager performs {@link 
org.apache.fulcrum.security.entity.Permission}
  * objects related tasks on behalf of the
  * {@link org.apache.fulcrum.security.BaseSecurityService}.
  *
- * The responsibilities of this class include loading data of an group from the
+ * The responsibilities of this class include loading data of an permission 
from the
  * storage and putting them into the
- * {@link org.apache.fulcrum.security.entity.Group} objects, saving those data
+ * {@link org.apache.fulcrum.security.entity.Permission} objects, saving those 
data
  * to the permanent storage.
  *
  * @author <a href="mailto:[email protected]";>Eric Pugh</a>

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/RoleManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/RoleManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/RoleManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/RoleManager.java
 Fri Jan 12 14:31:04 2018
@@ -27,13 +27,13 @@ import org.apache.fulcrum.security.util.
 import org.apache.fulcrum.security.util.UnknownEntityException;
 
 /**
- * An GroupManager performs {@link org.apache.fulcrum.security.entity.Group}
+ * A RoleManager performs {@link org.apache.fulcrum.security.entity.Role}
  * objects related tasks on behalf of the
  * {@link org.apache.fulcrum.security.BaseSecurityService}.
  *
- * The responsibilities of this class include loading data of an group from the
+ * The responsibilities of this class include loading data of a role from the
  * storage and putting them into the
- * {@link org.apache.fulcrum.security.entity.Group} objects, saving those data
+ * {@link org.apache.fulcrum.security.entity.Role} objects, saving those data
  * to the permanent storage.
  *
  * @author <a href="mailto:[email protected]";>Eric Pugh</a>

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/SecurityService.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/SecurityService.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/SecurityService.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/SecurityService.java
 Fri Jan 12 14:31:04 2018
@@ -72,6 +72,6 @@ public interface SecurityService
      *
      * @return An ModelManager object
      */
-    ModelManager getModelManager();
+    <T extends ModelManager> T getModelManager();
 
 }

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/UserManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/UserManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/UserManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/UserManager.java
 Fri Jan 12 14:31:04 2018
@@ -152,7 +152,7 @@ public interface UserManager extends Ser
      * @throws DataBackendException
      *             if there was an error accessing the data backend.
      */
-    UserSet getAllUsers() throws DataBackendException;
+    <T extends User> UserSet<T> getAllUsers() throws DataBackendException;
 
     /**
      * Saves User's data in the permanent storage. The user account is required

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
 Fri Jan 12 14:31:04 2018
@@ -141,7 +141,7 @@ public class TurbineAccessControlListImp
                    }
             }
         }
-
+        // this check might be not needed any more, required for custom group
         if (groupManager != null)
         {
                this.globalGroup = 
groupManager.getGroupByName(modelManager.getGlobalGroupName());

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/TurbineUserGroupRoleEntity.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/TurbineUserGroupRoleEntity.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/TurbineUserGroupRoleEntity.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/TurbineUserGroupRoleEntity.java
 Fri Jan 12 14:31:04 2018
@@ -33,6 +33,7 @@ import org.apache.fulcrum.security.util.
  */
 public interface TurbineUserGroupRoleEntity
 {
+    
     /**
      * Get the User/Group/Role set associated with this entity
      *

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/impl/AbstractTurbineSecurityEntityImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/impl/AbstractTurbineSecurityEntityImpl.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/impl/AbstractTurbineSecurityEntityImpl.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/entity/impl/AbstractTurbineSecurityEntityImpl.java
 Fri Jan 12 14:31:04 2018
@@ -36,6 +36,10 @@ import org.apache.fulcrum.security.model
  */
 public abstract class AbstractTurbineSecurityEntityImpl extends 
SecurityEntityImpl implements TurbineUserGroupRoleEntity
 {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
     private Set<? extends TurbineUserGroupRole> userGroupRoleSet = new 
HashSet<TurbineUserGroupRole>();
 
     /**

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractManager.java
 Fri Jan 12 14:31:04 2018
@@ -25,7 +25,6 @@ import org.apache.avalon.framework.servi
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.avalon.framework.thread.ThreadSafe;
 import org.apache.fulcrum.security.GroupManager;
-import org.apache.fulcrum.security.ModelManager;
 import org.apache.fulcrum.security.PermissionManager;
 import org.apache.fulcrum.security.RoleManager;
 import org.apache.fulcrum.security.UserManager;

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java
 Fri Jan 12 14:31:04 2018
@@ -39,6 +39,11 @@ import org.apache.fulcrum.security.util.
  */
 public abstract class AbstractUserManager extends AbstractEntityManager 
implements UserManager
 {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
     protected abstract <T extends User> T persistNewUser(T user) throws 
DataBackendException;
 
     private ACLFactory aclFactory;

Modified: 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java
 Fri Jan 12 14:31:04 2018
@@ -31,7 +31,7 @@ import org.apache.fulcrum.security.entit
  * @author <a href="mailto:[email protected]";>Eric Pugh</a>
  * @version $Id$
  */
-public class UserSet extends SecuritySet<User>
+public class UserSet<T extends User> extends SecuritySet<User>
 {
     /**
      * Serial number

Modified: 
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/turbine/test/AbstractTurbineModelManagerTest.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/turbine/test/AbstractTurbineModelManagerTest.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/turbine/test/AbstractTurbineModelManagerTest.java
 (original)
+++ 
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/turbine/test/AbstractTurbineModelManagerTest.java
 Fri Jan 12 14:31:04 2018
@@ -41,6 +41,7 @@ import org.apache.fulcrum.security.model
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
 import org.apache.fulcrum.security.util.PermissionSet;
+import org.apache.fulcrum.security.util.UserSet;
 import org.apache.fulcrum.testcontainer.BaseUnit4Test;
 import org.junit.Before;
 import org.junit.Test;
@@ -174,18 +175,33 @@ public abstract class AbstractTurbineMod
         Role role = securityService.getRoleManager().getRoleInstance();
         role.setName("TEST_REVOKEALLUSER_ROLE");
         role = securityService.getRoleManager().addRole(role);
-
-        User user = userManager.getUserInstance("calvin");
-        user = userManager.addUser(user, "calvin");
+        String username = "calvin";
+        User user = userManager.getUserInstance(username);
+        user = userManager.addUser(user, username);
         modelManager.grant(user, group, role);
-
-        group = groupManager.getGroupById(group.getId());
+        // original objects have relationship attached
         Set<TurbineUserGroupRole> userGroupRoleSet =  
((TurbineUser)user).getUserGroupRoleSet();
         assertEquals(1, userGroupRoleSet.size());
-//        Set<TurbineUserGroupRole> userGroupRoleSet = ((TurbineGroup) 
group).getUserGroupRoleSet();
-//        assertEquals(1, userGroupRoleSet.size());
+        Set<TurbineUserGroupRole> userGroupRoleSet1 = ((TurbineRole) 
role).getUserGroupRoleSet();
+        assertEquals(1, userGroupRoleSet1.size());
         Set<TurbineUserGroupRole> userGroupRoleSet2 = ((TurbineGroup) 
group).getUserGroupRoleSet();
         assertEquals(1, userGroupRoleSet2.size());
+        // retrieve objects again, which have as lazily loaded no usergroupset 
yet
+        group = groupManager.getGroupById(group.getId());
+        user = userManager.getUser( username );
+        role = roleManager.getRoleById( role.getId() );
+        
+        UserSet<User> userSet = userManager.getAllUsers();
+        User user2 = userManager.getUserById( user.getId() );
+        assertEquals( user, user2 );
+        
+        // retrieve usergroupset now
+        userGroupRoleSet =  ((TurbineUser)user).getUserGroupRoleSet();
+        assertEquals(1, userGroupRoleSet.size());
+        userGroupRoleSet1 = ((TurbineRole) role).getUserGroupRoleSet();
+        assertEquals(1, userGroupRoleSet1.size());
+        userGroupRoleSet2 = ((TurbineGroup) group).getUserGroupRoleSet();
+        assertEquals(1, userGroupRoleSet2.size());
 
         modelManager.revokeAll(user);
         group = groupManager.getGroupById(group.getId());

Modified: 
turbine/fulcrum/trunk/security/torque/schema/fulcrum-turbine-default-schema.xml
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/schema/fulcrum-turbine-default-schema.xml?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/schema/fulcrum-turbine-default-schema.xml 
(original)
+++ 
turbine/fulcrum/trunk/security/torque/schema/fulcrum-turbine-default-schema.xml 
Fri Jan 12 14:31:04 2018
@@ -99,7 +99,8 @@
     </foreign-key>
   </table>
 
-  <table name="TURBINE_USER_GROUP_ROLE" javaName="TurbineUserGroupRole" 
idMethod="none">
+  <table name="TURBINE_USER_GROUP_ROLE" javaName="TurbineUserGroupRole" 
idMethod="none" 
+  
interface="org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper">
     <column name="USER_ID" required="true" primaryKey="true" type="INTEGER" 
javaType="object"/>
     <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER" 
javaType="object"/>
     <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER" 
javaType="object"/>

Added: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/LazyLoadable.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/LazyLoadable.java?rev=1820996&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/LazyLoadable.java
 (added)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/LazyLoadable.java
 Fri Jan 12 14:31:04 2018
@@ -0,0 +1,10 @@
+package org.apache.fulcrum.security.torque;
+
+public interface LazyLoadable
+{
+
+    Boolean getLazyLoading();
+
+    void setLazyLoading( Boolean lazyLoading );
+
+}
\ No newline at end of file

Propchange: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/LazyLoadable.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractGroupManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractGroupManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractGroupManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractGroupManager.java
 Fri Jan 12 14:31:04 2018
@@ -40,7 +40,7 @@ import org.apache.torque.util.Transactio
  * @author <a href="mailto:[email protected]";>Thomas Vandahl</a>
  * @version $Id:$
  */
-public abstract class TorqueAbstractGroupManager extends AbstractGroupManager 
+public abstract class TorqueAbstractGroupManager extends AbstractGroupManager 
implements LazyLoadable 
 {
     
        /** Serial version */

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractRoleManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractRoleManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractRoleManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractRoleManager.java
 Fri Jan 12 14:31:04 2018
@@ -22,7 +22,6 @@ import java.util.List;
 
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.logger.Loggable;
 import org.apache.fulcrum.security.entity.Role;
 import org.apache.fulcrum.security.spi.AbstractRoleManager;
 import 
org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity;
@@ -40,7 +39,7 @@ import org.apache.torque.util.Transactio
  * @author <a href="mailto:[email protected]";>Thomas Vandahl</a>
  * @version $Id:$
  */
-public abstract class TorqueAbstractRoleManager extends AbstractRoleManager 
+public abstract class TorqueAbstractRoleManager extends AbstractRoleManager 
implements LazyLoadable 
 {
     
        /** Serial version */
@@ -390,12 +389,20 @@ public abstract class TorqueAbstractRole
     }
 
 
+    /* (non-Javadoc)
+     * @see org.apache.fulcrum.security.torque.LazyLoadable#getLazyLoading()
+     */
+    @Override
     public Boolean getLazyLoading()
     {
         return lazyLoading;
     }
 
 
+    /* (non-Javadoc)
+     * @see 
org.apache.fulcrum.security.torque.LazyLoadable#setLazyLoading(java.lang.Boolean)
+     */
+    @Override
     public void setLazyLoading( Boolean lazyLoading )
     {
         this.lazyLoading = lazyLoading;

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
 Fri Jan 12 14:31:04 2018
@@ -284,7 +284,7 @@ public abstract class TorqueAbstractUser
        *         backend.
        */
     @Override
-       public UserSet getAllUsers() throws DataBackendException
+       public <T extends User> UserSet<T> getAllUsers() throws 
DataBackendException
     {
         UserSet userSet = new UserSet();
         Connection con = null;

Added: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/om/TurbineUserGroupRolePeerImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/om/TurbineUserGroupRolePeerImpl.java?rev=1820996&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/om/TurbineUserGroupRolePeerImpl.java
 (added)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/om/TurbineUserGroupRolePeerImpl.java
 Fri Jan 12 14:31:04 2018
@@ -0,0 +1,23 @@
+package org.apache.fulcrum.security.torque.om;
+
+import org.apache.fulcrum.security.torque.peer.TorqueTurbineUserGroupRolePeer;
+
+/**
+ * The skeleton for this class was autogenerated by Torque on:
+ *
+ * [Mon Nov 27 14:37:43 CET 2017]
+ *
+ * You should add additional methods to this class to meet the
+ * application requirements.  This class will only be generated as
+ * long as it does not already exist in the output directory.
+ */
+
+public class TurbineUserGroupRolePeerImpl
+    extends 
org.apache.fulcrum.security.torque.om.BaseTurbineUserGroupRolePeerImpl
+    implements TorqueTurbineUserGroupRolePeer
+{
+    /** Serial version */
+    private static final long serialVersionUID = 1511789863339L;
+
+
+}

Propchange: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/om/TurbineUserGroupRolePeerImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/Peer.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/Peer.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/Peer.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/Peer.java
 Fri Jan 12 14:31:04 2018
@@ -1,5 +1,22 @@
 package org.apache.fulcrum.security.torque.peer;
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * This is a marker interface for {@link PeerManager#getPeerInstance(String)}. 
  * It allows to swap database operations action classes (called Peers in 
Torque model).

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagable.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagable.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagable.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagable.java
 Fri Jan 12 14:31:04 2018
@@ -1,5 +1,22 @@
 package org.apache.fulcrum.security.torque.peer;
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import org.apache.fulcrum.security.util.DataBackendException;
 
 public interface PeerManagable

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManager.java
 Fri Jan 12 14:31:04 2018
@@ -1,5 +1,22 @@
 package org.apache.fulcrum.security.torque.peer;
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import java.io.Serializable;
 
 import org.apache.fulcrum.security.spi.AbstractEntityManager;

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagerDefaultImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagerDefaultImpl.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagerDefaultImpl.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/PeerManagerDefaultImpl.java
 Fri Jan 12 14:31:04 2018
@@ -1,5 +1,22 @@
 package org.apache.fulcrum.security.torque.peer;
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbinePeer.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbinePeer.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbinePeer.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbinePeer.java
 Fri Jan 12 14:31:04 2018
@@ -1,5 +1,22 @@
 package org.apache.fulcrum.security.torque.peer;
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import java.sql.Connection;
 import java.util.List;
 

Added: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbineUserGroupRolePeer.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbineUserGroupRolePeer.java?rev=1820996&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbineUserGroupRolePeer.java
 (added)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbineUserGroupRolePeer.java
 Fri Jan 12 14:31:04 2018
@@ -0,0 +1,44 @@
+package org.apache.fulcrum.security.torque.peer;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.sql.Connection;
+import java.util.List;
+
+import org.apache.torque.TorqueException;
+import org.apache.torque.criteria.Criteria;
+import org.apache.torque.map.TableMap;
+
+/**
+ * This extension to the marker interface {@linkplain Peer} is to allow for 
swappable Peer implementations 
+ * in Turbine Torque Manager Implementations.  
+ * 
+ * @param <T>  The data object type used by the Torque PeerImpl class.
+ * 
+ * @author <a href="mailto:[email protected]";>Georg Kallidis</a>
+ * @version $Id$
+ */
+public interface TorqueTurbineUserGroupRolePeer<T extends 
TurbineUserGroupRoleModelPeerMapper>
+    extends Peer
+{
+       
+    List<T> doSelectJoinTurbineRole( Criteria criteria, Connection con ) 
throws TorqueException;
+    
+    TableMap getTableMap() throws TorqueException;
+
+}

Propchange: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TorqueTurbineUserGroupRolePeer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TurbineUserGroupRoleModelPeerMapper.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TurbineUserGroupRoleModelPeerMapper.java?rev=1820996&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TurbineUserGroupRoleModelPeerMapper.java
 (added)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TurbineUserGroupRoleModelPeerMapper.java
 Fri Jan 12 14:31:04 2018
@@ -0,0 +1,108 @@
+package org.apache.fulcrum.security.torque.peer;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.sql.Connection;
+
+import org.apache.fulcrum.security.entity.Group;
+import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.entity.User;
+import org.apache.torque.TorqueException;
+
+/**
+ * This interface allows to retrieve user, group, role relationships either 
from custom or the default OM in @link org.apache.fulcrum.security.torque.om. 
+ * 
+ * @author gkallidis
+ *
+ */
+public interface TurbineUserGroupRoleModelPeerMapper
+{
+
+    /**
+     * Returns the associated TurbineUser object.
+     * If it was not retrieved before, the object is retrieved from
+     * the database
+     *
+     * @return the associated TurbineUser object
+     * @throws TorqueException when reading from the database fails.
+     */
+    User getTurbineUser()
+        throws TorqueException;
+
+    /**
+     * Return the associated TurbineUser object
+     * If it was not retrieved before, the object is retrieved from
+     * the database using the passed connection
+     *
+     * @param connection the connection used to retrieve the associated object
+     *        from the database, if it was not retrieved before
+     * @return the associated TurbineUser object
+     * @throws TorqueException
+     */
+    User getTurbineUser( Connection connection )
+        throws TorqueException;
+
+    /**
+     * Returns the associated TurbineGroup object.
+     * If it was not retrieved before, the object is retrieved from
+     * the database
+     *
+     * @return the associated TurbineGroup object
+     * @throws TorqueException when reading from the database fails.
+     */
+    Group getTurbineGroup()
+        throws TorqueException;
+
+    /**
+     * Return the associated TurbineGroup object
+     * If it was not retrieved before, the object is retrieved from
+     * the database using the passed connection
+     *
+     * @param connection the connection used to retrieve the associated object
+     *        from the database, if it was not retrieved before
+     * @return the associated TurbineGroup object
+     * @throws TorqueException
+     */
+    Group getTurbineGroup( Connection connection )
+        throws TorqueException;
+
+    /**
+     * Returns the associated TurbineRole object.
+     * If it was not retrieved before, the object is retrieved from
+     * the database
+     *
+     * @return the associated TurbineRole object
+     * @throws TorqueException when reading from the database fails.
+     */
+    Role getTurbineRole()
+        throws TorqueException;
+
+    /**
+     * Return the associated TurbineRole object
+     * If it was not retrieved before, the object is retrieved from
+     * the database using the passed connection
+     *
+     * @param connection the connection used to retrieve the associated object
+     *        from the database, if it was not retrieved before
+     * @return the associated TurbineRole object
+     * @throws TorqueException
+     */
+    Role getTurbineRole( Connection connection )
+        throws TorqueException;
+
+}
\ No newline at end of file

Propchange: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/TurbineUserGroupRoleModelPeerMapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/managers/PeerUserManager.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/managers/PeerUserManager.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/managers/PeerUserManager.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/peer/managers/PeerUserManager.java
 Fri Jan 12 14:31:04 2018
@@ -24,6 +24,7 @@ import org.apache.fulcrum.security.torqu
 import org.apache.fulcrum.security.torque.peer.PeerManagable;
 import org.apache.fulcrum.security.torque.peer.PeerManager;
 import org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer;
+import org.apache.fulcrum.security.torque.peer.TorqueTurbineUserGroupRolePeer;
 import org.apache.fulcrum.security.util.DataBackendException;
 /**
  * This implementation persists to a database via Torque.
@@ -34,6 +35,11 @@ import org.apache.fulcrum.security.util.
 public abstract class PeerUserManager extends TorqueAbstractUserManager 
implements PeerManagable
 {
        /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
         * if set, the generic implementation is used (by setting @link {@link 
#PEER_CLASS_NAME_KEY} in configuration file.
         */
     private Boolean customPeer = false;  //  used for torque which uses per 
object peer classes
@@ -43,6 +49,10 @@ public abstract class PeerUserManager ex
     transient PeerManager peerManager;
     
        private String columnName = "LOGIN_NAME";
+       
+       private String columnName4UserGroupRole = "USER_ID";
+
+    private String userGroupRolePeerClassName;
     
     /**
      * Avalon Service lifecycle method
@@ -58,6 +68,24 @@ public abstract class PeerUserManager ex
             setPeerClassName( peerClassName );
             setCustomPeer(true);
         } 
+        
+        Configuration[]  userGroupRoleConf = conf.getChild( 
"userGroupRoleManager").getChildren();
+        for ( int i = 0; i < userGroupRoleConf.length; i++ )
+        {
+            Configuration configuration = userGroupRoleConf[i];
+            if ( configuration.getName().equals(PEER_CLASS_NAME_KEY) ) {
+                userGroupRolePeerClassName = configuration.getValue( null );
+                if (userGroupRolePeerClassName != null) {
+                    setUserGroupRolePeerClassName( userGroupRolePeerClassName 
);
+                    setCustomPeer(true);
+                } 
+            }  
+        }
+        if (peerClassName != null && userGroupRolePeerClassName == null) {
+            //peerClassName.replace( "TurbineUserPeerImpl", 
"TurbineUserPeerImpl )
+            throw new ConfigurationException("If using peers in component 
configuration (xml) the element userManager expects to have a 
userGroupRoleManager child element with peerClassName child element.");
+        }
+
     }
   
     
@@ -66,6 +94,10 @@ public abstract class PeerUserManager ex
         return getPeerManager().getPeerInstance(getPeerClassName(), 
TorqueTurbinePeer.class, getClassName());
     }
     
+    public Peer getUserGroupRolePeerInstance() throws DataBackendException {
+        return 
getPeerManager().getPeerInstance(getUserGroupRolePeerClassName(), 
TorqueTurbineUserGroupRolePeer.class, getClassName());
+    }
+    
     /**
      * @return Returns the persistenceHelper.
      */
@@ -114,6 +146,30 @@ public abstract class PeerUserManager ex
     {
         this.peerClassName = peerClassName;
     }
+
+
+    public String getUserGroupRolePeerClassName()
+    {
+        return userGroupRolePeerClassName;
+    }
+
+
+    public void setUserGroupRolePeerClassName( String 
userGroupRolePeerClassName )
+    {
+        this.userGroupRolePeerClassName = userGroupRolePeerClassName;
+    }
+
+
+    public String getColumnName4UserGroupRole()
+    {
+        return columnName4UserGroupRole;
+    }
+
+
+    public void setColumnName4UserGroupRole( String columnName4UserGroupRole )
+    {
+        this.columnName4UserGroupRole = columnName4UserGroupRole;
+    }
    
     
 }

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/TorqueAbstractSecurityEntity.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/TorqueAbstractSecurityEntity.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/TorqueAbstractSecurityEntity.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/TorqueAbstractSecurityEntity.java
 Fri Jan 12 14:31:04 2018
@@ -62,15 +62,16 @@ public abstract class TorqueAbstractSecu
      * @param name the name of the entity
      */
     public abstract void setEntityName(String name);
-
+     
     /**
      * Retrieve attached objects such as users, permissions, ...
-     *
+     * 
      * @param con A database connection
-     * @param lazy if <code>true</code>, may load some or all relationships 
later
+     * * @param lazy if <code>true</code>, may load some or all relationships 
later
      */
     public abstract void retrieveAttachedObjects(Connection con, Boolean lazy) 
throws TorqueException;
     
+    
     /**
      * old contract, lazy is set to <code>false</code>.
      *

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntity.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntity.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntity.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntity.java
 Fri Jan 12 14:31:04 2018
@@ -40,7 +40,7 @@ public abstract class TorqueAbstractTurb
 
        /** a cache of user_group_role objects */
     private Set<? extends TurbineUserGroupRole> userGroupRoleSet = null;
-
+    
     /**
      * @throws DataBackendException 
      * @see 
org.apache.fulcrum.security.model.turbine.entity.TurbineGroup#addUserGroupRole(org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole)
@@ -49,20 +49,36 @@ public abstract class TorqueAbstractTurb
     {
         getUserGroupRoleSet().add(userGroupRole);
     }
-
-    /**
-     * @throws DataBackendException if loaded lazily
-     * @see 
org.apache.fulcrum.security.model.turbine.entity.TurbineGroup#getUserGroupRoleSet()
-     */
+    
+    public void addUserGroupRole( TurbineUserGroupRole user_group_role, 
boolean isLazilyLoaded ) throws DataBackendException {
+        if (isLazilyLoaded) 
+        {
+            getDefaultUserGroupRoleSet().add( user_group_role ); 
+        } 
+        else  
+        { 
+            getUserGroupRoleSet().add( user_group_role );
+        }
+    }
+    
     @SuppressWarnings("unchecked")
-       public <T extends TurbineUserGroupRole> Set<T> getUserGroupRoleSet() 
throws DataBackendException
+    private <T extends TurbineUserGroupRole> Set<T> 
getDefaultUserGroupRoleSet() throws DataBackendException
     {
         if (userGroupRoleSet == null)
         {
             userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
         }
 
-        return (Set<T>)userGroupRoleSet;
+        return (Set<T>) userGroupRoleSet;
+    }
+
+    /**
+     * @throws DataBackendException if loaded lazily
+     * @see 
org.apache.fulcrum.security.model.turbine.entity.TurbineGroup#getUserGroupRoleSet()
+     */
+       public <T extends TurbineUserGroupRole> Set<T> getUserGroupRoleSet() 
throws DataBackendException
+    {
+        return getDefaultUserGroupRoleSet();
     }
 
     /**
@@ -73,6 +89,17 @@ public abstract class TorqueAbstractTurb
     {
         getUserGroupRoleSet().remove(userGroupRole);
     }
+    
+    public void removeUserGroupRole( TurbineUserGroupRole user_group_role, 
boolean isLazilyLoaded ) throws DataBackendException {
+        if (isLazilyLoaded) 
+        {
+            getDefaultUserGroupRoleSet().remove( user_group_role ); 
+        } 
+        else  
+        { 
+            getUserGroupRoleSet().remove( user_group_role );
+        }
+    }
 
     /**
      * @see 
org.apache.fulcrum.security.model.turbine.entity.TurbineGroup#setUserGroupRoleSet(java.util.Set)
@@ -88,12 +115,5 @@ public abstract class TorqueAbstractTurb
             this.userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
         }
     }
-    
-//    /**
-//     * Retrieve attached objects 
-//     *
-//     * @param con A database connection
-//     * @param lazy if <code>true</code>, does not retrieve user group role 
relationships
-//     */
-//    public abstract void retrieveAttachedObjects(Connection con, boolean 
lazy) throws TorqueException;
+
 }

Added: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntityDefault.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntityDefault.java?rev=1820996&view=auto
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntityDefault.java
 (added)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntityDefault.java
 Fri Jan 12 14:31:04 2018
@@ -0,0 +1,53 @@
+package org.apache.fulcrum.security.torque.security.turbine;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.sql.Connection;
+import java.util.List;
+
+import org.apache.fulcrum.security.model.ACLFactory;
+import 
org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRoleEntity;
+import 
org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper;
+import org.apache.torque.TorqueException;
+
+/**
+ * This abstract class extends the user manager to allow for custom OM 
attached objects (user group role relationships) for ACL.
+ * 
+ * Additional Torque Custom Peer contract
+ *
+ * @author <a href="mailto:[email protected]";>Georg Kallidis</a>
+ * @version $Id:$
+ */
+public abstract class TorqueAbstractTurbineTurbineSecurityEntityDefault 
extends TorqueAbstractTurbineTurbineSecurityEntity
+    implements TurbineUserGroupRoleEntity // not in group and role but already 
in TurbineUser interface 
+{
+    
+    private static final long serialVersionUID = 1L;
+   
+    /**
+     * Retrieve attached objects for user: user-group-role relationship(s)
+     * 
+     * This method is required if custom peers is activated for (user) 
manager, to allow the custom group/role in {@link 
ACLFactory#getAccessControlList(org.apache.fulcrum.security.entity.User)}
+     * 
+     * @param con A database connection
+     * @param lazy if <code>true</code>, fetches objects lazily
+     * @param ugrs The custom TurbineUserGroupRole set
+     */
+    public abstract <T extends TurbineUserGroupRoleModelPeerMapper> void 
retrieveAttachedObjects( Connection con, Boolean lazy, List<T> ugrs ) throws 
TorqueException;
+   
+}

Propchange: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/security/turbine/TorqueAbstractTurbineTurbineSecurityEntityDefault.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/DefaultAbstractTurbineUser.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/DefaultAbstractTurbineUser.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/DefaultAbstractTurbineUser.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/DefaultAbstractTurbineUser.java
 Fri Jan 12 14:31:04 2018
@@ -27,10 +27,13 @@ import org.apache.fulcrum.security.model
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
 import org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeer;
 import org.apache.fulcrum.security.torque.om.TurbineUserPeer;
+import 
org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper;
 import 
org.apache.fulcrum.security.torque.security.turbine.TorqueAbstractTurbineTurbineSecurityEntity;
+import 
org.apache.fulcrum.security.torque.security.turbine.TorqueAbstractTurbineTurbineSecurityEntityDefault;
 import org.apache.torque.TorqueException;
 import org.apache.torque.criteria.Criteria;
 import org.apache.torque.om.SimpleKey;
+
 /**
  * This abstract class provides the SecurityInterface to the managers.
  * 
@@ -39,16 +42,21 @@ import org.apache.torque.om.SimpleKey;
  * @author <a href="mailto:[email protected]";>Thomas Vandahl</a>
  * @version $Id:$
  */
-public abstract class DefaultAbstractTurbineUser extends 
TorqueAbstractTurbineTurbineSecurityEntity
+public abstract class DefaultAbstractTurbineUser extends 
TorqueAbstractTurbineTurbineSecurityEntityDefault
 {
     /** Serial version */
        private static final long serialVersionUID = -7255623655281852566L;
 
     /**
-     * Forward reference to generated code
+     * Forward reference to module generated code
      *
      * Get a list of association objects, pre-populated with their TurbineRole
      * objects.
+     * 
+     * Does intentionally not initialize the cache collTurbineUserGroupRoles 
for referenced objects. 
+     * 
+     * Be careful not call any of the generated getTurbineUserGroupRoles 
methods in derived classes,
+     * the link {@link #save()} method otherwise might not update the right 
relationships.
      *
      * @param criteria Criteria to define the selection of records
      * @param con a database connection
@@ -56,37 +64,46 @@ public abstract class DefaultAbstractTur
      *
      * @return a list of User/Group/Role relations
      */
-    protected List<org.apache.fulcrum.security.torque.om.TurbineUserGroupRole> 
getTurbineUserGroupRolesJoinTurbineRole(Criteria criteria, Connection con)
+    protected <T extends TurbineUserGroupRoleModelPeerMapper> List<T> 
getTurbineUserGroupRolesJoinTurbineRole(Criteria criteria, Connection con)
         throws TorqueException
     {
         criteria.and(TurbineUserGroupRolePeer.USER_ID, getEntityId() );
-        return TurbineUserGroupRolePeer.doSelectJoinTurbineRole(criteria, con);
+        return (List<T>) 
TurbineUserGroupRolePeer.doSelectJoinTurbineRole(criteria, con);
     }
-
     
+    /**
+     * 
+     * @see 
TorqueAbstractTurbineTurbineSecurityEntity#retrieveAttachedObjects(Connection, 
Boolean, List)
+     */
+    @Override
+    public <T extends TurbineUserGroupRoleModelPeerMapper> void 
retrieveAttachedObjects( Connection con, Boolean lazy, List<T> ugrs ) throws 
TorqueException
+    {
+        if (!lazy ) { // !lazy
+            Set<TurbineUserGroupRole> userGroupRoleSet = new 
HashSet<TurbineUserGroupRole>();
+    
+            if (ugrs == null) { // default 
+                ugrs = getTurbineUserGroupRolesJoinTurbineRole(new Criteria(), 
con);
+            } 
+    
+            maptoModel( con, userGroupRoleSet, 
(List<TurbineUserGroupRoleModelPeerMapper>) ugrs );
+            
+            setUserGroupRoleSet(userGroupRoleSet);
+        }
+    }
     
     /**
-     * @see 
TorqueAbstractTurbineTurbineSecurityEntity#retrieveAttachedObjects(Connection, 
Boolean)
+     * @see 
TorqueAbstractTurbineTurbineSecurityEntity#retrieveAttachedObjects(Connection, 
boolean)
      */
     @Override
     public void retrieveAttachedObjects( Connection con, Boolean lazy ) throws 
TorqueException
     {
         if (!lazy) {
             Set<TurbineUserGroupRole> userGroupRoleSet = new 
HashSet<TurbineUserGroupRole>();
+            
+            List<TurbineUserGroupRoleModelPeerMapper> ugrs = 
getTurbineUserGroupRolesJoinTurbineRole(new Criteria(), con);
     
-            List<org.apache.fulcrum.security.torque.om.TurbineUserGroupRole> 
ugrs = getTurbineUserGroupRolesJoinTurbineRole(new Criteria(), con);
-    
-            for (org.apache.fulcrum.security.torque.om.TurbineUserGroupRole 
ttugr : ugrs)
-            {
-                TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-                ugr.setUser((User) this);
-                ugr.setRole(ttugr.getTurbineRole());
-                // org.apache.fulcrum.security.torque.om.TurbineGroup 
implements 
-                // 
org.apache.fulcrum.security.model.turbine.entity.TurbineGroup
-                // but may be hides it? 
-                ugr.setGroup(ttugr.getTurbineGroup(con));
-                userGroupRoleSet.add(ugr);
-            }
+            // org.apache.fulcrum.security.torque.om.TurbineUserGroupRole
+            maptoModel( con, userGroupRoleSet, ugrs );
     
             setUserGroupRoleSet(userGroupRoleSet);
         }
@@ -96,7 +113,7 @@ public abstract class DefaultAbstractTur
     public void retrieveAttachedObjects( Connection con )
         throws TorqueException
     {
-        retrieveAttachedObjects( con, false );
+        retrieveAttachedObjects( con, false ); //false
     }
 
     /**
@@ -141,4 +158,21 @@ public abstract class DefaultAbstractTur
     {
         TurbineUserPeer.doDelete(SimpleKey.keyFor(getEntityId()));
     }
+    
+    private void maptoModel( Connection con, Set<TurbineUserGroupRole> 
userGroupRoleSet,
+                             List<TurbineUserGroupRoleModelPeerMapper> ugrs )
+        throws TorqueException
+    {
+        for (TurbineUserGroupRoleModelPeerMapper ttugr : ugrs)
+        {
+            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
+            ugr.setUser((User) this);
+            ugr.setRole(ttugr.getTurbineRole(con));
+            // org.apache.fulcrum.security.torque.om.TurbineGroup implements 
+            // org.apache.fulcrum.security.model.turbine.entity.TurbineGroup
+            // but may be hides it? 
+            ugr.setGroup(ttugr.getTurbineGroup(con));
+            userGroupRoleSet.add(ugr);
+        }
+    }
 }

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineModelManagerImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineModelManagerImpl.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineModelManagerImpl.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineModelManagerImpl.java
 Fri Jan 12 14:31:04 2018
@@ -30,9 +30,11 @@ import org.apache.fulcrum.security.model
 import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
+import org.apache.fulcrum.security.torque.LazyLoadable;
 import org.apache.fulcrum.security.torque.om.TurbineRolePermissionPeer;
 import org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeer;
 import 
org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity;
+import 
org.apache.fulcrum.security.torque.security.turbine.TorqueAbstractTurbineTurbineSecurityEntity;
 import org.apache.fulcrum.security.util.DataBackendException;
 import org.apache.fulcrum.security.util.UnknownEntityException;
 import org.apache.torque.TorqueException;
@@ -177,10 +179,20 @@ public class TorqueTurbineModelManagerIm
             user_group_role.setRole(role);
             ((TurbineUser) user).addUserGroupRole(user_group_role);
             if (group instanceof TurbineGroup ) {
-               ((TurbineGroup) group).addUserGroupRole(user_group_role);
+                if (getGroupManager() instanceof LazyLoadable) {
+                    ((TorqueAbstractTurbineTurbineSecurityEntity) 
group).addUserGroupRole(user_group_role, 
+                                                                               
           ((LazyLoadable)getGroupManager()).getLazyLoading());
+                } else {
+                    ((TurbineGroup) group).addUserGroupRole(user_group_role);  
                  
+                }
             }
             if (role instanceof TurbineRole ) {
-               ((TurbineRole) role).addUserGroupRole(user_group_role);
+                if (getRoleManager() instanceof LazyLoadable) {
+                    ((TorqueAbstractTurbineTurbineSecurityEntity) 
role).addUserGroupRole(user_group_role,
+                                                                               
          ((LazyLoadable)getRoleManager()).getLazyLoading());
+                } else {
+                    ((TurbineRole) role).addUserGroupRole(user_group_role);    
                
+                }
             }
 
             Connection con = null;
@@ -188,7 +200,10 @@ public class TorqueTurbineModelManagerIm
             try
             {
                 con = Transaction.begin();
-
+                // save only the new user group may be the better contract, 
but this would 
+                //  require/add a dependency to initTurbineUserGroupRoles()
+                //((TorqueAbstractSecurityEntity)user).save( con );
+                
                 ((TorqueAbstractSecurityEntity)user).update(con);
                 //((TorqueAbstractSecurityEntity)group).update(con);
                 //((TorqueAbstractSecurityEntity)role).update(con);
@@ -203,6 +218,13 @@ public class TorqueTurbineModelManagerIm
                         + group.getName() + "', '"
                         + role.getName() + "') failed", e);
             }
+            catch ( Exception e )
+            {
+                throw new DataBackendException("grant('"
+                                + user.getName() + "', '"
+                                + group.getName() + "', '"
+                                + role.getName() + "') failed", e);
+            }
             finally
             {
                 if (con != null)
@@ -251,10 +273,20 @@ public class TorqueTurbineModelManagerIm
                     ugrFound = true;
                     ((TurbineUser)user).removeUserGroupRole(user_group_role);
                     if (group instanceof TurbineGroup ) {
-                       
((TurbineGroup)group).removeUserGroupRole(user_group_role);
+                        if (getGroupManager() instanceof LazyLoadable) {
+                            ((TorqueAbstractTurbineTurbineSecurityEntity) 
group).removeUserGroupRole(user_group_role, 
+                                                                               
                      ((LazyLoadable)getGroupManager()).getLazyLoading());
+                        } else {
+                            ((TurbineGroup) 
group).removeUserGroupRole(user_group_role); 
+                        }
                     }
                     if (role instanceof TurbineRole ) {
-                       
((TurbineRole)role).removeUserGroupRole(user_group_role);
+                        if (getRoleManager() instanceof LazyLoadable) {
+                            ((TorqueAbstractTurbineTurbineSecurityEntity) 
role).removeUserGroupRole(user_group_role, 
+                                                                               
                     ((LazyLoadable)getGroupManager()).getLazyLoading());
+                        } else {
+                            ((TurbineRole) 
role).removeUserGroupRole(user_group_role);
+                        }
                     }
                     break;
                 }

Modified: 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
 Fri Jan 12 14:31:04 2018
@@ -24,13 +24,19 @@ import org.apache.fulcrum.security.entit
 import org.apache.fulcrum.security.model.turbine.TurbineUserManager;
 import org.apache.fulcrum.security.torque.om.TorqueTurbineUserPeer;
 import org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer;
+import org.apache.fulcrum.security.torque.peer.TorqueTurbineUserGroupRolePeer;
+import 
org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper;
 import org.apache.fulcrum.security.torque.peer.managers.PeerUserManager;
+import 
org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity;
+import 
org.apache.fulcrum.security.torque.security.turbine.TorqueAbstractTurbineTurbineSecurityEntityDefault;
 import org.apache.fulcrum.security.util.DataBackendException;
 import org.apache.fulcrum.security.util.UnknownEntityException;
+import org.apache.fulcrum.security.util.UserSet;
 import org.apache.torque.NoRowsException;
 import org.apache.torque.TooManyRowsException;
 import org.apache.torque.TorqueException;
 import org.apache.torque.criteria.Criteria;
+import org.apache.torque.util.Transaction;
 /**
  * This implementation persists to a database via Torque.
  * 
@@ -169,5 +175,186 @@ public class TorqueTurbineUserManagerImp
         
         return users.get(0);
     }
+    
+    /**
+     * Retrieve a user from persistent storage using username as the
+     * key.
+     *
+     * @param userName the name of the user.
+     * @return an User object.
+     * @exception UnknownEntityException if the user's account does not
+     *            exist in the database.
+     * @exception DataBackendException if there is a problem accessing the
+     *            storage.
+     */
+    @Override
+    public <T extends User> T getUser(String userName) throws 
UnknownEntityException, DataBackendException
+    {
+        T user = null;
+        Connection con = null;
+
+        try
+        {
+            con = Transaction.begin();
+
+            user = doSelectByName(userName.toLowerCase(), con);
+            
+            // Add attached objects if they exist
+            attachRelatedObjects( user, con ); 
+
+            Transaction.commit(con);
+            con = null;
+        }
+        catch (NoRowsException e)
+        {
+            throw new UnknownEntityException("Unknown user '" + userName + 
"'");
+        }
+        catch (TooManyRowsException e)
+        {
+            throw new DataBackendException("Multiple Users with same username 
'" + userName + "'");
+        }
+        catch (TorqueException e)
+        {
+            throw new DataBackendException("Error retrieving user 
information", e);
+        }
+        finally
+        {
+            if (con != null)
+            {
+                Transaction.safeRollback(con);
+            }
+        }
+
+        return user;
+    }
+    
+    /**
+     * Retrieves all users defined in the system.
+     *
+     * @return the names of all users defined in the system.
+     * @throws DataBackendException if there was an error accessing the data
+     *         backend.
+     */
+  @Override
+  public <T extends User> UserSet<T> getAllUsers() throws DataBackendException
+  {
+      UserSet<T> userSet = new UserSet<T>();
+      Connection con = null;
+
+      try
+      {
+          con = Transaction.begin();
+
+          List<User> users = doSelectAllUsers(con);
+
+          for (User user : users)
+          {
+              // Add attached objects if they exist
+              attachRelatedObjects( user, con ); 
+
+              userSet.add(user);
+          }
+
+          Transaction.commit(con);
+          con = null;
+      }
+      catch (TorqueException e)
+      {
+          throw new DataBackendException("Error retrieving all users", e);
+      }
+      finally
+      {
+          if (con != null)
+          {
+              Transaction.safeRollback(con);
+          }
+      }
+
+      return userSet;
+  }
+
+  /**
+   * Retrieve a User object with specified id.
+   *
+   * @param id
+   *            the id of the User.
+   * @return an object representing the User with specified id.
+   * @throws DataBackendException
+   *             if there was an error accessing the data backend.
+   * @throws UnknownEntityException
+   *             if the user does not exist.
+   */
+  @Override
+  public <T extends User> T getUserById(Object id) throws 
DataBackendException, UnknownEntityException
+  {
+      T user;
+
+      if (id != null && id instanceof Integer)
+      {
+          Connection con = null;
+
+          try
+          {
+              con = Transaction.begin();
+
+              user = doSelectById((Integer)id, con);
+
+              // Add attached objects if they exist
+              attachRelatedObjects( user, con ); 
+
+              Transaction.commit(con);
+              con = null;
+          }
+          catch (NoRowsException e)
+          {
+              throw new UnknownEntityException("User with id '" + id + "' does 
not exist.", e);
+          }
+          catch (TorqueException e)
+          {
+              throw new DataBackendException("Error retrieving user 
information", e);
+          }
+          finally
+          {
+              if (con != null)
+              {
+                  Transaction.safeRollback(con);
+              }
+          }
+      }
+      else
+      {
+          throw new UnknownEntityException("Invalid user id '" + id + "'");
+      }
+
+      return user;
+  }
+  
+  private <T extends User> void attachRelatedObjects( T user, Connection con )
+                  throws TorqueException
+              {
+                  if (user instanceof TorqueAbstractSecurityEntity) {
+                      if (getCustomPeer()) {
+                          try
+                          {
+                              
TorqueTurbineUserGroupRolePeer<TurbineUserGroupRoleModelPeerMapper> 
peerInstance = 
+                                              
(TorqueTurbineUserGroupRolePeer<TurbineUserGroupRoleModelPeerMapper>) 
getUserGroupRolePeerInstance();
+                              Criteria criteria = new Criteria();
+                              // expecting the same name in any custom 
implementation
+                              
criteria.where(peerInstance.getTableMap().getColumn(getColumnName4UserGroupRole()
 ), ( (TorqueAbstractSecurityEntity) user ).getEntityId() );                    
    
+                              List<TurbineUserGroupRoleModelPeerMapper> ugrs = 
peerInstance.doSelectJoinTurbineRole( criteria, con );
+                              
+                              if (user instanceof 
TorqueAbstractTurbineTurbineSecurityEntityDefault) {
+                                  
((TorqueAbstractTurbineTurbineSecurityEntityDefault)user).retrieveAttachedObjects(con,
 false, ugrs);
+                              }
+                          }
+                          catch ( DataBackendException e )
+                          {
+                              throw new TorqueException( e );
+                          }
+                      } else {
+                          
((TorqueAbstractSecurityEntity)user).retrieveAttachedObjects(con);
+                      }
+                  }
+              }
 
 }

Modified: 
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultLazyWithPeersComponentConfig.xml
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultLazyWithPeersComponentConfig.xml?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultLazyWithPeersComponentConfig.xml
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultLazyWithPeersComponentConfig.xml
 Fri Jan 12 14:31:04 2018
@@ -27,6 +27,11 @@
     <userManager>
         
<className>org.apache.fulcrum.security.torque.om.TurbineUser</className>
         
<peerClassName>org.apache.fulcrum.security.torque.om.TurbineUserPeerImpl</peerClassName>
+        <!--  required for acl custom mapping -->
+        <userGroupRoleManager>
+            <!-- 
className>org.apache.fulcrum.security.torque.om.TurbineUserGroupRole</className-->
+            
<peerClassName>org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeerImpl</peerClassName>
+        </userGroupRoleManager>
     </userManager>
     <groupManager lazy="true">
         
<className>org.apache.fulcrum.security.torque.om.TurbineGroup</className>

Modified: 
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultWithPeersComponentConfig.xml
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultWithPeersComponentConfig.xml?rev=1820996&r1=1820995&r2=1820996&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultWithPeersComponentConfig.xml
 (original)
+++ 
turbine/fulcrum/trunk/security/torque/src/test/TurbineDefaultWithPeersComponentConfig.xml
 Fri Jan 12 14:31:04 2018
@@ -27,6 +27,11 @@
     <userManager>
         
<className>org.apache.fulcrum.security.torque.om.TurbineUser</className>
         
<peerClassName>org.apache.fulcrum.security.torque.om.TurbineUserPeerImpl</peerClassName>
+        <!--  required for acl custom mapping -->
+        <userGroupRoleManager>
+               <!-- 
className>org.apache.fulcrum.security.torque.om.TurbineUserGroupRole</className-->
+               
<peerClassName>org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeerImpl</peerClassName>
+           </userGroupRoleManager>
     </userManager>
     <groupManager>
         
<className>org.apache.fulcrum.security.torque.om.TurbineGroup</className>


Reply via email to