UIECMPageIterator.java
/*
* 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);
}
}
}