/*
* $Id: ListNavigator.java,v 1.6 2009/02/02 13:42:35 donatas Exp $
* Created on Oct 12, 2005
*
* Copyright (C) 2005 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.presentation;
import javax.faces.component.UIComponent;
import com.idega.event.IWPageEventListener;
import com.idega.idegaweb.IWException;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.ListItem;
import com.idega.presentation.text.Lists;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.HiddenInput;
import com.idega.util.StringUtil;
/**
* Last modified: $Date: 2009/02/02 13:42:35 $ by $Author: donatas $
*
* @author <a href="mailto:laddi@idega.com">laddi</a>
* @version $Revision: 1.6 $
*/
public class ListNavigator extends Block implements IWPageEventListener {
public static final String PARAMETER_CURRENT_PAGE = "ln_curr_page";
public static final String PARAMETER_NUMBER_OF_ENTRIES = "ln_num_entries";
public static final String PARAMETER_UNIQUE_IDENTIFIER = "ln_unique_id";
private String firstItemText;
private String dropdownEntryName = "";
private String iUniqueIdentifier;
private int iSize = 0;
private int iNumberOfEntriesPerPage = 10;
private String navigationFunction;
private String dropdownFunction;
private String navigatorIdentifier;
private int currentPage = 1;
private int pageSize = -1;
public ListNavigator() {
this("default", 0);
}
public ListNavigator(String uniqueIdentifier, int size) {
this.iUniqueIdentifier = uniqueIdentifier;
this.iSize = size;
}
@Override
public void main(IWContext iwc) throws Exception {
UIComponent container = null;
if (navigationFunction == null) {
container = new Form();
((Form)container).setEventListener(ListNavigator.class);
((Form)container).addParameter(PARAMETER_UNIQUE_IDENTIFIER, this.iUniqueIdentifier);
} else {
container = new Layer();
}
if (!StringUtil.isEmpty(navigatorIdentifier)) {
HiddenInput identifier = new HiddenInput("navigatorIdentifier", navigatorIdentifier);
identifier.setStyleClass("listNavigatorIdentifier");
container.getChildren().add(identifier);
}
Lists list = new Lists();
container.getChildren().add(list);
if (this.firstItemText != null) {
ListItem item = new ListItem();
item.add(new Text(this.firstItemText));
list.add(item);
}
int currentPage = getCurrentPage(iwc);
int numberOfPages = this.iSize / getNumberOfEntriesPerPage(iwc);
if (this.iSize % getNumberOfEntriesPerPage(iwc) != 0) {
numberOfPages++;
}
if (numberOfPages == 0) {
numberOfPages++;
}
int start = getStartFromCurrentPage(currentPage, numberOfPages);
int end = start + 9;
if (end > numberOfPages) {
end = numberOfPages;
}
if (currentPage > 1) {
ListItem item = new ListItem();
Link link = new Link("<");
link.setStyleClass("listNavigatorPager");
if (navigationFunction != null) {
link.getId();
link.setURL("javascript:void(0);");
link.setOnClick(getNavigationFunction(currentPage - 1));
} else {
link.addParameter(getCurrentPageParameter(), (currentPage - 1));
link.addParameter(PARAMETER_UNIQUE_IDENTIFIER, this.iUniqueIdentifier);
link.setEventListener(ListNavigator.class);
}
item.add(link);
list.add(item);
}
for (int i = start; i <= end; i++) {
ListItem item = new ListItem();
Link link = new Link(String.valueOf(i));
link.setStyleClass("listNavigatorPager");
if (i == currentPage) {
link.setStyleClass("currentPage");
}
if (navigationFunction != null) {
link.getId();
link.setURL("javascript:void(0);");
link.setOnClick(getNavigationFunction(i));
} else {
link.addParameter(getCurrentPageParameter(), i);
link.addParameter(PARAMETER_UNIQUE_IDENTIFIER, this.iUniqueIdentifier);
link.setEventListener(ListNavigator.class);
}
item.add(link);
list.add(item);
}
if (currentPage < numberOfPages) {
ListItem item = new ListItem();
Link link = new Link(">");
link.setStyleClass("listNavigatorPager");
if (navigationFunction != null) {
link.getId();
link.setURL("javascript:void(0);");
link.setOnClick(getNavigationFunction(currentPage + 1));
} else {
link.addParameter(getCurrentPageParameter(), (currentPage + 1));
link.addParameter(PARAMETER_UNIQUE_IDENTIFIER, this.iUniqueIdentifier);
link.setEventListener(ListNavigator.class);
}
item.add(link);
list.add(item);
}
DropdownMenu menu = new DropdownMenu(getNumberOfEntriesParameter());
menu.setStyleClass("listPagerSize");
menu.addMenuElement(5, "5 " + this.dropdownEntryName);
menu.addMenuElement(10, "10 " + this.dropdownEntryName);
menu.addMenuElement(20, "20 " + this.dropdownEntryName);
menu.addMenuElement(50, "50 " + this.dropdownEntryName);
menu.addMenuElement(100, "100 " + this.dropdownEntryName);
menu.setSelectedElement(getNumberOfEntriesPerPage(iwc));
if (dropdownFunction != null) {
menu.getId();
menu.setOnChange(dropdownFunction);
} else {
menu.setToSubmit();
}
container.getChildren().add(menu);
add(container);
}
private int getStartFromCurrentPage(int currentPage, int pageCount) {
int start = currentPage - 9;
if (start < 1) {
start = 1;
}
return start;
}
private int getCurrentPage(IWContext iwc) {
Integer currentPage = (Integer) iwc.getSessionAttribute(getCurrentPageParameter());
if (currentPage != null) {
return currentPage.intValue();
}
return this.currentPage > 0 ? this.currentPage : 1;
}
public int getStartingEntry(IWContext iwc) {
return (getCurrentPage(iwc) - 1) * getNumberOfEntriesPerPage(iwc);
}
public int getNumberOfEntriesPerPage(IWContext iwc) {
Integer numberOfEntries = (Integer) iwc.getSessionAttribute(getNumberOfEntriesParameter());
if (numberOfEntries != null) {
return numberOfEntries.intValue();
}
return pageSize > 0 ? pageSize : this.iNumberOfEntriesPerPage;
}
private String getCurrentPageParameter() {
return PARAMETER_CURRENT_PAGE + "_" + this.iUniqueIdentifier;
}
private String getNumberOfEntriesParameter() {
return PARAMETER_NUMBER_OF_ENTRIES + "_" + this.iUniqueIdentifier;
}
public boolean actionPerformed(IWContext iwc) throws IWException {
this.iUniqueIdentifier = iwc.getParameter(PARAMETER_UNIQUE_IDENTIFIER);
if (iwc.isParameterSet(getCurrentPageParameter())) {
iwc.setSessionAttribute(getCurrentPageParameter(), new Integer(iwc.getParameter(getCurrentPageParameter())));
}
if (iwc.isParameterSet(getNumberOfEntriesParameter())) {
iwc.setSessionAttribute(getNumberOfEntriesParameter(), new Integer(iwc.getParameter(getNumberOfEntriesParameter())));
iwc.removeSessionAttribute(getCurrentPageParameter());
}
return true;
}
private String getNavigationFunction(int page) {
return navigationFunction.replace("#PAGE#", String.valueOf(page));
}
public void setSize(int size) {
this.iSize = size;
}
public void setUniqueIdentifier(String identifier) {
this.iUniqueIdentifier = identifier;
}
public void setDropdownEntryName(String dropdownEntryName) {
this.dropdownEntryName = dropdownEntryName;
}
public void setFirstItemText(String firstItemText) {
this.firstItemText = firstItemText;
}
public void setNumberOfEntriesPerPage(int numberOfEntriesPerPage) {
this.iNumberOfEntriesPerPage = numberOfEntriesPerPage;
}
public String getNavigationFunction() {
return navigationFunction;
}
public void setNavigationFunction(String navigationFunction) {
this.navigationFunction = navigationFunction;
}
public String getDropdownFunction() {
return dropdownFunction;
}
public void setDropdownFunction(String dropdownFunction) {
this.dropdownFunction = dropdownFunction;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getNavigatorIdentifier() {
return navigatorIdentifier;
}
public void setNavigatorIdentifier(String navigatorIdentifier) {
this.navigatorIdentifier = navigatorIdentifier;
}
}