/* * Copyright (C) 2003-2011 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.ecm.webui.core; import java.util.Arrays; import org.exoplatform.commons.serialization.api.annotations.Serialized; import org.exoplatform.commons.utils.PageList; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.core.UIPageIterator; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SAS * Author : Dang Viet Ha * hadv@exoplatform.com * 19-05-2011 */ /** * A component that allows pagination, with an iterator to change pages * */ @ComponentConfig(template = "classpath:groovy/ecm/webui/core/UIPageIterator.gtmpl", events = { @EventConfig(listeners = UIECMPageIterator.ShowPageActionListener.class), @EventConfig(listeners = UIECMPageIterator.ChangeMaxSizePageActionListener.class) }) @Serialized public class UIECMPageIterator extends UIPageIterator { /** * The list of pages */ private int itemsPerPage_ = 0; private int totalItems = 0; private boolean useMaxSizeSetting_ = false; public static final int[] MAX_ITEMS_PER_PAGE = new int[] { 5, 10, 15, 20, 30, 60, 100 }; private boolean justPaginated_ = false; public boolean isJustPaginated() { return justPaginated_; } public void setJustPaginated(boolean value) { justPaginated_ = value; } public UIECMPageIterator() { } public int[] getMaxItemPerPageList() { int pageSize = this.getItemsPerPage(); if (isPageSizeInList(pageSize)) { return MAX_ITEMS_PER_PAGE; } else { int length = MAX_ITEMS_PER_PAGE.length + 1; int[] pageSizeList = new int[length]; System.arraycopy(MAX_ITEMS_PER_PAGE, 0, pageSizeList, 0, MAX_ITEMS_PER_PAGE.length); pageSizeList[pageSizeList.length - 1] = pageSize; Arrays.sort(pageSizeList); return pageSizeList; } } public int getItemsPerPage() { if (itemsPerPage_ <= 0) { itemsPerPage_ = 10; } return itemsPerPage_; } public void setItemsPerPage(int itemsPerPage) { this.itemsPerPage_ = itemsPerPage; } public int getTotalItems() { return totalItems; } public void setTotalItems(int totalItems) { this.totalItems = totalItems; } /** * @param useMaxSizeSetting_ the useMaxSizeSetting_ to set */ public void setUseMaxSizeSetting(boolean useMaxSizeSetting_) { this.useMaxSizeSetting_ = useMaxSizeSetting_; } /** * @return the useMaxSizeSetting_ */ public boolean isUseMaxSizeSetting() { return useMaxSizeSetting_; } public void setPageList(PageList pageList) { super.setPageList(pageList); this.itemsPerPage_ = pageList.getPageSize(); } private boolean isPageSizeInList(int pageSize) { for (int size : MAX_ITEMS_PER_PAGE) { if (size == pageSize) { return true; } } return false; } static public class ShowPageActionListener extends EventListener<UIECMPageIterator> { public void execute(Event<UIECMPageIterator> event) throws Exception { UIECMPageIterator uiPageIterator = event.getSource(); int page = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID)); uiPageIterator.setCurrentPage(page); uiPageIterator.setJustPaginated(true); UIComponent parent = uiPageIterator.getParent(); if (parent == null) return; event.getRequestContext().addUIComponentToUpdateByAjax(parent); parent.broadcast(event, event.getExecutionPhase()); } } static public class ChangeMaxSizePageActionListener extends EventListener<UIECMPageIterator>{ public void execute(Event<UIECMPageIterator> event) throws Exception { UIECMPageIterator uiPageIterator = event.getSource(); int itemsPerPage = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID)); uiPageIterator.setItemsPerPage(itemsPerPage); UIComponent parent = uiPageIterator.getParent(); if (parent == null) return; if (parent instanceof UIPagingGrid ) { ((UIPagingGrid)parent).refresh(uiPageIterator.getCurrentPage()); } else if (parent instanceof UIPagingGridDecorator) { ((UIPagingGridDecorator)parent).refresh(uiPageIterator.getCurrentPage()); } event.getRequestContext().addUIComponentToUpdateByAjax(parent); } } }