//$Id: PageAdapter.java 2008-8-7 下午04:02:50 chaostone Exp $
/*
*
* Copyright c 2005-2009.
*
* Licensed under GNU LESSER General Public License, Version 3.
* http://www.gnu.org/licenses
*
*/
/********************************************************************************
* @author chaostone
*
* MODIFICATION DESCRIPTION
*
* Name Date Description
* ============ ============ ============
* chaostone 2008-8-7 Created
*
********************************************************************************/
package org.beanfuse.collection.page;
import java.util.List;
public class PagedList extends PageWapper {
private final List datas;
private int pageNo = 0;
private int maxPageNo;
private int pageSize;
public PagedList(List datas, int pageSize) {
this(datas, new PageLimit(1, pageSize));
}
public PagedList(List datas, PageLimit limit) {
super();
this.datas = datas;
this.pageSize = limit.getPageSize();
this.pageNo = limit.getPageNo() - 1;
if (datas.size() <= pageSize) {
this.maxPageNo = 1;
} else {
final int remainder = datas.size() % pageSize;
final int quotient = datas.size() / pageSize;
this.maxPageNo = (0 == remainder) ? quotient : (quotient + 1);
}
this.next();
}
public int getFirstPageNo() {
return 1;
}
public int getMaxPageNo() {
return maxPageNo;
}
public int getPageNo() {
return pageNo;
}
public int getPageSize() {
return pageSize;
}
public int getTotal() {
return datas.size();
}
public final int getNextPageNo() {
return getPage().getNextPageNo();
}
public final int getPreviousPageNo() {
return getPage().getPreviousPageNo();
}
public boolean hasNext() {
return getPageNo() < getMaxPageNo();
}
public boolean hasPrevious() {
return getPageNo() > 1;
}
public Page next() {
return moveTo(pageNo + 1);
}
public Page previous() {
return moveTo(pageNo - 1);
}
public Page moveTo(int pageNo) {
if (pageNo < 1) {
throw new RuntimeException("error pageNo:" + pageNo);
}
this.pageNo = pageNo;
int toIndex = pageNo * pageSize;
SinglePage newPage = new SinglePage(pageNo, pageSize, datas.size(),
datas.subList((pageNo - 1) * pageSize,
(toIndex < datas.size()) ? toIndex : datas.size()));
setPage(newPage);
return this;
}
}