Hello all, with the pagination module one can specify exactly the
number of items per page, for example 27. However, I think it would be
slightly more user friendly to replace this input field by a dropdown
with typical choices, such as 5, 10, 20, 50 and 100 or "All/Single
page". It would of course constrain the user a bit, but in some cases
structure is more useful than full freedom.

Knut

On Mon, Dec 6, 2010 at 3:15 PM,  <[email protected]> wrote:
> ------------------------------------------------------------
> revno: 2297
> committer: Quang <qu...@quang-pc>
> branch nick: trunk
> timestamp: Mon 2010-12-06 21:13:48 +0700
> message:
>  Apply pagination in User and UserRole lists.
> modified:
>  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/hibernate/HibernateUserStore.java
>  dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
>  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetRoleListAction.java
>  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java
>  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml
>  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allRole.vm
>  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/searchUser.vm
>
>
> --
> 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/UserStore.java'
> --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java     
> 2010-10-30 08:20:17 +0000
> +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java     
> 2010-12-06 14:13:48 +0000
> @@ -29,6 +29,7 @@
>
>  import java.util.Collection;
>
> +import org.hisp.dhis.dataelement.DataElement;
>  import org.hisp.dhis.organisationunit.OrganisationUnit;
>
>  /**
> @@ -103,15 +104,16 @@
>      */
>     void deleteUser( User user );
>
> -    Collection<User> getAllUsers( int from, int to );
> -
>     Collection<UserCredentials> searchUsersByName( String key );
>
> -    Collection<UserCredentials> searchUsersByName( String key, int from, int 
> to );
> -
> -    int countNumberOfSearchUsersByName( String key );
> -
> -    int countAllUsers();
> +    Collection<UserCredentials> getUsersBetween( int first, int max );
> +
> +    Collection<UserCredentials> getUsersBetweenByName( String name, int 
> first, int max );
> +
> +    int getUserCount();
> +
> +    int getUserCountByName( String name );
> +
>
>     // 
> -------------------------------------------------------------------------
>     // UserCredentials
> @@ -253,5 +255,13 @@
>      * @param userSetting the UserSetting to delete.
>      */
>     void deleteUserSetting( UserSetting userSetting );
> -
> +
> +    Collection<UserAuthorityGroup> getUserRolesBetween( int first, int max );
> +
> +    Collection<UserAuthorityGroup> getUserRolesBetweenByName( String name, 
> int first, int max );
> +
> +    int getUserRoleCount();
> +
> +    int getUserRoleCountByName( String name );
> +
>  }
>
> === 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
>    2010-10-30 08:20:17 +0000
> +++ 
> dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java
>    2010-12-06 14:13:48 +0000
> @@ -38,6 +38,8 @@
>  import org.hibernate.criterion.Order;
>  import org.hibernate.criterion.Projections;
>  import org.hibernate.criterion.Restrictions;
> +import org.hisp.dhis.common.GenericIdentifiableObjectStore;
> +import org.hisp.dhis.datadictionary.DataDictionary;
>  import org.hisp.dhis.organisationunit.OrganisationUnit;
>  import org.hisp.dhis.system.util.AuditLogLevel;
>  import org.hisp.dhis.system.util.AuditLogUtil;
> @@ -76,6 +78,18 @@
>     {
>         this.currentUserService = currentUserService;
>     }
> +
> +    private GenericIdentifiableObjectStore<UserAuthorityGroup> userRoleStore;
> +
> +    public GenericIdentifiableObjectStore<UserAuthorityGroup> 
> getUserRoleStore()
> +    {
> +        return userRoleStore;
> +    }
> +
> +    public void setUserRoleStore( 
> GenericIdentifiableObjectStore<UserAuthorityGroup> userRoleStore )
> +    {
> +        this.userRoleStore = userRoleStore;
> +    }
>
>     // 
> -------------------------------------------------------------------------
>     // User
> @@ -122,14 +136,6 @@
>         return session.createQuery( "from User" ).list();
>     }
>
> -   �...@suppresswarnings( "unchecked" )
> -    public Collection<User> getAllUsers( int from, int to )
> -    {
> -        Session session = sessionFactory.getCurrentSession();
> -
> -        return session.createQuery( "from User" ).setFirstResult( from 
> ).setMaxResults( to ).list();
> -    }
> -
>     public Collection<User> getUsersByOrganisationUnit( OrganisationUnit 
> organisationUnit )
>     {
>         Collection<User> users = getAllUsers();
> @@ -188,17 +194,6 @@
>             User.class.getSimpleName(),
>             user.getName()) );
>     }
> -
> -    public int countAllUsers()
> -    {
> -        Session session = sessionFactory.getCurrentSession();
> -
> -        Query query = session.createQuery( "select count(*) from User" );
> -
> -        Number rs = (Number) query.uniqueResult();
> -
> -        return rs != null ? rs.intValue() : 0;
> -    }
>     // 
> -------------------------------------------------------------------------
>     // UserCredentials
>     // 
> -------------------------------------------------------------------------
> @@ -367,28 +362,24 @@
>         return criteria.list();
>     }
>
> -   �...@suppresswarnings( "unchecked" )
> -    public Collection<UserCredentials> searchUsersByName( String key, int 
> from, int to ){
> -
> +    public int getUserCount()
> +    {
>         Session session = sessionFactory.getCurrentSession();
> -
> -        Criteria criteria = session.createCriteria( UserCredentials.class );
> -
> -        criteria.add( Restrictions.ilike( "username", "%" + key + "%" ) );
> -        criteria.addOrder( Order.asc( "username" ) );
> -        criteria.setFirstResult( from );
> -        criteria.setMaxResults( to );
> -
> -        return criteria.list();
> +
> +        Query query = session.createQuery( "select count(*) from User" );
> +
> +        Number rs = (Number) query.uniqueResult();
> +
> +        return rs != null ? rs.intValue() : 0;
>     }
> -
> -    public int countNumberOfSearchUsersByName( String key )
> +
> +    public int getUserCountByName( String name )
>     {
>         Session session = sessionFactory.getCurrentSession();
>
>         Criteria criteria = session.createCriteria( UserCredentials.class );
>
> -        criteria.add( Restrictions.ilike( "username", "%" + key + "%" ) );
> +        criteria.add( Restrictions.ilike( "username", "%" + name + "%" ) );
>
>         criteria.setProjection( Projections.rowCount() ).uniqueResult();
>
> @@ -396,4 +387,45 @@
>
>         return rs != null ? rs.intValue() : 0;
>     }
> +
> +    public Collection<UserCredentials> getUsersBetween( int first, int max )
> +    {
> +        Session session = sessionFactory.getCurrentSession();
> +
> +        return session.createQuery( "from UserCredentials" ).setFirstResult( 
> first ).setMaxResults( max ).list();
> +    }
> +
> +    public Collection<UserCredentials> getUsersBetweenByName( String name, 
> int first, int max )
> +    {
> +        Session session = sessionFactory.getCurrentSession();
> +
> +        Criteria criteria = session.createCriteria( UserCredentials.class );
> +
> +        criteria.add( Restrictions.ilike( "username", "%" + name + "%" ) );
> +        criteria.addOrder( Order.asc( "username" ) );
> +        criteria.setFirstResult( first );
> +        criteria.setMaxResults( max );
> +
> +        return criteria.list();
> +    }
> +
> +    public int getUserRoleCount()
> +    {
> +        return userRoleStore.getCount();
> +    }
> +
> +    public int getUserRoleCountByName( String name )
> +    {
> +        return userRoleStore.getCountByName( name );
> +    }
> +
> +    public Collection<UserAuthorityGroup> getUserRolesBetween( int first, 
> int max )
> +    {
> +        return userRoleStore.getBetween( first, max );
> +    }
> +
> +    public Collection<UserAuthorityGroup> getUserRolesBetweenByName( String 
> name, int first, int max )
> +    {
> +        return userRoleStore.getBetweenByName( name, first, max );
> +    }
>  }
>
> === modified file 
> 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml'
> --- 
> dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
>    2010-11-27 09:37:29 +0000
> +++ 
> dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
>    2010-12-06 14:13:48 +0000
> @@ -186,6 +186,7 @@
>
>        <bean id="org.hisp.dhis.user.UserStore" 
> class="org.hisp.dhis.user.hibernate.HibernateUserStore">
>                <property name="sessionFactory" ref="sessionFactory"/>
> +               <property name="userRoleStore" 
> ref="org.hisp.dhis.user.UserAuthorityGroupStore" />
>                <property name="currentUserService" 
> ref="org.hisp.dhis.user.CurrentUserService" />
>        </bean>
>
> @@ -203,6 +204,12 @@
>                
> class="org.hisp.dhis.aggregation.jdbc.JdbcAggregatedDataValueStore">
>                <property name="statementManager" ref="statementManager"/>
>        </bean>
> +
> +       <bean id="org.hisp.dhis.user.UserAuthorityGroupStore" 
> class="org.hisp.dhis.hibernate.HibernateGenericStore">
> +               <property name="clazz" 
> value="org.hisp.dhis.user.UserAuthorityGroup" />
> +               <property name="sessionFactory" ref="sessionFactory" />
> +       </bean>
> +
>
>        <!-- Service definitions -->
>
>
> === modified file 
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetRoleListAction.java'
> --- 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetRoleListAction.java
>        2010-04-12 21:23:33 +0000
> +++ 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetRoleListAction.java
>        2010-12-06 14:13:48 +0000
> @@ -27,10 +27,15 @@
>  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>  */
>
> +import static org.apache.commons.lang.StringUtils.isNotBlank;
> +
>  import java.util.ArrayList;
>  import java.util.List;
>
> +import org.hisp.dhis.paging.ActionPagingSupport;
> +import org.hisp.dhis.user.User;
>  import org.hisp.dhis.user.UserAuthorityGroup;
> +import org.hisp.dhis.user.UserCredentials;
>  import org.hisp.dhis.user.UserStore;
>
>  import com.opensymphony.xwork2.Action;
> @@ -40,7 +45,7 @@
>  * @version $Id: GetRoleListAction.java 4079 2007-11-20 11:42:23Z larshelg $
>  */
>  public class GetRoleListAction
> -    implements Action
> +    extends ActionPagingSupport<UserAuthorityGroup>
>  {
>     // 
> -------------------------------------------------------------------------
>     // Dependencies
> @@ -54,7 +59,7 @@
>     }
>
>     // 
> -------------------------------------------------------------------------
> -    // Output
> +    // Input & Output
>     // 
> -------------------------------------------------------------------------
>
>     private List<UserAuthorityGroup> userAuthorityGroups;
> @@ -63,6 +68,18 @@
>     {
>         return userAuthorityGroups;
>     }
> +
> +    private String key;
> +
> +    public void setKey( String key )
> +    {
> +        this.key = key;
> +    }
> +
> +    public String getKey()
> +    {
> +        return key;
> +    }
>
>     // 
> -------------------------------------------------------------------------
>     // Action implementation
> @@ -71,7 +88,19 @@
>     public String execute()
>         throws Exception
>     {
> -        userAuthorityGroups = new ArrayList<UserAuthorityGroup>( 
> userStore.getAllUserAuthorityGroups() );
> +
> +        if ( isNotBlank( key ) ) // Filter on key only if set
> +        {
> +            this.paging = createPaging( userStore.getUserRoleCountByName( 
> key ) );
> +
> +            userAuthorityGroups = new ArrayList<UserAuthorityGroup>( 
> userStore.getUserRolesBetweenByName( key, paging.getStartPos(), 
> paging.getPageSize() ) );
> +        }
> +        else
> +        {
> +            this.paging = createPaging( userStore.getUserRoleCount() );
> +
> +            userAuthorityGroups = new ArrayList<UserAuthorityGroup>( 
> userStore.getUserRolesBetween( paging.getStartPos(), paging.getPageSize() ) );
> +        }
>
>         return SUCCESS;
>     }
>
> === modified file 
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java'
> --- 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java
>        2010-10-30 08:20:17 +0000
> +++ 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java
>        2010-12-06 14:13:48 +0000
> @@ -27,8 +27,9 @@
>  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>  */
>
> +import static org.apache.commons.lang.StringUtils.isNotBlank;
> +
>  import java.util.ArrayList;
> -import java.util.Collection;
>  import java.util.Collections;
>  import java.util.List;
>
> @@ -65,7 +66,7 @@
>     }
>
>     // 
> -------------------------------------------------------------------------
> -    // Output
> +    // Input & Output
>     // 
> -------------------------------------------------------------------------
>
>     private List<UserCredentials> userCredentialsList;
> @@ -101,47 +102,25 @@
>     public String execute()
>         throws Exception
>     {
> -        this.paging = createPaging( userStore.countAllUsers() );
> -
> -        Collection<User> users = userStore.getAllUsers( 
> paging.getStartPos(), paging.getPageSize() );
> -
> -        userCredentialsList = new ArrayList<UserCredentials>();
> -
> -        for ( User user : users )
> -        {
> -            UserCredentials userCredentials = userStore.getUserCredentials( 
> user );
> -
> -            userCredentials.getUser();
> -
> -            userCredentialsList.add( userCredentials );
> -        }
> -
> -        Collections.sort( userCredentialsList, new UsernameComparator() );
> -        User currentUser = userStore.getUser( 
> currentUserService.getCurrentUser().getId() );
> -        UserCredentials userCredentials = userStore.getUserCredentials( 
> currentUser );
> -
> -        currentUserName = userCredentials.getUsername();
> -        return SUCCESS;
> -    }
> -
> -    public String searchUserByName()
> -    {
> -        if ( key.isEmpty() )
> -        {
> -            return INPUT;
> -        }
> -
> -        this.paging = createPaging( 
> userStore.countNumberOfSearchUsersByName(key) );
> -
> -        userCredentialsList = new 
> ArrayList<UserCredentials>(userStore.searchUsersByName( key, 
> paging.getStartPos(), paging.getPageSize() ));
> -
> -        Collections.sort( userCredentialsList, new UsernameComparator() );
> -        User currentUser = userStore.getUser( 
> currentUserService.getCurrentUser().getId() );
> -        UserCredentials userCredentials = userStore.getUserCredentials( 
> currentUser );
> -
> -        currentUserName = userCredentials.getUsername();
> -
> -        return SUCCESS;
> -    }
> -
> +
> +        if ( isNotBlank( key ) ) // Filter on key only if set
> +        {
> +            this.paging = createPaging( userStore.getUserCountByName( key ) 
> );
> +
> +            userCredentialsList = new ArrayList<UserCredentials>( 
> userStore.getUsersBetweenByName( key, paging.getStartPos(), 
> paging.getPageSize() ) );
> +        }
> +        else
> +        {
> +            this.paging = createPaging( userStore.getUserCount() );
> +
> +            userCredentialsList = new ArrayList<UserCredentials>( 
> userStore.getUsersBetween( paging.getStartPos(), paging.getPageSize() ) );
> +        }
> +
> +        Collections.sort( userCredentialsList, new UsernameComparator() );
> +        User currentUser = userStore.getUser( 
> currentUserService.getCurrentUser().getId() );
> +        UserCredentials userCredentials = userStore.getUserCredentials( 
> currentUser );
> +
> +        currentUserName = userCredentials.getUsername();
> +        return SUCCESS;
> +    }
>  }
>
> === modified file 
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml'
> --- 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml
>         2010-12-03 05:41:34 +0000
> +++ 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml
>         2010-12-06 14:13:48 +0000
> @@ -102,6 +102,7 @@
>       <param name="page">/dhis-web-maintenance-user/allRole.vm</param>
>       <param name="menu">/dhis-web-maintenance-user/menu.vm</param>
>       <param 
> name="javascripts">javascript/role.js,javascript/filterTable.js</param>
> +         <param 
> name="stylesheets">../dhis-web-commons/paging/paging.css</param>
>     </action>
>
>     <action name="getRole" class="org.hisp.dhis.user.action.GetRoleAction">
>
> === modified file 
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allRole.vm'
> --- 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allRole.vm
>  2010-12-03 05:41:34 +0000
> +++ 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allRole.vm
>  2010-12-06 14:13:48 +0000
> @@ -7,7 +7,7 @@
>                <td style="vertical-align:top">
>                        <table width="100%">
>                                <tr>
> -                                       <td>$i18n.getString( 
> "filter_by_role_name" ): <form style="display:inline" action="none" 
> onsubmit="return false"><input type="text" onkeyup="filterValues( this.value 
> )"/></form></td>
> +                                       <td>#filterDiv( "allRole" )</td>
>                                        <td colspan="4" 
> style="text-align:right"><input type="button" value="$i18n.getString( 
> 'add_new' )" onclick="window.location.href='showAddRoleForm.action'"/></td>
>                                </tr>
>                        </table>
> @@ -33,6 +33,11 @@
>                                #end
>                                </tbody>
>                        </table>
> +                       <p></p>
> +                       <div class="paging-container">
> +                               #parse( "/dhis-web-commons/paging/paging.vm" )
> +                       </div>
> +
>                </td>
>                <td style="width:20em; padding-left:2em; vertical-align:top">
>
>
> === modified file 
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/searchUser.vm'
> --- 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/searchUser.vm
>       2010-12-03 05:41:34 +0000
> +++ 
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/searchUser.vm
>       2010-12-06 14:13:48 +0000
> @@ -1,31 +1,9 @@
>  <table style="width:100%">
>        <tr>
> -               <td>
> -                       <table width='100%'>
> -                               <tr>
> -                               <td colspan='5'>
> -                                       <div class="paging-container">
> -                                               #parse( 
> "/dhis-web-commons/paging/paging.vm" )
> -                                       </div>
> -                               </td>
> -                               </tr>
> -                       </table>
> -               </td>
> -       </tr>
> -       <tr>
>                <td style="vertical-align:top">
>                        <table width='100%'>
>                                <tr>
> -                                       <td>$i18n.getString( 
> "filter_by_username" ):
> -                                               <form style="display:inline" 
> action="none" onsubmit="return false">
> -                                                       <div style="inline">
> -                                                               <input 
> type="text" id='key' value="$!key">
> -                                                               <input 
> type="button" value="$i18n.getString( "go" )" onclick="searchUserName();" />
> -                                                       </div>
> -                                               </form>
> -                                       </td>
> -                                       <td></td>
> -                                       <td></td>
> +                                       <td>#filterDiv( "alluser" )</td>
>                                        <td colspan="3" 
> style="text-align:right"><input type="button" value="$i18n.getString( 
> 'add_new' )" onclick="window.location.href='showAddUserForm.action'"/></td>
>                                </tr>
>                        </table>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to     : [email protected]
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help   : https://help.launchpad.net/ListHelp
>
>



-- 
Cheers,
Knut Staring

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~dhis2-devs
More help   : https://help.launchpad.net/ListHelp

Reply via email to