/* * Copyright (C) 2003-2010 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program 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 this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.wiki.webui.core; import java.util.ArrayList; import java.util.List; import org.exoplatform.commons.utils.PageList; import org.exoplatform.web.application.ApplicationMessage; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.form.UIForm; import org.exoplatform.webui.form.UIFormStringInput; /** * Created by The eXo Platform SAS * Author : viet nguyen * viet.nguyen@exoplatform.com * Oct 1, 2010 */ @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "app:/templates/wiki/webui/UIAdvancePageIterator.gtmpl", events = { @EventConfig(listeners = UIAdvancePageIterator.GoPageActionListener.class), @EventConfig(listeners = UIAdvancePageIterator.GoNumberPageActionListener.class) } ) public class UIAdvancePageIterator extends UIForm { public static String PREVIOUS = "previous".intern(); public static String NEXT = "next".intern(); public static String FIRST = "first".intern(); public static String LAST = "last".intern(); public static String GOPAGE = "GoPage".intern(); public static String GOTOPPAGE = "goPageTop".intern(); private PageList pageList; private int beginPageRange = 0; private int endPageRange = 0; public UIAdvancePageIterator(){ addUIFormInput( new UIFormStringInput(GOTOPPAGE, null)) ; this.setSubmitAction("return false;"); } public void setPageList(PageList pageList) { this.pageList = pageList; } public PageList getPageList() { return pageList; } @SuppressWarnings("unused") public List<String> getDisplayedRange() throws Exception { int max_Page = (int) pageList.getAvailablePage(); if (this.pageList.getCurrentPage() > max_Page) { this.pageList.getPage(max_Page); } long page = this.pageList.getCurrentPage(); if (page <= 3) { beginPageRange = 1; if (max_Page <= 7) { endPageRange = max_Page; } else { endPageRange = 7; } } else { if (max_Page > (page + 3)) { endPageRange = (int) (page + 3); beginPageRange = (int) (page - 3); } else { endPageRange = max_Page; if (max_Page > 7) { beginPageRange = max_Page - 6; } else { beginPageRange = 1; } } } List<String> temp = new ArrayList<String>(); for (int i = beginPageRange; i <= endPageRange; i++) { temp.add(String.valueOf(i)); } return temp; } static public class GoPageActionListener extends EventListener<UIAdvancePageIterator> { @Override public void execute(Event<UIAdvancePageIterator> event) throws Exception { UIAdvancePageIterator pageIterator = event.getSource(); String changeToPage = event.getRequestContext().getRequestParameter(OBJECTID).trim(); int maxPage = pageIterator.pageList.getAvailablePage(); int presentPage = pageIterator.getPageList().getCurrentPage(); if (UIAdvancePageIterator.NEXT.equalsIgnoreCase(changeToPage)) { if (presentPage < maxPage) { pageIterator.pageList.getPage(presentPage + 1); } } else if (UIAdvancePageIterator.PREVIOUS.equalsIgnoreCase(changeToPage)) { if (presentPage > 1) { pageIterator.pageList.getPage(presentPage - 1); } } else if (UIAdvancePageIterator.LAST.equalsIgnoreCase(changeToPage)) { if (presentPage != maxPage) { pageIterator.pageList.getPage(maxPage); } } else if (UIAdvancePageIterator.FIRST.equalsIgnoreCase(changeToPage)) { if (presentPage != 1) { pageIterator.pageList.getPage(1); } } else { int temp = Integer.parseInt(changeToPage); if (temp > 0 && temp <= maxPage && temp != presentPage) { pageIterator.pageList.getPage(temp); } } event.getRequestContext().addUIComponentToUpdateByAjax(pageIterator.getParent()); } } static public class GoNumberPageActionListener extends EventListener<UIAdvancePageIterator> { @Override public void execute(Event<UIAdvancePageIterator> event) throws Exception { UIAdvancePageIterator pageIterator = event.getSource(); UIApplication uiApp = pageIterator.getAncestorOfType(UIApplication.class) ; UIFormStringInput stringInput = pageIterator.getUIStringInput(UIAdvancePageIterator.GOTOPPAGE) ; String numberPage = "" ; numberPage = stringInput.getValue() ; stringInput.setValue("") ; int maxPage = pageIterator.pageList.getAvailablePage(); int presentPage = pageIterator.getPageList().getCurrentPage(); int page = 0; if (numberPage != null && numberPage.length() > 0) { try { page = Integer.parseInt(numberPage.trim()); if (page < 0) { uiApp.addMessage(new ApplicationMessage("NameValidator.msg.Invalid-number", new String[] { pageIterator.getLabel(pageIterator.GOPAGE) }, ApplicationMessage.WARNING)); ((WebuiRequestContext) WebuiRequestContext.getCurrentInstance()).addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages()); } else { if (page == 0) { page = 1; } else if (page > pageIterator.pageList.getAvailablePage()) { page = pageIterator.pageList.getAvailablePage(); } pageIterator.getPageList().getPage(page); } } catch (NumberFormatException e) { uiApp.addMessage(new ApplicationMessage("NameValidator.msg.Invalid-number", new String[] { pageIterator.getLabel(pageIterator.GOPAGE) }, ApplicationMessage.WARNING)); ((WebuiRequestContext) WebuiRequestContext.getCurrentInstance()).addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages()); } } if (page > 0 && page <= maxPage && page != presentPage) { pageIterator.getPageList().getPage(page); } event.getRequestContext().addUIComponentToUpdateByAjax(pageIterator.getParent()); } } }