org.springframework.beans.support

## Class PagedListHolder<E>

- java.lang.Object
- - org.springframework.beans.support.PagedListHolder<E>

- All Implemented Interfaces:
    Serializable

      public class PagedListHolder<E>
      extends Object
      implements Serializable

  PagedListHolder is a simple state holder for handling lists of objects, separating them into pages. Page numbering starts with 0.

  This is mainly targetted at usage in web UIs. Typically, an instance will be instantiated with a list of beans, put into the session, and exported as model. The properties can all be set/get programmatically, but the most common way will be data binding, i.e. populating the bean from request parameters. The getters will mainly be used by the view.

  Supports sorting the underlying list via a `SortDefinition` implementation, available as property "sort". By default, a `MutableSortDefinition` instance will be used, toggling the ascending value on setting the same property again.

  The data binding names have to be called "pageSize" and "sort.ascending", as expected by BeanWrapper. Note that the names and the nesting syntax match the respective JSTL EL expressions, like "myModelAttr.pageSize" and "myModelAttr.sort.ascending".

  Since:
    19.05.2003
  Author:
    Juergen Hoeller
  See Also:
    `getPageList()`, `MutableSortDefinition`, Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `DEFAULT_MAX_LINKED_PAGES`
    `static int` | `DEFAULT_PAGE_SIZE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PagedListHolder()` Create a new holder instance.
    `PagedListHolder(List<E> source)` Create a new holder instance with the given source list, starting with a default sort definition (with "toggleAscendingOnProperty" activated).
    `PagedListHolder(List<E> source, SortDefinition sort)` Create a new holder instance with the given source list.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected SortDefinition` | `copySortDefinition(SortDefinition sort)` Create a deep copy of the given sort definition, for use as state holder to compare a modified sort definition against.
    `protected void` | `doSort(List<E> source, SortDefinition sort)` Actually perform sorting of the given source list, according to the given sort definition.
    `int` | `getFirstElementOnPage()` Return the element index of the first element on the current page.
    `int` | `getFirstLinkedPage()` Return the first page to which create a link around the current page.
    `int` | `getLastElementOnPage()` Return the element index of the last element on the current page.
    `int` | `getLastLinkedPage()` Return the last page to which create a link around the current page.
    `int` | `getMaxLinkedPages()` Return the maximum number of page links to a few pages around the current one.
    `int` | `getNrOfElements()` Return the total number of elements in the source list.
    `int` | `getPage()` Return the current page number.
    `int` | `getPageCount()` Return the number of pages for the current source list.
    `List<E>` | `getPageList()` Return a sub-list representing the current page.
    `int` | `getPageSize()` Return the current page size.
    `Date` | `getRefreshDate()` Return the last time the list has been fetched from the source provider.
    `SortDefinition` | `getSort()` Return the sort definition for this holder.
    `List<E>` | `getSource()` Return the source list for this holder.
    `boolean` | `isFirstPage()` Return if the current page is the first one.
    `boolean` | `isLastPage()` Return if the current page is the last one.
    `void` | `nextPage()` Switch to next page.
    `void` | `previousPage()` Switch to previous page.
    `void` | `resort()` Resort the list if necessary, i.e.
    `void` | `setMaxLinkedPages(int maxLinkedPages)` Set the maximum number of page links to a few pages around the current one.
    `void` | `setPage(int page)` Set the current page number.
    `void` | `setPageSize(int pageSize)` Set the current page size.
    `void` | `setSort(SortDefinition sort)` Set the sort definition for this holder.
    `void` | `setSource(List<E> source)` Set the source list for this holder.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### DEFAULT_PAGE_SIZE

          public static final int DEFAULT_PAGE_SIZE

      See Also:
        Constant Field Values

    - #### DEFAULT_MAX_LINKED_PAGES

          public static final int DEFAULT_MAX_LINKED_PAGES

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### PagedListHolder

          public PagedListHolder()

      Create a new holder instance. You'll need to set a source list to be able to use the holder.
      See Also:
        `setSource(java.util.List<E>)`

    - #### PagedListHolder

          public PagedListHolder(List<E> source)

      Create a new holder instance with the given source list, starting with a default sort definition (with "toggleAscendingOnProperty" activated).
      Parameters:
        `source` - the source List
      See Also:
        `MutableSortDefinition.setToggleAscendingOnProperty(boolean)`

    - #### PagedListHolder

          public PagedListHolder(List<E> source,
                                 SortDefinition sort)

      Create a new holder instance with the given source list.
      Parameters:
        `source` - the source List
        `sort` - the SortDefinition to start with

  - ### Method Detail

    - #### setSource

          public void setSource(List<E> source)

      Set the source list for this holder.

    - #### getSource

          public List<E> getSource()

      Return the source list for this holder.

    - #### getRefreshDate

          public Date getRefreshDate()

      Return the last time the list has been fetched from the source provider.

    - #### setSort

          public void setSort(SortDefinition sort)

      Set the sort definition for this holder. Typically an instance of MutableSortDefinition.
      See Also:
        `MutableSortDefinition`

    - #### getSort

          public SortDefinition getSort()

      Return the sort definition for this holder.

    - #### setPageSize

          public void setPageSize(int pageSize)

      Set the current page size. Resets the current page number if changed.

      Default value is 10.

    - #### getPageSize

          public int getPageSize()

      Return the current page size.

    - #### setPage

          public void setPage(int page)

      Set the current page number. Page numbering starts with 0.

    - #### getPage

          public int getPage()

      Return the current page number. Page numbering starts with 0.

    - #### setMaxLinkedPages

          public void setMaxLinkedPages(int maxLinkedPages)

      Set the maximum number of page links to a few pages around the current one.

    - #### getMaxLinkedPages

          public int getMaxLinkedPages()

      Return the maximum number of page links to a few pages around the current one.

    - #### getPageCount

          public int getPageCount()

      Return the number of pages for the current source list.

    - #### isFirstPage

          public boolean isFirstPage()

      Return if the current page is the first one.

    - #### isLastPage

          public boolean isLastPage()

      Return if the current page is the last one.

    - #### previousPage

          public void previousPage()

      Switch to previous page. Will stay on first page if already on first page.

    - #### nextPage

          public void nextPage()

      Switch to next page. Will stay on last page if already on last page.

    - #### getNrOfElements

          public int getNrOfElements()

      Return the total number of elements in the source list.

    - #### getFirstElementOnPage

          public int getFirstElementOnPage()

      Return the element index of the first element on the current page. Element numbering starts with 0.

    - #### getLastElementOnPage

          public int getLastElementOnPage()

      Return the element index of the last element on the current page. Element numbering starts with 0.

    - #### getPageList

          public List<E> getPageList()

      Return a sub-list representing the current page.

    - #### getFirstLinkedPage

          public int getFirstLinkedPage()

      Return the first page to which create a link around the current page.

    - #### getLastLinkedPage

          public int getLastLinkedPage()

      Return the last page to which create a link around the current page.

    - #### resort

          public void resort()

      Resort the list if necessary, i.e. if the current `sort` instance isn't equal to the backed-up `sortUsed` instance.

      Calls `doSort` to trigger actual sorting.

      See Also:
        `doSort(java.util.List<E>, org.springframework.beans.support.SortDefinition)`

    - #### copySortDefinition

          protected SortDefinition copySortDefinition(SortDefinition sort)

      Create a deep copy of the given sort definition, for use as state holder to compare a modified sort definition against.

      Default implementation creates a MutableSortDefinition instance. Can be overridden in subclasses, in particular in case of custom extensions to the SortDefinition interface. Is allowed to return null, which means that no sort state will be held, triggering actual sorting for each `resort` call.

      Parameters:
        `sort` - the current SortDefinition object
      Returns:
        a deep copy of the SortDefinition object
      See Also:
        `MutableSortDefinition.MutableSortDefinition(SortDefinition)`

    - #### doSort

          protected void doSort(List<E> source,
                                SortDefinition sort)

      Actually perform sorting of the given source list, according to the given sort definition.

      The default implementation uses Spring's PropertyComparator. Can be overridden in subclasses.

      See Also:
        `PropertyComparator.sort(java.util.List, SortDefinition)`