package org.hy.common.app;

import org.hy.common.Help;





/**
 * 分页信息的数据封装类
 * 
 * 引用于2005年开发的Pagination项目
 *
 * @author      ZhengWei(HY)
 * @createDate  2005-12-04
 * @version     v1.0
 */
public class PageInfo<O> implements java.io.Serializable
{

    private static final long serialVersionUID = 7576540312390196308L;
    
    

    /** 分页中当前页中要显示的记录 */
    private O   datas;

    /** 得到某一查寻语句的执行结果中一共有多少条记录 */
    private int maxRowCount;

    /** 每页分为多少行 */
    private int pagePerCount;

    /** 一共分为多少页(不要此属性是可以的,可以计算出来,但为了加快程序的速度,所以才加上,并且这样好理解) */
    private int maxPageCount;

    /** 当前分页的分页号。下标从1开始 */
    private int currentPage;

    
    
    /**
     * 构造子 因为本类是在内部被创建的,所以在此没有进行数据的有效性检测。
     * 
     * @param i_MaxRowCount   一共有多少条记录
     * @param i_PagePerCount  每页分为多少行
     * @param i_CurrentPage   当前分页的分页号。下标从1开始
     */
    public PageInfo(int i_MaxRowCount ,int i_PagePerCount ,int i_CurrentPage)
    {
        this(null ,i_MaxRowCount ,i_PagePerCount ,i_CurrentPage);
    }
    
    

    /**
     * 构造子 因为本类是在内部被创建的,所以在此没有进行数据的有效性检测。
     * 
     * @param i_Datas         分页中当前页中要显示的记录
     * @param i_MaxRowCount   一共有多少条记录
     * @param i_PagePerCount  每页分为多少行
     * @param i_CurrentPage   当前分页的分页号
     */
    public PageInfo(O i_Datas ,int i_MaxRowCount ,int i_PagePerCount ,int i_CurrentPage)
    {
        this.datas        = i_Datas;
        this.maxRowCount  = i_MaxRowCount;
        this.pagePerCount = i_PagePerCount;
        this.currentPage  = i_CurrentPage;
        this.maxPageCount = (int)Help.division(this.maxRowCount , this.pagePerCount);
        if ( (this.maxRowCount % this.pagePerCount) != 0 )
        {
            this.maxPageCount += 1;
        }
    }



    /**
     * 返回分页中当前页中要显示的记录
     */
    public O getDatas()
    {
        return this.datas;
    }
    
    
    
    public void setDatas(O i_Datas)
    {
        this.datas = i_Datas;
    }



    /**
     * 得到每页分页中的记录数
     */
    public int getPagePerCount()
    {
        return this.pagePerCount;
    }



    /**
     * 得到某一查寻语句的执行结果中一共有多少条记录
     */
    public int getMaxRowCount()
    {
        return this.maxRowCount;
    }



    /**
     * 一共分为多少页
     */
    public int getMaxPageCount()
    {
        return this.maxPageCount;
    }



    /**
     * 返回当前分页的分页号
     */
    public int getCurrentPageNum()
    {
        return this.currentPage;
    }



    /**
     * 返回当前分页的前一页的分页号
     */
    public int getPreviousPageNum()
    {
        int v_PreviousPageNum = this.currentPage - 1;
        if ( v_PreviousPageNum <= 0 )
        {
            v_PreviousPageNum = 1;
        }
        return v_PreviousPageNum;
    }



    /**
     * 返回当前分页的下一页的分页号
     */
    public int getNextPageNum()
    {
        int v_NextPageNum = this.currentPage + 1;
        if ( v_NextPageNum > this.maxPageCount )
        {
            v_NextPageNum = this.maxPageCount;
        }
        return v_NextPageNum;
    }



    /**
     * 返回当前分页已前的所有记录总数
     */
    public int getPreviousPagesRowCount()
    {
        return (this.currentPage - 1) * this.pagePerCount;
    }



    /**
     * 返回首页的分页号
     */
    public int getHeadPageNum()
    {
        return 1;
    }



    /**
     * 返回尾页的分页号
     */
    public int getFootPageNum()
    {
        return this.maxPageCount;
    }
    
}