/*
* Copyright 2002-2006 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.openuap.cms.util;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 分页信息.
* </p>
*
* <p>
* $Id: PageInfo.java 3917 2010-10-26 11:39:48Z orangeforjava $
* </p>
*
* @preserve private
* @author Joseph
* @version 1.0
*/
public class PageInfo implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 3739009774334331847L;
public static final int DEFAULT_ITEMS_PER_PAGE = 10;
public static final int DEFAULT_SLIDER_SIZE = 7;
public static final int UNKNOWN_ITEMS = 0x7fffffff;
private int page;
private int items;
private int itemsPerPage;
private String url;
/** 分页的标题.*/
private List<String> titles=new ArrayList<String>();
/** 分页的位置信息.*/
public List<PositionInfo> positions=new ArrayList<PositionInfo>();
public int pages() {
return (int) Math.ceil((double) items / (double) itemsPerPage);
}
public int page() {
return page;
}
public int page(int n) {
return page = calcPage(n);
}
public int page(String n) {
int nn = Integer.parseInt(n);
return page = calcPage(nn);
}
public int items() {
return items;
}
public int items(int n) {
items = n < 0 ? 0 : n;
page(page);
return items;
}
public int itemsPerPage() {
return itemsPerPage;
}
public int itemsPerPage(int n) {
int tmp = itemsPerPage;
itemsPerPage = n <= 0 ? 10 : n;
if (page > 0) {
page((int) (((double) (page - 1) * (double) tmp) / (double) itemsPerPage) + 1);
}
return itemsPerPage;
}
public int offset() {
return page <= 0 ? 0 : itemsPerPage * (page - 1);
}
public int length() {
if (page > 0) {
return Math.min(itemsPerPage * page, items) - itemsPerPage
* (page - 1);
} else {
return 0;
}
}
public int beginIndex() {
if (page > 0) {
return itemsPerPage * (page - 1) + 1;
} else {
return 0;
}
}
public int endIndex() {
if (page > 0) {
return Math.min(itemsPerPage * page, items);
} else {
return 0;
}
}
public int showItem(int n) {
return page(n / itemsPerPage + 1);
}
public int firstPage() {
return calcPage(1);
}
public int lastPage() {
return calcPage(pages());
}
public int previousPage() {
return calcPage(page - 1);
}
public int previousPage(int n) {
return calcPage(page - n);
}
public int nextPage() {
return calcPage(page + 1);
}
public int nextPage(int n) {
return calcPage(page + n);
}
public boolean isDisabledPage(int n) {
return n < 1 || n > pages() || n == page;
}
public Integer[] slider() {
return slider(7);
}
public Integer[] slider(int n) {
int pages = pages();
if (pages < 1 || n < 1) {
return new Integer[0];
}
if (n > pages) {
n = pages;
}
Integer slider[] = new Integer[n];
int first = page - (n - 1) / 2;
if (first < 1) {
first = 1;
}
if ((first + n) - 1 > pages) {
first = (pages - n) + 1;
}
for (int i = 0; i < n; i++) {
slider[i] = new Integer(first + i);
}
return slider;
}
public String toString() {
StringBuffer sb = new StringBuffer("PageBuilder: page ");
if (pages() < 1) {
sb.append(page());
} else {
Integer slider[] = slider();
for (int i = 0; i < slider.length; i++) {
if (isDisabledPage(slider[i].intValue())) {
sb.append('[').append(slider[i]).append(']');
} else {
sb.append(slider[i]);
}
if (i < slider.length - 1) {
sb.append('\t');
}
}
}
sb.append(" of ").append(pages()).append(",\n");
sb.append(" Showing items ").append(beginIndex()).append(" to ")
.append(endIndex()).append(" (total ").append(items()).append(
" items), ");
sb.append("offset=").append(offset()).append(", length=").append(
length());
return sb.toString();
}
protected int calcPage(int n) {
int pages = pages();
if (pages > 0) {
return n >= 1 ? n <= pages ? n : pages : 1;
} else {
return 0;
}
}
public PageInfo() {
this(0);
}
public PageInfo(int n) {
page = 0;
items = 0;
itemsPerPage = n <= 0 ? 10 : n;
}
public String getUrl() {
return url;
}
public List<PositionInfo> getPositions() {
return positions;
}
public void setPositions(List<PositionInfo> positions) {
this.positions = positions;
}
public void setUrl(String url) {
this.url = url;
}
public int getCurrentPage() {
return page;
}
public int getPageNum() {
return itemsPerPage;
}
public long getTotalNum() {
return items;
}
public long getTotalPage() {
return this.pages();
}
public void setTitle(int index,String title){
titles.add(index, title);
}
public String getTitle(int index){
return titles.get(index);
}
}