← Back to team overview

dhis2-devs team mailing list archive

[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
             {