(一) Hbase分页——工具类

2 篇文章 0 订阅
1 篇文章 0 订阅

Hbase分页工具类

—— Ivan / iu软件 (www.iusofts.com)

效果如下:

Hbase分页效果

package com.iusoft.hadoop.hbase.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;

import com.ws.sys.core.utils.ConvertUtil;
import com.ws.sys.core.utils.JsonUtil;


/**
 * @ClassName: 分页类(HbasePage.java)
 * 
 * @Description: 用于Hbase分页,每十页(即100条)保存一个rowkey于rowkeyMap中,results用于保存查询结果的rowkey
 * 
 * @Date: 2014-7-2 21:40
 * @Author Ivan
 * @Version 1.0
 */
public class HbasePage {

    /* 每页多少记录 */
    private int numPerPage = 10;
    /* 当前页码 */
    private int pageNum = 1;
    /* 页数限制 */
    private int pageLimit = 10;
    /* 最大页数 */
    private int maxPageNum;
    /* 分页结果集(只保存rowkey) */
    private List<String> results = new ArrayList<String>();
    /* rowkeyMap 保存每10页的开始key(100的整数倍) */
    private Map<String,String> rowKeyMap=null;

    /* 分页导航字符串 */
    private String navigation = "";

    /**
     * 创建分页
     * @param oldPageNum 点击前页码
     * @param pageNum 当前页码
     * @param rowKeyMap 保存每10页开始rowkey的Map
     */
    public HbasePage(int pageNum,String rowKeyMap) {    
        this.pageNum = pageNum;
        if(StringUtils.isNotBlank(rowKeyMap)){
            JSONObject object=JSONObject.fromObject(rowKeyMap);
            if(object!=null){
                this.rowKeyMap=object;
            }
        }else{
            this.rowKeyMap=new HashMap<String, String>();
        }
    }

    /**
     * 创建分页
     * @param request
     */
    public HbasePage(HttpServletRequest request) {
        int pageNum = ConvertUtil.getInteger(request.getParameter("pageNum"));
        this.pageNum= pageNum != 0 ? pageNum : 1;
        String rowKeyMap=request.getParameter("rowKeyMap");


        if(StringUtils.isNotBlank(rowKeyMap)){
            JSONObject object=JSONObject.fromObject(rowKeyMap);
            if(object!=null){
                this.rowKeyMap=object;
            }
        }
    }


    /**
     * 当前页码处理
     * @param pageNum
     */
    public void setPageNum() {
        if (this.pageNum > this.maxPageNum&&this.maxPageNum!=0) {
            this.pageNum = this.maxPageNum;
        } else if (this.pageNum < 1) {
            this.pageNum = 1;
        }
    }

    /**
     * 得到当前页码
     * 
     * @return
     */
    public int getPageNum() {
        return this.pageNum;
    }


    /**
     * 获得开始索引值
     * 
     * @return
     */
    public int getStartIndex() {
        return (this.pageNum - 1) * this.numPerPage;
    }

    /**
     * 是否有上一页
     * 
     * @return
     */
    public boolean hasPrevious() {
        return this.pageNum > 1;
    }

    /**
     * 是否有下一页
     * 
     * @return
     */
    public boolean hasNext() {
        return this.pageNum < this.pageLimit;
    }

    /**
     * 是否第一页
     * 
     * @return
     */
    public boolean isFirst() {
        return this.pageNum == 1;
    }

    /**
     * 获得上一页
     * 
     * @return
     */
    public int getPrevious() {
        if (this.pageNum - 1 <= 1) {
            return 1;
        } else {
            return this.pageNum - 1;
        }
    }

    /**
     * 获得下一页
     * 
     * @return
     */
    public int getNext() {
        if (this.pageNum + 1 >= this.maxPageNum&&this.maxPageNum!=0) {
            return this.maxPageNum;
        } else {
            return this.pageNum + 1;
        }
    }

    /**
     * 是否最后一页
     * 
     * @return
     */
    public boolean isLast() {
        return this.pageNum >= this.maxPageNum;
    }


    public String getNavigation() {
        return this.navigation;
    }

    /**
     * 生成分页Html代码
     * @param navigation
     */
    public void setNavigation() {
        if(pageNum==1&&results.size()==0){
            return;
        }
        StringBuffer sb = new StringBuffer();
        sb.append("<input type=\"hidden\" name=\"rowKeyMap\" value='"+JsonUtil.toJson(rowKeyMap)+"'>");
        int i=1;
        if(pageNum>6){
            i=pageNum-5;
            sb.append("<a href=\"javascript:pageGo('1');\" ><strong>首页</strong></a>&nbsp;");
        }
        if(pageNum>1){
            sb.append("<a href=\"javascript:pageGo('" + this.getPrevious() + "');\" ><strong>上一页</strong></a>&nbsp;");
        }
        int maxI=0;
        if(maxPageNum!=0){
            //maxI=results.size()/10+i-1;
            maxI=maxPageNum;
        }else{
            maxI=pageLimit+i-1;
        }
        for (; i <= maxI; i++) {

            if(i==pageNum){
                sb.append("<strong>" + i 
                        + "</strong>&nbsp;");
            }else{
                sb.append("<a href=\"javascript:pageGo('" + i + "');\" ><strong>" + i
                        + "</strong></a>&nbsp;");
            }

        }
        sb.append("<a href=\"javascript:pageGo('" + this.getNext() + "');\" ><strong>下一页</strong></a>&nbsp;");
        this.navigation = sb.toString();
    }

    /**
     * 获得分页结果
     * 
     * @return
     */
    public List<String> getResults() {
        int i=1;
        if(pageNum>6){
            i=(pageNum-5)%10;
        }
        int index=(pageNum-i)%10*10;
        i=index;
        List<String> list=new ArrayList<String>();
        if(results!=null&&results.size()>0){
            for (; i < index+10&&results.size()>i; i++) {
                list.add(results.get(i));
            }
        }
        return list;
    }

    /**
     * 设置分页结果
     * 
     */
    public void setResults(List<String> results) {
        this.results = results;
        setRowKeyMap();
        setMaxPageNum();
        setPageNum();
        setNavigation();
    }

    /**
     * 获取数据查询所需要的 开始rowkey
     * @return
     */
    public String getStartKey(){
        //从 用‘100整数倍的rowkey’作为‘开始rowkey’所查询出的参考数据中 找出当前页码所需要的‘开始rowkey’
        int i=0;
        if(pageNum>6){
            i=(pageNum-6)%10;
        }
        int index=i*10;
        String value="";
        if(results.size()>index){
            value=results.get(index);
        }
        return value;
    }

    /**
     * 获取RowKeyMap
     * @return
     */
    public Map<String, String> getRowKeyMap() {
        return rowKeyMap;
    }

    /**
     * 根据集合数据自动为rowkeyMap赋值
     */
    public void setRowKeyMap() {
        if(rowKeyMap==null){
            rowKeyMap=new HashMap<String, String>();
            if(pageNum==1&&results.size()>0){
                rowKeyMap.put("0", results.get(0));//总查询‘开始rowkey’
            }
        }else{
            if(pageNum==1&&results.size()>0){
                rowKeyMap.put("0", results.get(0));//总查询‘开始rowkey’
            }
            //if(((pageNum/10+1)*10-2)/5%2!=0){//判断数据集是否存在‘100的整数倍’
            if(pageNum%10>6){//判断数据集是否存在‘100的整数倍’
                int index=5*10+(10-pageNum%10+1)*10;//取数据集中 ‘100的整数倍’所在的下标
                if(results.size()>index){//判断数据集中的数据量是否大于 ‘100的整数倍’所在的下标
                    rowKeyMap.put((pageNum/10+1)*10+"", results.get(index));//保存 ‘100的整数倍’数据的rowkey(作为下100数据[下10页]的‘开始rowkey’)
                }
            }else if(pageNum%10==0){
                int index=60;
                if(results.size()>index){//判断数据集中的数据量是否大于 ‘100的整数倍’所在的下标
                    rowKeyMap.put(pageNum+"", results.get(index));//保存 ‘100的整数倍’数据的rowkey(作为下100数据[下10页]的‘开始rowkey’)
                }
            }
        }
    }

    /**
     * 获取当前页码所需要的 前置rowkey
     * @return
     */
    public String getRowKey(){
        //取当前页所需要的‘100的整数倍’的rowkey
        String key=((pageNum-6)/10)*10+"";
        String value=rowKeyMap.get(key);
        return value;
    }

    /**
     * 计算末页页码
     */
    public void setMaxPageNum(){
        int i=1;
        if(pageNum>6){
            i=pageNum-5;
        }
        i--;
        if(results.size()<100){
            maxPageNum=i+results.size()/10+1;
        }
    }

    public int getNumPerPage() {
        return this.numPerPage;
    }

    public void setNumPerPage(int numPerPage) {
        this.numPerPage = numPerPage;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值