You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2023/09/19 14:15:26 UTC
[turbine-fulcrum-security] 02/02: provide UserSet retrieveUserList(Object criteria) in UserManager, example in module memory and implementation in module torque, remove duplicate code of getAllUsers() in TorqueTurbineUserManagerImpl, add abstract method doSelectUsers in TorqueAbstractUserManager and impl in torque basic/dynamic/turbine user managers
This is an automated email from the ASF dual-hosted git repository.
gk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-security.git
commit 91affeee795d609dab7487dcc0028d848b2d8614
Author: Georg Kallidis <gk...@apache.org>
AuthorDate: Tue Sep 19 16:13:39 2023 +0200
provide UserSet retrieveUserList(Object criteria) in UserManager, example in module memory and implementation in module torque, remove duplicate code of getAllUsers() in TorqueTurbineUserManagerImpl, add abstract method doSelectUsers in TorqueAbstractUserManager and impl in torque basic/dynamic/turbine user managers
---
.../org/apache/fulcrum/security/UserManager.java | 11 +++
.../model/test/AbstractUserManagerTest.java | 13 +++
.../security/memory/MemoryUserManagerImpl.java | 8 ++
.../security/torque/TorqueAbstractUserManager.java | 46 +++++++++
.../torque/basic/TorqueBasicUserManagerImpl.java | 8 ++
.../dynamic/TorqueDynamicUserManagerImpl.java | 10 ++
.../turbine/TorqueTurbineUserManagerImpl.java | 106 +++++++++++++--------
7 files changed, 160 insertions(+), 42 deletions(-)
diff --git a/api/src/java/org/apache/fulcrum/security/UserManager.java b/api/src/java/org/apache/fulcrum/security/UserManager.java
index 9659ba2..702a33b 100644
--- a/api/src/java/org/apache/fulcrum/security/UserManager.java
+++ b/api/src/java/org/apache/fulcrum/security/UserManager.java
@@ -157,6 +157,17 @@ public interface UserManager extends Serializable
* if there was an error accessing the data backend.
*/
<T extends User> UserSet<T> getAllUsers() throws DataBackendException;
+
+ /**
+ * Retrieve a list of users that meet the specified criteria.
+ *
+ * @param criteria The criteria of selection.
+ * @return a List of users meeting the criteria.
+ * @throws DataBackendException if there is a problem accessing the
+ * storage.
+ */
+ <T extends User> UserSet<T> retrieveUserList(Object criteria)
+ throws DataBackendException;
/**
* Saves User's data in the permanent storage. The user account is required
diff --git a/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java b/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java
index 4e4df23..2364b40 100644
--- a/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java
+++ b/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java
@@ -122,6 +122,19 @@ public abstract class AbstractUserManagerTest extends BaseUnit5Test
assertEquals(size + 1, userSet.size());
}
@Test
+ public void testRetrieveUserList() throws Exception
+ {
+ int size = userManager.getAllUsers().size();
+ user = userManager.getUserInstance("Bob");
+ userManager.addUser(user, "");
+ user = userManager.getUserInstance("Claire");
+ userManager.addUser(user, "");
+ user = userManager.getUserInstance("Clairanne");
+ userManager.addUser(user, "");
+ UserSet userSet = userManager.retrieveUserList( "Clair" );
+ assertEquals(2, userSet.size());
+ }
+ @Test
public void testAuthenticate() throws Exception
{
user = userManager.getUserInstance("Kay");
diff --git a/memory/src/java/org/apache/fulcrum/security/memory/MemoryUserManagerImpl.java b/memory/src/java/org/apache/fulcrum/security/memory/MemoryUserManagerImpl.java
index a4dd8a9..dc64fd9 100644
--- a/memory/src/java/org/apache/fulcrum/security/memory/MemoryUserManagerImpl.java
+++ b/memory/src/java/org/apache/fulcrum/security/memory/MemoryUserManagerImpl.java
@@ -20,6 +20,7 @@ package org.apache.fulcrum.security.memory;
*/
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.fulcrum.security.entity.User;
import org.apache.fulcrum.security.spi.AbstractUserManager;
@@ -72,6 +73,13 @@ public class MemoryUserManagerImpl extends AbstractUserManager {
public UserSet getAllUsers() throws DataBackendException {
return new UserSet(users);
}
+
+ @Override
+ public <T extends User> UserSet<T> retrieveUserList(Object criteria) throws DataBackendException
+ {
+ List filteredusers = users.stream().filter( x-> x.getName().contains( criteria.toString() ) ).collect( Collectors.toList() );
+ return new UserSet(filteredusers);
+ }
/**
* Removes an user account from the system.
diff --git a/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java b/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
index 47bfab3..cfc2a18 100644
--- a/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
+++ b/torque/src/java/org/apache/fulcrum/security/torque/TorqueAbstractUserManager.java
@@ -32,6 +32,7 @@ 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;
/**
@@ -63,6 +64,19 @@ public abstract class TorqueAbstractUserManager extends AbstractUserManager {
* @throws TorqueException if any database error occurs
*/
protected abstract <T extends User> List<T> doSelectAllUsers(Connection con) throws TorqueException;
+
+ /**
+ * Get filtered specialized Users
+ *
+ * @param con a database connection
+ *
+ * @param criteria the criteria filter
+ *
+ * @return a List of User instances
+ *
+ * @throws TorqueException if any database error occurs
+ */
+ protected abstract <T extends User> List<T> doSelectUsers(Connection con, Criteria criteria) throws TorqueException;
/**
* Get a specialized User by name
@@ -274,6 +288,38 @@ public abstract class TorqueAbstractUserManager extends AbstractUserManager {
return userSet;
}
+
+ @Override
+ public <T extends User> UserSet<T> retrieveUserList(Object criteriaO) throws DataBackendException
+ {
+ Criteria criteria = (Criteria) criteriaO;
+ UserSet<T> userSet = new UserSet<T>();
+ Connection con = null;
+
+ try {
+ con = Transaction.begin();
+
+ List<User> users = doSelectUsers(con, criteria);
+
+ for (User user : users) {
+ // Add attached objects if they exist
+ ((TorqueAbstractSecurityEntity) user).retrieveAttachedObjects(con, false);
+
+ 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.
diff --git a/torque/src/java/org/apache/fulcrum/security/torque/basic/TorqueBasicUserManagerImpl.java b/torque/src/java/org/apache/fulcrum/security/torque/basic/TorqueBasicUserManagerImpl.java
index 92149ba..334164d 100644
--- a/torque/src/java/org/apache/fulcrum/security/torque/basic/TorqueBasicUserManagerImpl.java
+++ b/torque/src/java/org/apache/fulcrum/security/torque/basic/TorqueBasicUserManagerImpl.java
@@ -51,6 +51,13 @@ public class TorqueBasicUserManagerImpl extends TorqueAbstractUserManager
return (List<T>)TorqueBasicUserPeer.doSelect(criteria, con);
}
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected <T extends User> List<T> doSelectUsers(Connection con, Criteria criteria) throws TorqueException
+ {
+ return (List<T>)TorqueBasicUserPeer.doSelect(criteria, con);
+ }
/**
* @see org.apache.fulcrum.security.torque.TorqueAbstractUserManager#doSelectById(java.lang.Integer, java.sql.Connection)
@@ -80,4 +87,5 @@ public class TorqueBasicUserManagerImpl extends TorqueAbstractUserManager
return t;
}
+
}
diff --git a/torque/src/java/org/apache/fulcrum/security/torque/dynamic/TorqueDynamicUserManagerImpl.java b/torque/src/java/org/apache/fulcrum/security/torque/dynamic/TorqueDynamicUserManagerImpl.java
index 3856601..b93b3c7 100644
--- a/torque/src/java/org/apache/fulcrum/security/torque/dynamic/TorqueDynamicUserManagerImpl.java
+++ b/torque/src/java/org/apache/fulcrum/security/torque/dynamic/TorqueDynamicUserManagerImpl.java
@@ -24,6 +24,7 @@ import org.apache.fulcrum.security.entity.User;
import org.apache.fulcrum.security.torque.TorqueAbstractUserManager;
import org.apache.fulcrum.security.torque.om.TorqueDynamicUser;
import org.apache.fulcrum.security.torque.om.TorqueDynamicUserPeer;
+import org.apache.fulcrum.security.util.DataBackendException;
import org.apache.torque.NoRowsException;
import org.apache.torque.TooManyRowsException;
import org.apache.torque.TorqueException;
@@ -45,12 +46,20 @@ public class TorqueDynamicUserManagerImpl extends TorqueAbstractUserManager
* @see org.apache.fulcrum.security.torque.TorqueAbstractUserManager#doSelectAllUsers(java.sql.Connection)
*/
@SuppressWarnings("unchecked")
+ @Override
protected <T extends User> List<T> doSelectAllUsers(Connection con) throws TorqueException
{
Criteria criteria = new Criteria(TorqueDynamicUserPeer.DATABASE_NAME);
return (List<T>)TorqueDynamicUserPeer.doSelect(criteria, con);
}
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected <T extends User> List<T> doSelectUsers(Connection con, Criteria criteria) throws TorqueException
+ {
+ return (List<T>)TorqueDynamicUserPeer.doSelect(criteria, con);
+ }
/* (non-Javadoc)
* @see org.apache.fulcrum.security.torque.TorqueAbstractUserManager#doSelectById(java.lang.Integer, java.sql.Connection)
@@ -81,4 +90,5 @@ public class TorqueDynamicUserManagerImpl extends TorqueAbstractUserManager
return (T) users.get(0);
}
+
}
diff --git a/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java b/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
index 54f4001..ae2112a 100644
--- a/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
+++ b/torque/src/java/org/apache/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
@@ -227,51 +227,73 @@ public class TorqueTurbineUserManagerImpl extends PeerUserManager implements Tur
return user;
}
+
+
+ /**
+ * Retrieves a filtered user list with attached related objects (user group role relationships) 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> retrieveUserList(Object criteriaObject) throws DataBackendException
+ {
+
+ Criteria criteria = (Criteria) criteriaObject;
+ UserSet<T> userSet = new UserSet<T>();
+ Connection con = null;
- /**
- * Retrieves all users with attached related objects (user group role relationships) 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);
- }
+ try
+ {
+ con = Transaction.begin();
+
+ List<User> users = doSelectUsers(con, criteria);
+
+ 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;
+ }
- Transaction.commit(con);
- con = null;
- }
- catch (TorqueException e)
- {
- throw new DataBackendException("Error retrieving all users", e);
- }
- finally
- {
- if (con != null)
- {
- Transaction.safeRollback(con);
- }
- }
+ protected <T extends User> List<T> doSelectUsers(Connection con, Criteria criteria) throws TorqueException
+ {
+
+ if ( (getCustomPeer())) {
+ try
+ {
+ TorqueTurbinePeer<T> peerInstance = (TorqueTurbinePeer<T>)getPeerInstance();
+ return peerInstance.doSelect( criteria, con );
+ }
+ catch ( DataBackendException e )
+ {
+ throw new TorqueException( e );
+ }
+ } else {
+ return (List<T>) TorqueTurbineUserPeer.doSelect(criteria, con);
+ }
+ }
- return userSet;
- }
/**
* Retrieve a User object with specified id and all attached objects (user group role relationships).