package cn.org.rapid_framework.page; import java.io.Serializable; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import edu.emory.mathcs.backport.java.util.Collections; /** * <pre> * 分页信息 * 第一页从1开始 * * 已经过时,使用PageList替代 * </pre> * * @see cn.org.rapid_framework.util.page.PageList * @see cn.org.rapid_framework.util.page.Paginator * @author badqiu */ public class Page<T> implements Serializable,Iterable<T> { protected List<T> result; protected int pageSize; protected int pageNumber; protected int totalCount = 0; public Page(PageRequest p, int totalCount) { this(p.getPageNumber(),p.getPageSize(),totalCount); } public Page(int pageNumber,int pageSize,int totalCount) { this(pageNumber,pageSize,totalCount,new ArrayList(0)); } public Page(int pageNumber,int pageSize,int totalCount,List<T> result) { if(pageSize <= 0) throw new IllegalArgumentException("[pageSize] must great than zero"); this.pageSize = pageSize; this.pageNumber = PageUtils.computePageNumber(pageNumber,pageSize,totalCount); this.totalCount = totalCount; setResult(result); } public void setResult(List<T> elements) { if(elements == null) throw new IllegalArgumentException("'result' must be not null"); this.result = elements; } /** * 当前页包含的数据 * * @return 当前页数据源 */ public List<T> getResult() { return result; } /** * 是否是首页(第一页),第一页页码为1 * * @return 首页标识 */ public boolean isFirstPage() { return getThisPageNumber() == 1; } /** * 是否是最后一页 * * @return 末页标识 */ public boolean isLastPage() { return getThisPageNumber() >= getLastPageNumber(); } /** * 是否有下一页 * * @return 下一页标识 */ public boolean isHasNextPage() { return getLastPageNumber() > getThisPageNumber(); } /** * 是否有上一页 * * @return 上一页标识 */ public boolean isHasPreviousPage() { return getThisPageNumber() > 1; } /** * 获取最后一页页码,也就是总页数 * * @return 最后一页页码 */ public int getLastPageNumber() { return PageUtils.computeLastPageNumber(totalCount, pageSize); } /** * 总的数据条目数量,0表示没有数据 * * @return 总数量 */ public int getTotalCount() { return totalCount; } /** * 获取当前页的首条数据的行编码 * * @return 当前页的首条数据的行编码 */ public int getThisPageFirstElementNumber() { return (getThisPageNumber() - 1) * getPageSize() + 1; } /** * 获取当前页的末条数据的行编码 * * @return 当前页的末条数据的行编码 */ public int getThisPageLastElementNumber() { int fullPage = getThisPageFirstElementNumber() + getPageSize() - 1; return getTotalCount() < fullPage ? getTotalCount() : fullPage; } /** * 获取下一页编码 * * @return 下一页编码 */ public int getNextPageNumber() { return getThisPageNumber() + 1; } /** * 获取上一页编码 * * @return 上一页编码 */ public int getPreviousPageNumber() { return getThisPageNumber() - 1; } /** * 每一页显示的条目数 * * @return 每一页显示的条目数 */ public int getPageSize() { return pageSize; } /** * 当前页的页码 * * @return 当前页的页码 */ public int getThisPageNumber() { return pageNumber; } /** * 得到用于多页跳转的页码 * @return */ public Integer[] getLinkPageNumbers() { return linkPageNumbers(7); } /** * 得到用于多页跳转的页码 * 注意:不可以使用 getLinkPageNumbers(10)方法名称,因为在JSP中会与 getLinkPageNumbers()方法冲突,报exception * @return */ public Integer[] linkPageNumbers(int count) { return PageUtils.generateLinkPageNumbers(getThisPageNumber(), getLastPageNumber(),count); } /** * 得到数据库的第一条记录号 * @return */ public int getFirstResult() { return PageUtils.getFirstResult(pageNumber, pageSize); } public Iterator<T> iterator() { return result == null ? Collections.emptyList().iterator() : result.iterator(); } }