View Javadoc

1   /*
2    * Copyright 2007-2008 The Kuali Foundation
3    * 
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    * http://www.opensource.org/licenses/ecl2.php
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kns.util;
17  
18  /**
19   * This class provides utilities to support the rendering of tables in Kuali without using display tag.
20   * 
21   * Normally, displaytag handles the rendering of Kuali tables on various screens, but
22   * there are situations where displaytag is inadequate for the task (e.g. multiple value lookups).
23   * In particular, display tag does not handle POSTing of forms when switching between pages and sorting.
24   * 
25   */
26  public class TableRenderUtil {
27      /**
28       * Returns the minimum number of pages needed to display a result set of the given page
29       * 
30       * @param resultSize number of results
31       * @param maxRowsPerPage maximum number of rows 
32       * 
33       * @return
34       */
35      public static int computeTotalNumberOfPages(int resultSize, int maxRowsPerPage) {
36          int numPages = resultSize / maxRowsPerPage;
37          if (resultSize % maxRowsPerPage != 0) {
38              // partial page
39              numPages++;
40          }
41          return numPages;
42      }
43      
44      /**
45       * This method computes the list index of the first row of the given page
46       * 
47       * @param pageNumber first page is index 0
48       * @param resultSize the size of the list being rendered
49       * @param maxRowsPerPage max number of rows on a page
50       * @return the index in the result list of the first row of the given page 
51       */
52      public static int computeStartIndexForPage(int pageNumber, int resultSize, int maxRowsPerPage) {
53          if (pageNumber < 0 && pageNumber >= computeTotalNumberOfPages(resultSize, maxRowsPerPage)) {
54              return -1;
55          }
56          return pageNumber * maxRowsPerPage;
57      }
58      
59      /**
60       * This method computes the index of the last row of the given page
61       * 
62       * @param pageNumber first page is index 0
63       * @param resultSize the size of the list being rendered
64       * @param maxRowsPerPage max number of rows on a page
65       * @return the index in the result list of the last row of the given page 
66       */
67      public static int computeLastIndexForPage(int pageNumber, int resultSize, int maxRowsPerPage) {
68          int startIndex = computeStartIndexForPage(pageNumber, resultSize, maxRowsPerPage);
69          if (startIndex == -1) {
70              return -1;
71          }
72          if (startIndex + maxRowsPerPage - 1 < resultSize) {
73              return startIndex + maxRowsPerPage - 1;
74          }
75          // partial page
76          return resultSize - 1;
77     }
78  }