package com.javaeye.common.hibernate; import java.util.LinkedList; import java.util.List; public class PaginationSupport ... { // --------------------------------------------------------- // static variables // --------------------------------------------------------- // 默认每页显示条数 public static final int DEFAULT_MAX_PAGE_ITEMS = 10; // 默认开始记录条数 public static final int DEFAULT_OFFSET = 0; // 默认显示页码最大数 public static final int DEFAULT_MAX_INDEX_PAGES = 10; // index 为索引页位置, 可以选择 "center", "forward", "half-full" public static final String DEFALUT_INDEX = "center"; // --------------------------------------------------------- // memeber variables // --------------------------------------------------------- // 开始记录条数 private int offset = 0; // 每页显示条数 private int maxPageItems = DEFAULT_MAX_PAGE_ITEMS; // 显示页码最大数 private int maxIndexPages = DEFAULT_MAX_INDEX_PAGES; // 总记录数 private int totalCount; // 返回结果集 private List items = new LinkedList(); // index 为索引页位置, 可以选择 "center", "forward", "half-full" private String index = DEFALUT_INDEX; private int[] indexes = new int[0]; public PaginationSupport() ...{ setMaxIndexPages(DEFAULT_MAX_INDEX_PAGES); setTotalCount(0); setOffset(0); setItems(new LinkedList()); } public PaginationSupport(List items, int totalCount) ...{ setMaxPageItems(DEFAULT_MAX_PAGE_ITEMS); setTotalCount(totalCount); setItems(items); setOffset(0); } public PaginationSupport(List items, int totalCount, int offset) ...{ setMaxPageItems(DEFAULT_MAX_PAGE_ITEMS); setTotalCount(totalCount); setItems(items); setOffset(offset); } public PaginationSupport(List items, int totalCount, int offset, int maxPageItems) ...{ setMaxPageItems(maxPageItems); setTotalCount(totalCount); setItems(items); setOffset(offset); } public PaginationSupport(List items, int totalCount, int offset, int maxPageItems, int maxIndexPages, String index) ...{ setMaxPageItems(maxPageItems); setTotalCount(totalCount); setItems(items); setOffset(offset); setMaxIndexPages(maxIndexPages); setIndex(index); } public List getItems() ...{ return items; } public void setItems(List items) ...{ if (items == null) ...{ this.items = new LinkedList(); } else ...{ this.items = items; } } public int getMaxPageItems() ...{ return maxPageItems; } public void setMaxPageItems(int maxPageItems) ...{ this.maxPageItems = maxPageItems; } public int getTotalCount() ...{ return totalCount; } public void setTotalCount(int totalCount) ...{ if (totalCount > 0) ...{ this.totalCount = totalCount; int count = totalCount / maxPageItems; if (totalCount % maxPageItems > 0) ...{ count++; } indexes = new int[count]; for (int i = 0; i < count; i++) ...{ indexes[i] = maxPageItems * i; } } else ...{ this.totalCount = 0; } } public int[] getIndexes() ...{ return indexes; } public void setIndexes(int[] indexes) ...{ this.indexes = indexes; } public int getOffset() ...{ return offset; } public void setOffset(int startIndex) ...{ if (totalCount <= 0) this.offset = 0; else if (startIndex >= totalCount) this.offset = indexes[indexes.length - 1]; else if (startIndex < 0) this.offset = 0; else ...{ this.offset = indexes[startIndex / maxPageItems]; } } public int getNextIndex() ...{ int nextIndex = getOffset() + maxPageItems; return nextIndex >= totalCount ? getOffset() : nextIndex; } public int getPreviousIndex() ...{ int previousIndex = getOffset() - maxPageItems; return previousIndex < 0 ? DEFAULT_OFFSET : previousIndex; } /** *//** * @return Returns the dEFAULT_MAX_INDEX_PAGES. */ public static int getDEFAULT_MAX_INDEX_PAGES() ...{ return DEFAULT_MAX_INDEX_PAGES; } /** *//** * @return Returns the maxIndexPages. */ public int getMaxIndexPages() ...{ return maxIndexPages; } /** *//** * @param maxIndexPages * The maxIndexPages to set. */ public void setMaxIndexPages(int maxIndexPages) ...{ this.maxIndexPages = maxIndexPages; } /** *//** * @return Returns the index. */ public String getIndex() ...{ return index; } /** *//** * @param index * The index to set. */ public void setIndex(String index) ...{ this.index = index; } /** *//** * * @return */ public int getPage() ...{ int page = getOffset() / this.maxPageItems + 1; return page; } /** *//** * * @return */ public int getPreviousPage() ...{ if (!hasPreviousPage()) return 1; return getPage() - 1; } /** *//** * * @return */ public int getTotalPage() ...{ if (getTotalCount() == 0) return 0; else return getTotalCount() / this.maxPageItems + 1; } /** *//** * * @return */ public int getNextPage() ...{ if (!hasNextPage()) return getTotalPage(); else return this.getPage() + 1; } public boolean hasNextPage() ...{ if (getPage() >= getTotalPage()) return false; else return true; } public boolean hasPreviousPage() ...{ if (getPage() >= 1) return true; else return false; }}