/*****************************************************************************
* *
* This file is part of the tna framework distribution. *
* Documentation and updates may be get from biaoping.yin the author of *
* this framework *
* *
* Sun Public License Notice: *
* *
* The contents of this file are subject to the Sun Public License Version *
* 1.0 (the "License"); you may not use this file except in compliance with *
* the License. A copy of the License is available at http://www.sun.com *
* *
* The Original Code is tag. The Initial Developer of the Original *
* Code is biaoping yin. Portions created by biaoping yin are Copyright *
* (C) 2000. All Rights Reserved. *
* *
* GNU Public License Notice: *
* *
* Alternatively, the contents of this file may be used under the terms of *
* the GNU Lesser General Public License (the "LGPL"), in which case the *
* provisions of LGPL are applicable instead of those above. If you wish to *
* allow use of your version of this file only under the terms of the LGPL *
* and not to allow others to use your version of this file under the SPL, *
* indicate your decision by deleting the provisions above and replace *
* them with the notice and other provisions required by the LGPL. If you *
* do not delete the provisions above, a recipient may use your version of *
* this file under either the SPL or the LGPL. *
* *
* biaoping.yin (yin-bp@163.com) *
* Author of Learning Java *
* *
*****************************************************************************/
package com.frameworkset.common.tag.pager;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.frameworkset.security.AccessControlInf;
import org.frameworkset.security.SecurityUtil;
import com.frameworkset.common.poolman.SQLParams;
import com.frameworkset.common.tag.BaseTag;
import com.frameworkset.util.ListInfo;
/**
* @author biaoping.yin
* tag开发人员需要继承DataInfoImpl类,实现以下抽象方法:
* protected abstract ListInfo getDataList(String sortKey,
boolean desc,
int offSet,
int pageItemsize),该方法分页调用
protected abstract ListInfo getDataList(String sortKey,
boolean desc),该方法列表调用
*
*/
public abstract class DataInfoImpl implements DataInfo
{
private ListInfo listInfo = null;
String sortKey;
boolean desc = true;
int pageItemsize;
long offSet;
protected transient HttpServletRequest request = null;
protected transient HttpSession session = null;
protected transient AccessControlInf accessControl = null;
protected boolean listMode = false;
boolean first;
/**
* 初始化获取分页/列表数据的必要参数
* @param sortKey 排序字段
* @param desc 排序顺序,true表示降序,false表示升序
* @param offSet 获取分页数据时,用该参数设置获取数据的起点
* @param pageItemsize 获取分页数据时,用该参数设置获取数据的条数
*/
public void initial(String sortKey,
boolean desc,
long offSet,
int pageItemsize,
boolean listMode,
HttpServletRequest request)
{
this.sortKey = sortKey;
this.desc = desc;
this.offSet = offSet;
this.pageItemsize =pageItemsize;
this.request = request;
session = request.getSession(false);
/**
* 2009.07.02 注释,如果放入系统平台需要打开
*/
if(BaseTag.ENABLE_TAG_SECURITY)
{
// accessControl = AccessControl.getAccessControl();
// if(accessControl == null)
// {
// accessControl = AccessControl.getInstance();
// accessControl.checkAccess(request,null,null,false);
// }
accessControl = SecurityUtil.getAccessControl(request, null, null);
}
listInfo = null;
this.listMode = listMode;
first = true;
}
/**
* 无需实现,初始化获取分页/列表数据的必要参数
* @param sql 数据库查询语句
* @param dbName 数据库连接池名称
* @param offSet 获取分页数据时,用该参数设置获取数据的起点
* @param pageItemsize 获取分页数据时,用该参数设置获取数据的条数
*/
public void initial(String sql,
String dbName,
long offSet,
int pageItemsize,
boolean listMode,
HttpServletRequest request)
{
}
/**
* 分页显示时获取每页的数据项
* sortKey:排序字段
* desc:排序的秩序,true为降序,false为升序
* @param offSet - 从数据源获取数据的游标位置
*
* @param pageItemsize - 每页显示的数据条数
* @return java.util.List
*/
protected abstract ListInfo getDataList(String sortKey,
boolean desc,
long offSet,
int pageItemsize);
/**
* 如果分页tag只是作为列表来实现时,调用该方法
* sortKey:排序字段
* desc:排序的秩序,true为降序,false为升序
* @return java.util.List
*/
protected abstract ListInfo getDataList(String sortKey,
boolean desc);
/**
* 识别查询是否是more分页查询
* @return
*/
public boolean isMore()
{
if(first)
{
if(!listMode)
listInfo = getDataList(sortKey,desc,offSet,pageItemsize);
else
listInfo = getDataList(sortKey,desc);
first = false;
}
if(listInfo == null)
return false;
return listInfo.isMore();
}
/**
* tag中调用以下方法获取分页时的总的数据条数,以便计算页面总数
*/
public long getItemCount()
//throws Exception
{
if(first)
{
if(!listMode)
listInfo = getDataList(sortKey,desc,offSet,pageItemsize);
else
listInfo = getDataList(sortKey,desc);
first = false;
}
if(listInfo == null)
return 0;
return listInfo.getTotalSize();
}
/**
* tag中调用以下方法获取分页数据
*/
public Object getPageItems()
{
if(first)
{
listInfo = getDataList(sortKey,desc,offSet,pageItemsize);
first = false;
}
if(listInfo == null)
return new ArrayList();
Object datas = listInfo.getObjectDatas();
return datas == null?new ArrayList():datas;
}
/**
* tag中调用以下方法获取列表数据
*/
public Object getListItems()
{
if(first)
{
listInfo = getDataList(sortKey,desc);
first = false;
}
if(listInfo == null)
return new ArrayList();
Object datas = listInfo.getObjectDatas();
return datas == null?new ArrayList():datas;
// return listInfo.getDatas() == null?new ArrayList():listInfo.getDatas();
}
/**
* tag中调用以下方法获取返回的数据集中所包含的值对象的Class对象
*/
public Class getVOClass() {
// if(listInfo == null
// || listInfo.getDatas() == null
// || listInfo.getDatas().size() == 0)
// return null;
// return listInfo.getDatas().get(0).getClass();
return null;
}
/**
* 分页显示时从数据库获取每页的数据项
* @return Hashtable[]
*/
public Object[] getPageItemsFromDB()
{
return null;
}
/**
* 如果分页tag只是作为列表来实现时,调用该方法从数据库中获取
* 要显示的列表数据
* @return java.util.List
*/
public Object[] getListItemsFromDB(){return null;}
/**
* 获取当前页面的记录条数
*/
public int getDataSize()
{
if(first)
{
if(!listMode)
listInfo = getDataList(sortKey,desc,offSet,pageItemsize);
else
listInfo = getDataList(sortKey,desc);
first = false;
}
if(listInfo == null )
return 0;
return listInfo.getSize();
}
/**
* 获取当前页面的记录条数
*/
public int getDataResultSize()
{
if(first)
{
if(!listMode)
listInfo = getDataList(sortKey,desc,offSet,pageItemsize);
else
listInfo = getDataList(sortKey,desc);
first = false;
}
if(listInfo == null )
return 0;
return listInfo.getResultSize();
}
/**
* 对列表进行分页操作,数据源是一个列表
* @param datas 列表数据
* @param offset 获取数据的起始位置
* @param pageItems 获取数据的条数
* @return ListInfo 对分页数据和总记录条数的封装类
*/
public static ListInfo pagerList(List datas,int offset,int pageItems)
{
if(datas == null)
return null;
List list = new ArrayList();
if(offset >= datas.size())
{
int temp = datas.size() % pageItems;
offset = datas.size() - temp;
}
for(int i = offset; i < datas.size() && i < offset + pageItems; i ++)
{
list.add(datas.get(i));
}
ListInfo listInfo = new ListInfo();
listInfo.setDatas(list);
listInfo.setTotalSize(datas.size());
return listInfo;
}
public Object getObjectData()
{
throw new UnsupportedOperationException("getObjectData()");
}
public void initial(String sql,
String dbName,
long offSet,
int pageItemsize,
boolean listMode,
// String sortKey,
// boolean desc,
HttpServletRequest request,SQLParams params)
{
}
}