dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #34732
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 17809: User service, implemented user count query
------------------------------------------------------------
revno: 17809
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Sun 2014-12-28 12:48:55 +0100
message:
User service, implemented user count query
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserQueryParams.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java
dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/user/UserServiceTest.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/user/UserController.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserQueryParams.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserQueryParams.java 2014-12-27 16:07:45 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserQueryParams.java 2014-12-28 11:48:55 +0000
@@ -67,6 +67,11 @@
{
}
+ public UserQueryParams( User user )
+ {
+ this.user = user;
+ }
+
// -------------------------------------------------------------------------
// Getters and setters
// -------------------------------------------------------------------------
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java 2014-12-27 15:11:19 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java 2014-12-28 11:48:55 +0000
@@ -159,18 +159,16 @@
* @param user the user.
* @return a Collection of users.
*/
- Collection<User> getManagedUsers( User user );
+ List<User> getManagedUsers( User user );
/**
- * Returns all users which are managed by the given user through its managed
- * groups association.
+ * Returns the number of users which are managed by the given user through its
+ * managed groups association.
*
* @param user the user.
- * @param first the first record to return, null if 0.
- * @param max the max number of records to return, null if none.
- * @return a Collection of users.
+ * @return number of users.
*/
- Collection<User> getManagedUsersBetween( User user, int first, int max );
+ long getManagedUserCount( User user );
/**
* Returns a list of users based on the given query parameters.
@@ -178,7 +176,15 @@
* @param params the user query parameters.
* @return a List of users.
*/
- Collection<User> getUsers( UserQueryParams params );
+ List<User> getUsers( UserQueryParams params );
+
+ /**
+ * Returns the number of users based on the given query parameters.
+ *
+ * @param params the user query parameters.
+ * @return number of users.
+ */
+ long getUserCount( UserQueryParams params );
/**
* Tests whether the current user is allowed to create a user associated
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java 2014-12-27 15:11:19 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java 2014-12-28 11:48:55 +0000
@@ -65,4 +65,12 @@
* @return a List of users.
*/
List<User> getUsers( UserQueryParams params );
+
+ /**
+ * Returns the number of users based on the given query parameters.
+ *
+ * @param params the user query parameters.
+ * @return number of users.
+ */
+ long getUserCount( UserQueryParams params );
}
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java 2014-12-27 15:11:19 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java 2014-12-28 11:48:55 +0000
@@ -204,31 +204,40 @@
}
@Override
- public Collection<User> getManagedUsers( User user )
- {
- UserQueryParams params = new UserQueryParams();
- params.setUser( user );
- params.setCanManage( true );
- params.setAuthSubset( true );
-
- return userStore.getUsers( params );
- }
-
- @Override
- public Collection<User> getManagedUsersBetween( User user, int first, int max )
- {
- UserQueryParams params = new UserQueryParams();
- params.setUser( user );
- params.setCanManage( true );
- params.setAuthSubset( true );
- params.setFirst( first );
- params.setMax( max );
-
- return userStore.getUsers( params );
- }
-
- @Override
- public Collection<User> getUsers( UserQueryParams params )
+ public List<User> getManagedUsers( User user )
+ {
+ UserQueryParams params = new UserQueryParams( user );
+ params.setCanManage( true );
+ params.setAuthSubset( true );
+
+ return userStore.getUsers( params );
+ }
+
+ @Override
+ public long getManagedUserCount( User user )
+ {
+ UserQueryParams params = new UserQueryParams( user );
+ params.setCanManage( true );
+ params.setAuthSubset( true );
+
+ return userStore.getUserCount( params );
+ }
+
+ @Override
+ public List<User> getUsers( UserQueryParams params )
+ {
+ handleUserQueryParams( params );
+ return userStore.getUsers( params );
+ }
+
+ @Override
+ public long getUserCount( UserQueryParams params )
+ {
+ handleUserQueryParams( params );
+ return userStore.getUserCount( params );
+ }
+
+ private void handleUserQueryParams( UserQueryParams params )
{
if ( params.getInactiveMonths() != null )
{
@@ -242,10 +251,8 @@
params.setCanManage( false );
params.setAuthSubset( false );
}
-
- return userStore.getUsers( params );
}
-
+
@Override
public Collection<UserCredentials> getUsersByOrganisationUnitBetween( OrganisationUnit unit, int first, int max )
{
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java 2014-12-27 16:07:45 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java 2014-12-28 11:48:55 +0000
@@ -106,10 +106,23 @@
@SuppressWarnings("unchecked")
public List<User> getUsers( UserQueryParams params )
{
+ return getUserQuery( params, false ).list();
+ }
+
+ @Override
+ public long getUserCount( UserQueryParams params )
+ {
+ return (Long) getUserQuery( params, true ).uniqueResult();
+ }
+
+ private Query getUserQuery( UserQueryParams params, boolean count )
+ {
SqlHelper hlp = new SqlHelper();
- String hql =
- "select distinct u from User u " +
+ String hql = count ? "select count(distinct u) " : "select distinct u ";
+
+ hql +=
+ "from User u " +
"inner join u.userCredentials uc " +
"left join u.groups g ";
@@ -160,7 +173,10 @@
hql += hlp.whereAnd() + " :organisationUnit in elements(u.organisationUnits) ";
}
- hql += "order by u.surname, u.firstName";
+ if ( !count )
+ {
+ hql += "order by u.surname, u.firstName";
+ }
Query query = sessionFactory.getCurrentSession().createQuery( hql );
@@ -210,6 +226,6 @@
query.setMaxResults( params.getMax() ).list();
}
- return query.list();
+ return query;
}
}
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/user/UserServiceTest.java'
--- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/user/UserServiceTest.java 2014-12-27 16:07:45 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/user/UserServiceTest.java 2014-12-28 11:48:55 +0000
@@ -267,8 +267,16 @@
assertTrue( users.contains( userD ) );
assertTrue( users.contains( userE ) );
assertTrue( users.contains( userF ) );
-
- users = userService.getManagedUsersBetween( userA, 0, 1 );
+
+ assertEquals( 4, userService.getManagedUserCount( userA ) );
+
+ UserQueryParams params = new UserQueryParams( userA );
+ params.setCanManage( true );
+ params.setAuthSubset( true );
+ params.setFirst( 0 );
+ params.setMax( 1 );
+
+ users = userService.getUsers( params );
assertEquals( 1, users.size() );
@@ -280,13 +288,19 @@
assertTrue( users.contains( userE ) );
assertTrue( users.contains( userF ) );
- users = userService.getManagedUsersBetween( userB, 0, 1 );
+ assertEquals( 4, userService.getManagedUserCount( userB ) );
+
+ params.setUser( userB );
+
+ users = userService.getUsers( params );
assertEquals( 1, users.size() );
users = userService.getManagedUsers( userC );
assertEquals( 0, users.size() );
+
+ assertEquals( 0, userService.getManagedUserCount( userC ) );
}
@Test
@@ -353,15 +367,21 @@
assertTrue( users.contains( userE ) );
assertTrue( users.contains( userF ) );
+ assertEquals( 4, userService.getManagedUserCount( userA ) );
+
users = userService.getManagedUsers( userB );
assertEquals( 2, users.size() );
assertTrue( users.contains( userD ) );
assertTrue( users.contains( userF ) );
+ assertEquals( 2, userService.getManagedUserCount( userB ) );
+
users = userService.getManagedUsers( userC );
assertEquals( 0, users.size() );
+
+ assertEquals( 0, userService.getManagedUserCount( userC ) );
}
@Test
@@ -426,23 +446,29 @@
params.setDisjointRoles( true );
params.setUser( userA );
- Collection<User> users = userService.getUsers( params);
+ Collection<User> users = userService.getUsers( params );
assertEquals( 2, users.size() );
assertTrue( users.contains( userD ) );
assertTrue( users.contains( userF ) );
-
+
+ assertEquals( 2, userService.getUserCount( params ) );
+
params.setUser( userB );
users = userService.getUsers( params);
assertEquals( 0, users.size() );
+ assertEquals( 0, userService.getUserCount( params ) );
+
params.setUser( userC );
users = userService.getUsers( params);
assertEquals( 0, users.size() );
+
+ assertEquals( 0, userService.getUserCount( params ) );
}
@Test
@@ -483,6 +509,8 @@
assertEquals( 1, users.size() );
assertTrue( users.contains( userA ) );
+
+ assertEquals( 1, userService.getUserCount( params ) );
}
@Test
@@ -519,6 +547,8 @@
assertEquals( 2, users.size() );
assertTrue( users.contains( userA ) );
assertTrue( users.contains( userC ) );
+
+ assertEquals( 2, userService.getUserCount( params ) );
}
@Test
@@ -558,5 +588,7 @@
assertEquals( 2, users.size() );
assertTrue( users.contains( userA ) );
assertTrue( users.contains( userC ) );
+
+ assertEquals( 2, userService.getUserCount( params ) );
}
}
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/user/UserController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/user/UserController.java 2014-12-26 12:27:14 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/user/UserController.java 2014-12-28 11:48:55 +0000
@@ -52,6 +52,7 @@
import org.hisp.dhis.user.UserAuthorityGroup;
import org.hisp.dhis.user.UserCredentials;
import org.hisp.dhis.user.UserGroupService;
+import org.hisp.dhis.user.UserQueryParams;
import org.hisp.dhis.user.UserService;
import org.hisp.dhis.user.Users;
import org.hisp.dhis.webapi.controller.AbstractCrudController;
@@ -118,7 +119,13 @@
if ( options.isManage() )
{
- entityList = new ArrayList<>( userService.getManagedUsersBetween( user, pager.getOffset(), pager.getPageSize() ) );
+ UserQueryParams params = new UserQueryParams( user );
+ params.setCanManage( true );
+ params.setAuthSubset( true );
+ params.setFirst( pager.getOffset() );
+ params.setMax( pager.getPageSize() );
+
+ entityList = userService.getUsers( params );
}
else
{