1 /* 2 * Copyright (c) 2002-2014, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.util.html; 35 36 import java.util.ArrayList; 37 import java.util.List; 38 39 40 /** 41 * Paginator provides a way to display a collection of items on severals pages. 42 * <strong>This implementation requires all items</strong> 43 * @param <E> Item of the list 44 */ 45 public class Paginator<E> extends AbstractPaginator<E> 46 { 47 private static final long serialVersionUID = 1531851701326259139L; 48 49 /** 50 * Creates a new instance of Paginator 51 * @param list The collection to paginate 52 * @param nItemPerPage Number of items to display per page 53 * @param strBaseUrl The base Url for build links on each page link 54 * @param strPageIndexParameterName The parameter name for the page index 55 * @param strPageIndex The current page index 56 */ 57 public Paginator( List<E> list, int nItemPerPage, String strBaseUrl, String strPageIndexParameterName, 58 String strPageIndex ) 59 { 60 _list = list; 61 _nItemsCount = _list.size( ); 62 _nItemPerPage = ( nItemPerPage <= 0 ) ? 1 : nItemPerPage; 63 _strBaseUrl = strBaseUrl; 64 _strPageIndexParameterName = strPageIndexParameterName; 65 _strItemsPerPageParameterName = PARAMETER_ITEMS_PER_PAGE; 66 67 try 68 { 69 _nPageCurrent = Integer.parseInt( strPageIndex ); 70 } 71 catch ( NumberFormatException e ) 72 { 73 // strPageIndex invalid, use 1 as default page index. 74 _nPageCurrent = 1; 75 } 76 77 if ( _nPageCurrent > getPagesCount( ) ) 78 { 79 _nPageCurrent = 1; 80 } 81 } 82 83 /** 84 * Creates a new instance of Paginator 85 * @param list The collection to paginate 86 * @param nItemPerPage Number of items to display per page 87 * @param strBaseUrl The base Url for build links on each page link 88 * @param strPageIndexParameterName The parameter name for the page index 89 * @param strPageIndex The current page index 90 * @param strItemsPerPageParameterName The parameter name of the number 91 * items per page 92 */ 93 public Paginator( List<E> list, int nItemPerPage, String strBaseUrl, String strPageIndexParameterName, 94 String strPageIndex, String strItemsPerPageParameterName ) 95 { 96 this( list, nItemPerPage, strBaseUrl, strPageIndexParameterName, strPageIndex ); 97 _strItemsPerPageParameterName = strItemsPerPageParameterName; 98 } 99 100 /** 101 * {@inheritDoc} 102 */ 103 @Override 104 public List<E> getPageItems( ) 105 { 106 int nStartIndex = ( _nPageCurrent - 1 ) * _nItemPerPage; 107 int nMax = _nItemsCount; 108 int nMaxPage = nStartIndex + _nItemPerPage; 109 110 if ( nMaxPage < nMax ) 111 { 112 nMax = nMaxPage; 113 } 114 115 List<E> list = new ArrayList<E>( ); 116 117 for ( int i = nStartIndex; i < nMax; i++ ) 118 { 119 list.add( _list.get( i ) ); 120 } 121 122 return list; 123 } 124 }