001: /*
002: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions
006: * are met:
007: *
008: * - Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: *
011: * - Redistribution in binary form must reproduce the above copyright
012: * notice, this list of conditions and the following disclaimer in
013: * the documentation and/or other materials provided with the
014: * distribution.
015: *
016: * Neither the name of Sun Microsystems, Inc. or the names of
017: * contributors may be used to endorse or promote products derived
018: * from this software without specific prior written permission.
019: *
020: * This software is provided "AS IS," without a warranty of any
021: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
022: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
023: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
024: * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
025: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
026: * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
027: * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
028: * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
029: * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
030: * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
031: * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
032: *
033: * You acknowledge that Software is not designed, licensed or intended
034: * for use in the design, construction, operation or maintenance of
035: * any nuclear facility.
036: */
037: package com.sun.portal.oracleportlet.util;
038:
039: import java.util.*;
040: import java.util.logging.*;
041:
042: import javax.portlet.*;
043:
044: /**
045: * This class contains utility methods pertaining to pagination
046: *
047: * @author Zahid Syed
048: */
049:
050: public class PaginationUtils implements OraclePortletConstants {
051:
052: private static Logger logger = OraclePortletLogger.getLogger();
053:
054: /**
055: * This method returns the number of pagination rows by reading a properties file
056: **/
057: public static int getNumberOfPaginationRows(int maxSize) {
058:
059: int numberOfRows = 0;
060: int defaultNumberOfRows = 3;
061: ResourceBundle rbundle = null;
062:
063: try {
064: rbundle = ResourceBundle.getBundle("oracleconfig");
065: } catch (MissingResourceException excp) {
066: logMessage(Level.SEVERE,
067: "getNumberOfPaginationRows : File oracleconfig.properties NOT found : "
068: + excp);
069: return defaultNumberOfRows;
070: }
071:
072: String numberOfRowsStr = rbundle
073: .getString(PAGINATION_ROWS_NUMBER);
074: try {
075: numberOfRows = Integer.parseInt(numberOfRowsStr);
076: } catch (Exception ex) {
077: logMessage(Level.WARNING,
078: "getNumberOfPaginationRows : Could not parse the property value : "
079: + ex);
080: return defaultNumberOfRows;
081: }
082:
083: if ((numberOfRows < 1) || (numberOfRows > maxSize)) {
084: numberOfRows = defaultNumberOfRows;
085: }
086: return numberOfRows;
087: }
088:
089: /**
090: * This method splits entire set of records into pages and returns a vector with paginated records
091: **/
092: public static Vector splitPageCacheData(Vector records,
093: String sessionID, int rowsToShow) {
094:
095: int size = records.size();
096: int i = 0;
097: boolean added = false;
098: Vector rowData = new Vector();
099: Vector rows = new Vector();
100:
101: for (i = 1; i <= size; i++) {
102: added = false;
103: rows.addElement(records.elementAt(i - 1));
104:
105: if ((i % rowsToShow) == 0) {
106: rowData.addElement(rows);
107: rows = new Vector();
108: added = true;
109: }
110: }
111:
112: if (added == false) {
113: rowData.addElement(rows);
114: }
115: return rowData;
116: }
117:
118: /**
119: * This method returns records pertaining to 'n'th page in the form of a vector
120: **/
121: public static Vector getPageCacheData(RenderRequest request,
122: Hashtable cache, String attributeName, String sessionID) {
123:
124: Vector retVector = null;
125: Vector rowData = (Vector) cache.get(sessionID);
126: int curPage = 0;
127:
128: if (rowData != null) {
129: int size = rowData.size();
130:
131: String curPageStr = (String) request
132: .getAttribute(attributeName);
133: try {
134: curPage = Integer.parseInt(curPageStr);
135: } catch (Exception ex) {
136:
137: logMessage(Level.WARNING,
138: "getPageCacheData : Could not parse current page string : "
139: + ex);
140: if (size > 0) {
141: curPage = 1;
142: } else {
143: curPage = 0;
144: }
145: }
146: }
147:
148: logMessage(Level.INFO, "getPageCacheData : curPage =="
149: + curPage);
150: if (curPage > 0) {
151: retVector = (Vector) rowData.elementAt(curPage - 1);
152: }
153:
154: return retVector;
155: }
156:
157: /**
158: * This method checks the validity of "Go To" page value entered by the user
159: **/
160: public static String checkGoToValue(String queryValue,
161: String tableSize) {
162:
163: String retVal = queryValue;
164:
165: try {
166: int qVal = Integer.parseInt(queryValue);
167: int tVal = Integer.parseInt(tableSize);
168:
169: if ((qVal < 1) || (qVal > tVal)) {
170: retVal = "1";
171: }
172:
173: } catch (Exception ex) {
174: logMessage(Level.WARNING,
175: "checkGoToValue : Could not parse GoTo page value : "
176: + ex);
177: retVal = "1";
178: }
179: return retVal;
180: }
181:
182: /**
183: * This method logs the debug messages
184: **/
185: private static void logMessage(Object debugLevel, String msg) {
186:
187: logger.log((Level) debugLevel, msg);
188: }
189: }
|