Save This Page
Home » displaytag-1.1.1-src » org » displaytag » pagination » [javadoc | source]
    1   /**
    2    * Licensed under the Artistic License; you may not use this file
    3    * except in compliance with the License.
    4    * You may obtain a copy of the License at
    5    *
    6    *      http://displaytag.sourceforge.net/license.html
    7    *
    8    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
    9    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   10    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   11    */
   12   package org.displaytag.pagination;
   13   
   14   import java.text.MessageFormat;
   15   import java.util.ArrayList;
   16   import java.util.Iterator;
   17   import java.util.List;
   18   
   19   import org.apache.commons.lang.builder.ToStringBuilder;
   20   import org.apache.commons.lang.builder.ToStringStyle;
   21   import org.apache.commons.logging.Log;
   22   import org.apache.commons.logging.LogFactory;
   23   import org.displaytag.util.Href;
   24   
   25   
   26   /**
   27    * Helper class for generation of paging banners.
   28    * @author Fabrizio Giustina
   29    * @version $Revision: 1081 $ ($Author: fgiust $)
   30    */
   31   public class Pagination
   32   {
   33   
   34       /**
   35        * logger.
   36        */
   37       private static Log log = LogFactory.getLog(Pagination.class);
   38   
   39       /**
   40        * Base href for urls.
   41        */
   42       private Href href;
   43   
   44       /**
   45        * page parameter name.
   46        */
   47       private String pageParam;
   48   
   49       /**
   50        * first page.
   51        */
   52       private Integer firstPage;
   53   
   54       /**
   55        * last page.
   56        */
   57       private Integer lastPage;
   58   
   59       /**
   60        * previous page.
   61        */
   62       private Integer previousPage;
   63   
   64       /**
   65        * next page.
   66        */
   67       private Integer nextPage;
   68   
   69       /**
   70        * current page.
   71        */
   72       private Integer currentPage;
   73   
   74       /**
   75        * List containg NumberedPage objects.
   76        * @see org.displaytag.pagination.NumberedPage
   77        */
   78       private List pages = new ArrayList();
   79   
   80       /**
   81        * Constructor for Pagination.
   82        * @param baseHref Href used for links
   83        * @param pageParameter name for the page parameter
   84        */
   85       public Pagination(Href baseHref, String pageParameter)
   86       {
   87           this.href = baseHref;
   88           this.pageParam = pageParameter;
   89       }
   90   
   91       /**
   92        * Adds a page.
   93        * @param number int page number
   94        * @param isSelected is the page selected?
   95        */
   96       public void addPage(int number, boolean isSelected)
   97       {
   98           if (log.isDebugEnabled())
   99           {
  100               log.debug("adding page " + number);
  101           }
  102           this.pages.add(new NumberedPage(number, isSelected));
  103       }
  104   
  105       /**
  106        * first page selected?
  107        * @return boolean
  108        */
  109       public boolean isFirst()
  110       {
  111           return this.firstPage == null;
  112       }
  113   
  114       /**
  115        * last page selected?
  116        * @return boolean
  117        */
  118       public boolean isLast()
  119       {
  120           return this.lastPage == null;
  121       }
  122   
  123       /**
  124        * only one page?
  125        * @return boolean
  126        */
  127       public boolean isOnePage()
  128       {
  129           return (this.pages == null) || this.pages.size() <= 1;
  130       }
  131   
  132       /**
  133        * Gets the number of the first page.
  134        * @return Integer number of the first page
  135        */
  136       public Integer getFirst()
  137       {
  138           return this.firstPage;
  139       }
  140   
  141       /**
  142        * Sets the number of the first page.
  143        * @param first Integer number of the first page
  144        */
  145       public void setFirst(Integer first)
  146       {
  147           this.firstPage = first;
  148       }
  149   
  150       /**
  151        * Gets the number of the last page.
  152        * @return Integer number of the last page
  153        */
  154       public Integer getLast()
  155       {
  156           return this.lastPage;
  157       }
  158   
  159       /**
  160        * Sets the number of the last page.
  161        * @param last Integer number of the last page
  162        */
  163       public void setLast(Integer last)
  164       {
  165           this.lastPage = last;
  166       }
  167   
  168       /**
  169        * Gets the number of the previous page.
  170        * @return Integer number of the previous page
  171        */
  172       public Integer getPrevious()
  173       {
  174           return this.previousPage;
  175       }
  176   
  177       /**
  178        * Sets the number of the previous page.
  179        * @param previous Integer number of the previous page
  180        */
  181       public void setPrevious(Integer previous)
  182       {
  183           this.previousPage = previous;
  184       }
  185   
  186       /**
  187        * Gets the number of the next page.
  188        * @return Integer number of the next page
  189        */
  190       public Integer getNext()
  191       {
  192           return this.nextPage;
  193       }
  194   
  195       /**
  196        * Sets the number of the next page.
  197        * @param next Integer number of the next page
  198        */
  199       public void setNext(Integer next)
  200       {
  201           this.nextPage = next;
  202       }
  203   
  204       /**
  205        * Sets the number of the current page.
  206        * @param current number of the current page
  207        */
  208       public void setCurrent(Integer current)
  209       {
  210           this.currentPage = current;
  211       }
  212   
  213       /**
  214        * Returns the appropriate banner for the pagination.
  215        * @param numberedPageFormat String to be used for a not selected page
  216        * @param numberedPageSelectedFormat String to be used for a selected page
  217        * @param numberedPageSeparator separator beetween pages
  218        * @param fullBanner String basic banner
  219        * @return String formatted banner whith pages
  220        */
  221       public String getFormattedBanner(String numberedPageFormat, String numberedPageSelectedFormat,
  222           String numberedPageSeparator, String fullBanner)
  223       {
  224           StringBuffer buffer = new StringBuffer(100);
  225   
  226           // numbered page list
  227           Iterator pageIterator = this.pages.iterator();
  228   
  229           while (pageIterator.hasNext())
  230           {
  231   
  232               // get NumberedPage from iterator
  233               NumberedPage page = (NumberedPage) pageIterator.next();
  234   
  235               Integer pageNumber = new Integer(page.getNumber());
  236   
  237               String urlString = ((Href) this.href.clone()).addParameter(this.pageParam, pageNumber).toString();
  238   
  239               // needed for MessageFormat : page number/url
  240               Object[] pageObjects = {pageNumber, urlString};
  241   
  242               // selected page need a different formatter
  243               if (page.getSelected())
  244               {
  245                   buffer.append(MessageFormat.format(numberedPageSelectedFormat, pageObjects));
  246               }
  247               else
  248               {
  249                   buffer.append(MessageFormat.format(numberedPageFormat, pageObjects));
  250               }
  251   
  252               // next? add page separator
  253               if (pageIterator.hasNext())
  254               {
  255                   buffer.append(numberedPageSeparator);
  256               }
  257           }
  258   
  259           // String for numbered pages
  260           String numberedPageString = buffer.toString();
  261           // Object array
  262           // {0} full String for numbered pages
  263           // {1} first page url
  264           // {2} previous page url
  265           // {3} next page url
  266           // {4} last page url
  267           // {5} current page
  268           // {6} total pages
  269           Object[] pageObjects = {
  270               numberedPageString,
  271               ((Href) this.href.clone()).addParameter(this.pageParam, getFirst()),
  272               ((Href) this.href.clone()).addParameter(this.pageParam, getPrevious()),
  273               ((Href) this.href.clone()).addParameter(this.pageParam, getNext()),
  274               ((Href) this.href.clone()).addParameter(this.pageParam, getLast()),
  275               this.currentPage,
  276               this.isLast() ? this.currentPage : this.lastPage}; // this.lastPage is null if the last page is displayed
  277   
  278           // return the full banner
  279           return MessageFormat.format(fullBanner, pageObjects);
  280       }
  281   
  282       /**
  283        * @see java.lang.Object#toString()
  284        */
  285       public String toString()
  286       {
  287           return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) //
  288               .append("firstPage", this.firstPage) //$NON-NLS-1$
  289               .append("lastPage", this.lastPage) //$NON-NLS-1$
  290               .append("currentPage", this.currentPage) //$NON-NLS-1$
  291               .append("nextPage", this.nextPage) //$NON-NLS-1$
  292               .append("previousPage", this.previousPage) //$NON-NLS-1$
  293               .append("pages", this.pages) //$NON-NLS-1$
  294               .append("href", this.href) //$NON-NLS-1$
  295               .append("pageParam", this.pageParam) //$NON-NLS-1$
  296               .toString();
  297       }
  298   }

Save This Page
Home » displaytag-1.1.1-src » org » displaytag » pagination » [javadoc | source]