/* * $Id: ListNavigator.java,v 1.2.2.1 2007/01/12 19:31:35 idegaweb 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 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.ui.DropdownMenu; import com.idega.presentation.ui.Form; /** * Last modified: $Date: 2007/01/12 19:31:35 $ by $Author: idegaweb $ * * @author <a href="mailto:laddi@idega.com">laddi</a> * @version $Revision: 1.2.2.1 $ */ 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 iUniqueIdentifier; private int iSize = 0; private int iNumberOfEntriesPerPage = 10; public ListNavigator() { this("default", 0); } public ListNavigator(String uniqueIdentifier, int size) { this.iUniqueIdentifier = uniqueIdentifier; this.iSize = size; } public void main(IWContext iwc) throws Exception { Form form = new Form(); form.setEventListener(ListNavigator.class); form.addParameter(PARAMETER_UNIQUE_IDENTIFIER, this.iUniqueIdentifier); Lists list = new Lists(); form.add(list); 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); int end = start + 9; if (end > numberOfPages) { end = numberOfPages; } if (currentPage > 1) { ListItem item = new ListItem(); Link link = new Link("<"); 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)); if (i == currentPage) { link.setStyleClass("currentPage"); } link.addParameter(getCurrentPageParameter(), i); link.addParameter(PARAMETER_UNIQUE_IDENTIFIER, this.iUniqueIdentifier); link.setEventListener(ListNavigator.class); item.add(link); list.add(item); } if (currentPage < end) { ListItem item = new ListItem(); Link link = new Link(">"); 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.addMenuElement(5, "5 " + ""); menu.addMenuElement(10, "10 " + ""); menu.addMenuElement(20, "20 " + ""); menu.addMenuElement(50, "50 " + ""); menu.setSelectedElement(getNumberOfEntriesPerPage(iwc)); menu.setToSubmit(); form.add(menu); add(form); } private int getStartFromCurrentPage(int currentPage) { 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 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 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; } public void setSize(int size) { this.iSize = size; } public void setUniqueIdentifier(String identifier) { this.iUniqueIdentifier = identifier; } }