/**
 * PageInfo.java 
 * Copyright © 2015-2015
 * 
 * @author pengdc
 * @create 2015年7月14日
 */
package com.yonge.toolset.mongodb;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 分页对象
 */
public class PageInfo<T> implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5951140453033647399L;

	private int pageNo;
	private int offset;
	private int limit;
	private long total = 0;
	private int totalPage = 0;

	/**
	 * 分页信息
	 */
	protected List<T> rows = new ArrayList<T>();

	protected List<T> footer = new ArrayList<T>();

	/** 默认构造函数 */
	public PageInfo() {
	}

	public PageInfo(Integer pageNo) {
		if (pageNo == null || pageNo < 1)
			pageNo = 1;
		this.setPageNo(pageNo);
	}

	/** 构造函数 */
	public PageInfo(Integer pageNo, int pageSize) {
		if (pageNo == null || pageNo < 1)
			pageNo = 1;
		this.setPageNo(pageNo);
		this.limit = pageSize;
		this.offset = (pageNo - 1) * limit;
	}

	/**
	 * 是否还有上一页
	 * @return
	 */
	public boolean hasPre() {
		return (pageNo > 1);
	}

	/**
	 * 是否还有下一页.
	 */
	public boolean hasNext() {
		return (pageNo < totalPage);
	}

	/**
	 * 取得上页的页号, 序号从1开始. 当前页为首页时返回首页序号.
	 */
	public int getPrePage() {
		if (hasPre()) {
			return pageNo - 1;
		} else {
			return pageNo;
		}
	}

	/**
	 * 取得下页的页号, 序号从1开始. 当前页为尾页时仍返回尾页序号.
	 */
	public int getNextPage() {
		if (hasNext()) {
			return pageNo + 1;
		} else {
			return pageNo;
		}
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		if (pageNo > 0) {
			this.pageNo = pageNo;
		}
	}

	public int getOffset() {
		return offset;
	}

	public void setOffset(int offset) {
		this.offset = offset;
	}

	public int getLimit() {
		return limit;
	}

	public void setLimit(int limit) {
		this.limit = limit;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public long getTotal() {
		return total;
	}

	public void setTotal(long total) {
		this.total = total;
		this.totalPage=new BigDecimal(total).divide(new BigDecimal(limit),0,BigDecimal.ROUND_CEILING).intValue();
	}

	public List<T> getRows() {
		return rows;
	}

	public void setRows(List<T> rows) {
		this.rows = rows;
	}

	public List<T> getFooter() {
		return footer;
	}

	public void setFooter(List<T> footer) {
		this.footer = footer;
	}

}
