=== 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 getManagedUsers( User user ); + List 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 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 getUsers( UserQueryParams params ); + List 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 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 getManagedUsers( User user ) - { - UserQueryParams params = new UserQueryParams(); - params.setUser( user ); - params.setCanManage( true ); - params.setAuthSubset( true ); - - return userStore.getUsers( params ); - } - - @Override - public Collection 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 getUsers( UserQueryParams params ) + public List 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 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 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 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 users = userService.getUsers( params); + Collection 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 {