/**Copyright 2010 Research Studios Austria Forschungsgesellschaft mBH
*
* This file is part of easyrec.
*
* easyrec is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* easyrec is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with easyrec. If not, see <http://www.gnu.org/licenses/>.
*/
package org.easyrec.utils;
/**
* This class creates a html string for selecting pages in a table grid.
* <p/>
* e.g. << 1 ... 3 4 5 6 7 ... 27 >>
* <p/>
* a click on a page calls the following function, which may be included in every
* website, where paging is used.
* <p/>
* function selectPage(url, siteNumber) {
* window.location = url + siteNumber;
* }
* <p/>
* Paging needs the coressponding DAO methods for retrieving the appropriate
* rows. e.g.:
* Integer myDAO.itemCount
* List<Item> myDAO.getItems(int offset, int limit)
*
* @author phlavac
*/
public class PageStringGenerator {
// TODO: move to vocabulary?
public static final int DEFAULT_NUMBER_OF_ITEMS_PER_PAGE = 50;
private String javascriptFunctionName = "selectPage";
private int numberOfPagesToShow = 2;
private int numberOfItemsPerPage = DEFAULT_NUMBER_OF_ITEMS_PER_PAGE;
private String url;
/**
* To generate a page string the url of the website where the list
* of items are displayed may be passed to the constructor
*
* @param url
*/
public PageStringGenerator(String url) {
url = url.replace("siteNumber=", "");
this.url = url + (url.contains("?") ? "&siteNumber=" : "?siteNumber=");
}
/**
* Sets the number of items on a page to show. The default value is set to
* 50 item per page.
*
* @param numberOfItemsPerPage
*/
public void setNumberOfItemsPerPage(int numberOfItemsPerPage) {
this.numberOfItemsPerPage = numberOfItemsPerPage;
}
public int getNumberOfItemsPerPage() {
return numberOfItemsPerPage;
}
/**
* This number is the number of page links displayed on the left and right
* of the current page.
* The Default value is 2;
*
* @param numberOfPagesToShow
*/
public void setNumberOfPagesToShow(int numberOfPagesToShow) {
this.numberOfPagesToShow = numberOfPagesToShow;
}
/**
* Returns the Html String displayed on top or the bottom of a table grid.
*
* @param numberOfPages
* @param selectedSiteNumber
* @return
*/
public String getPageMenuString(int itemCount, int selectedSiteNumber) {
int numberOfPages = (itemCount - 1) / numberOfItemsPerPage + 1;
String pageMenuString = "";
int pageStart = selectedSiteNumber - numberOfPagesToShow;
int pageEnd = selectedSiteNumber + numberOfPagesToShow;
if (pageStart < 0) pageStart = 0;
if (pageEnd > numberOfPages) pageEnd = numberOfPages;
for (int i = 0; i < numberOfPages; i++) {
if (i == pageStart - 1) {
pageMenuString +=
"<span onClick='" + javascriptFunctionName + "(\"" + url + "\"," + (selectedSiteNumber - 1) +
")' class='clickable redLink'> ";
pageMenuString += "<< ";
pageMenuString += "</span>";
}
if (i >= pageStart && i <= pageEnd) {
pageMenuString += getMenuEntryString(i, selectedSiteNumber);
} else if (i == pageEnd + 1) {
pageMenuString += " ..." + getMenuEntryString(numberOfPages - 1, selectedSiteNumber);
;
} else if (i == pageStart - 1) {
pageMenuString += getMenuEntryString(0, selectedSiteNumber) + " ... ";
}
if (i == pageEnd + 1) {
pageMenuString +=
"<span onClick='" + javascriptFunctionName + "(\"" + url + "\"," + (selectedSiteNumber + 1) +
")' class='clickable redLink'> ";
pageMenuString += " >>";
pageMenuString += "</span>";
}
}
return pageMenuString;
}
private String getMenuEntryString(int i, int selectedSiteNumber) {
return " " + "<span onClick='" + javascriptFunctionName + "(\"" + url + "\"," + i +
")' class='clickable " + ((i == selectedSiteNumber) ? "selectedPage" : "page") + "'>" + (i + 1) +
"</span>";
}
}