您的位置:首页 > 其它

基于对象适配器模式的分页组件

2006-12-30 15:41 337 查看
只包含源代码

package org.sl.mulitPage.bean;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* 分页<br>
* 实现基础分页操作
* @serial
* @author sl
*
* @param <V> 任何值
*/
public class BaseMulitPage<V> implements BaseMultPageOperation{
private List<V> dataList = null;
private int pageDispRowSize = 0;

/**
* 构造一个多页对象
* @param dataList 所有记录
* @param _pageDispRowSize 每页允许显示的记录数
*/
public BaseMulitPage(V[] datas, int pageDispRowSize){
this.dataList = new ArrayList<V>(datas.length);
dataList.addAll(Arrays.asList(datas));
setPageDispRowSize(pageDispRowSize);
}

/**
* 构造一个多页对象
* @param dataList 所有记录
* @param _pageDispRowSize 每页允许显示的记录数
*/
public BaseMulitPage(List<V> dataList, int pageDispRowSize){
this.dataList = dataList;
setPageDispRowSize(pageDispRowSize);
}

/**
* 设置每页显示的记录数
* @param _pageDispRowSize
*/
public void setPageDispRowSize(int _pageDispRowSize){
if(_pageDispRowSize < 1){
throw new RuntimeException("page display row size < 1");
}
pageDispRowSize = _pageDispRowSize;
}

/**
* 返回每页允许显示的记录数<br>
* 此返回值不能<1
* @return 每页允许显示的记录数
*/
public int getPageDispRowSize(){
return pageDispRowSize;
}

/**
* 返回指定页的记录列表
* @param pageNumber 指定的页号<br>
* 此页号必需满足:1<=pageNumber && pageNumber<=getPageCount()<br>
* 首页:1 尾页:getPageCount()
*
* @return 记录列表,若此页号无法通过checkPageNumber()方法则返回null
*/
public List getPageNumberRows(int pageNumber){
int dataListSize = 0;
List<V> pageRowList = null;
int jumpRowCount = 0;

if(checkPageNumber(pageNumber)){
jumpRowCount = (pageNumber - 1) * pageDispRowSize ;
dataListSize = getRowSize();
pageRowList = new ArrayList<V>(pageDispRowSize);

for(int i = jumpRowCount, ii = 0; i < dataListSize && ii < pageDispRowSize; i++, ii++){
pageRowList.add(dataList.get(i));
}
}else{
// pageRowList = new ArrayList<V>(0);
}
return pageRowList;
}

/**
* 返回总页数<br>
* @return 总页数
*/
public int getPageCount(){
int dataListSize = 0;
int pageCount = 0;

if(null != dataList){
dataListSize = getRowSize();

if(dataListSize > pageDispRowSize){
pageCount = dataListSize / pageDispRowSize;
pageCount += dataListSize % pageDispRowSize > 0? 1 : 0;
}else{
pageCount = 1;
}
}else{
pageCount = 0;
}

return pageCount;
}

/**
* 返回总记录数
* @return
*/
public int getRowSize(){
return this.dataList.size();
}

/**
* 检查页号是否溢出<br>
* 1 <= pageNumber && pageNumber <= getPageCount()
* @param pageNumber 页号
* @return
*/
protected boolean checkPageNumber(int pageNumber){
return 1 <= pageNumber && pageNumber <= getPageCount();
}
}
--------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
* 基础分页操作
* @author sl
*
*/
public interface BaseMultPageOperation {
/**
* 返回每页允许显示的记录数
* @return 每页允许显示的记录数
*/
int getPageDispRowSize();

/**
* 返回指定页的记录列表
* @param pageNumber 指定的页号<br>
* 此页号必需满足:1<=pageNumber && pageNumber<=getPageCount()<br>
* 首页:1 尾页:getPageCount()
*
* @return 记录列表,若此页号无法通过checkPageNumber()方法则返回null
*/
List getPageNumberRows(int pageNumber);

/**
* 返回总页数<br>
* 1为第一页,此方法返回值为尾页
* @return 总页数
*/
int getPageCount();

/**
* 返回总记录数
* @return
*/
int getRowSize();
}
--------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
* 此类为MulitPage的扩展<br>
* 对象适配器模式
* @serial
* @author sl
* @param <V> 任何值
*/
public class MoreMultPage<V> implements MoreMultPageOperation{
private BaseMulitPage baseMulitPage = null;

@SuppressWarnings("unchecked")
public MoreMultPage(List<V> dataList, int pageDispRowSize) {
this.baseMulitPage = new BaseMulitPage(dataList, pageDispRowSize);
}

@SuppressWarnings("unchecked")
public MoreMultPage(V[] datas, int pageDispRowSize){
this.baseMulitPage = new BaseMulitPage(datas, pageDispRowSize);
}

/**
* 首页
*/
@SuppressWarnings("unchecked")
public List<V> getTopPageRow() {
return baseMulitPage.getPageNumberRows(1);
}

/**
* 上一页
*
* @param nowPageNumber
* @return
*/
@SuppressWarnings("unchecked")
public List<V> previousPage(int nowPageNumber) {
return baseMulitPage.getPageNumberRows(nowPageNumber - 1);
}

/**
* 下一页
*
* @param nowPageNumber
* @return
*/
@SuppressWarnings("unchecked")
public List<V> nextPage(int nowPageNumber) {
return baseMulitPage.getPageNumberRows(nowPageNumber + 1);
}

/**
* 尾页
*/
@SuppressWarnings("unchecked")
public List<V> getEndPageRow() {
return baseMulitPage.getPageNumberRows(baseMulitPage.getPageCount());
}

public int getPageCount() {
return baseMulitPage.getPageCount();
}

public int getPageDispRowSize() {
return baseMulitPage.getPageDispRowSize();
}

public List getPageNumberRows(int pageNumber) {
return baseMulitPage.getPageNumberRows(pageNumber);
}

public int getRowSize() {
return baseMulitPage.getRowSize();
}
}
----------------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
* 扩展分页操作
* @author sl
*
*/
public interface MoreMultPageOperation extends BaseMultPageOperation{
/**
* 首页
* @return
*/
List getTopPageRow();

/**
* 上一页
* @param nowPageNumber 当前页号
* @return
*/
List previousPage(int nowPageNumber);

/**
* 下一页
* @param nowPageNumber 当前页号
* @return
*/
List nextPage(int nowPageNumber);

/**
* 尾页
* @return
*/
List getEndPageRow();
}
-------------------------------
package org.sl.mulitPage.bean;

import java.util.List;

/**
* 抽象多页类<br>
* 子类一般实现此类方法便可以实现分页<br>
* 代理模式
* @author sl
*
* @param <V>
*/
public abstract class AbstractMultPage<V> implements MoreMultPageOperation {
protected List<V> dataList = null;
protected int pageDispRowSize = 0;
protected MoreMultPage moreMulitPage = null;

public AbstractMultPage(){
this.pageDispRowSize = 5;
}
public AbstractMultPage(int pageDispRowSize){
this.pageDispRowSize = pageDispRowSize;
}

@SuppressWarnings("unchecked")
protected MoreMultPage getMoreMultPage(){
if(null == dataList){
dataList = getRow();
}

if(moreMulitPage == null){
moreMulitPage = new MoreMultPage(dataList, pageDispRowSize);
}
return moreMulitPage;
}

protected abstract List<V> getRow();

public void setPageDispRowSize(int pageDispRowSize){
this.pageDispRowSize = pageDispRowSize;
}

public List getEndPageRow() {
return getMoreMultPage().getEndPageRow();
}

@SuppressWarnings("unchecked")
public List<V> getTopPageRow() {
return getMoreMultPage().getTopPageRow();
}

@SuppressWarnings("unchecked")
public List<V> nextPage(int nowPageNumber) {
return getMoreMultPage().nextPage(nowPageNumber);
}

@SuppressWarnings("unchecked")
public List<V> previousPage(int nowPageNumber) {
return getMoreMultPage().previousPage(nowPageNumber);
}

public int getPageCount() {
return getMoreMultPage().getPageCount();
}

public int getPageDispRowSize() {
return getMoreMultPage().getPageDispRowSize();
}

@SuppressWarnings("unchecked")
public List<V> getPageNumberRows(int pageNumber) {
return getMoreMultPage().getPageNumberRows(pageNumber);
}

public int getRowSize() {
return getMoreMultPage().getRowSize();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: