View Javadoc
1   /**
2    * Copyright 2005-2016 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 final class TableRenderUtil {
27  	
28  	private TableRenderUtil() {
29  		throw new UnsupportedOperationException("do not call");
30  	}
31  	
32      /**
33       * Returns the minimum number of pages needed to display a result set of the given page
34       * 
35       * @param resultSize number of results
36       * @param maxRowsPerPage maximum number of rows 
37       * 
38       * @return
39       */
40      public static int computeTotalNumberOfPages(int resultSize, int maxRowsPerPage) {
41          int numPages = resultSize / maxRowsPerPage;
42          if (resultSize % maxRowsPerPage != 0) {
43              // partial page
44              numPages++;
45          }
46          return numPages;
47      }
48      
49      /**
50       * This method computes the list index of the first row of the given page
51       * 
52       * @param pageNumber first page is index 0
53       * @param resultSize the size of the list being rendered
54       * @param maxRowsPerPage max number of rows on a page
55       * @return the index in the result list of the first row of the given page 
56       */
57      public static int computeStartIndexForPage(int pageNumber, int resultSize, int maxRowsPerPage) {
58          if (pageNumber < 0 && pageNumber >= computeTotalNumberOfPages(resultSize, maxRowsPerPage)) {
59              return -1;
60          }
61          return pageNumber * maxRowsPerPage;
62      }
63      
64      /**
65       * This method computes the index of the last row of the given page
66       * 
67       * @param pageNumber first page is index 0
68       * @param resultSize the size of the list being rendered
69       * @param maxRowsPerPage max number of rows on a page
70       * @return the index in the result list of the last row of the given page 
71       */
72      public static int computeLastIndexForPage(int pageNumber, int resultSize, int maxRowsPerPage) {
73          int startIndex = computeStartIndexForPage(pageNumber, resultSize, maxRowsPerPage);
74          if (startIndex == -1) {
75              return -1;
76          }
77          if (startIndex + maxRowsPerPage - 1 < resultSize) {
78              return startIndex + maxRowsPerPage - 1;
79          }
80          // partial page
81          return resultSize - 1;
82     }
83  }