📄 basedatasource.java
字号:
/*
* Created on 2006-6-8
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package net.excel.report.datasource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.excel.report.IQueryDataListener;
import net.excel.report.Logger;
import net.excel.report.base.element.Variable;
import net.excel.report.config.DataSourceConfig;
/**
* 数据源基类, 实现一些数据源的基本功能, 如数据集的遍历,
* 事件监听器的设置和触发等如查询监听器的设置和触发等功能.
* @author juny
*/
public abstract class BaseDataSource implements IDataSource, IDataSourceListener{
private static Logger log = Logger.getLogger(BaseDataSource.class);
private String name;
/**
*
*/
public BaseDataSource(){
params = new HashMap();
}
/**
* 根据指定配置信息,和数据源名称构造一个数据源对象。
* @param config 数据源配置信息。
* @param name 数据源名称
*/
public BaseDataSource(DataSourceConfig config, String name){
setConfigInfo(config, name);
params = new HashMap();
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#setConfigInfo(excel.report.config.DataSourceConfig, java.lang.String)
*/
public void setConfigInfo(DataSourceConfig config, String name){
this.config = config;
this.name = name;
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#getName()
*/
public String getName(){
return this.name;
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#getConfig()
*/
public DataSourceConfig getConfig(){
return this.config;
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#setParameter(java.lang.String, java.lang.Object)
*/
public void setParameter(String param, Object value){
params.put(param, value);
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#queryData()
*/
public final int queryData() throws Exception {
//装载输入参数
loadInitParams();
boolean needQuery = true;
int queryResult = IDataSource.QUERY_FAILURE;
if(null != queryListener){
//调用查询监听器检索数据
if(queryListener.beforeQuery(this)){
//如果查询监听器返回值跳过默认查询则直接返回
needQuery = false;
}
}
//调用实现类检索数据
if(needQuery){
queryResult = query(params);
}
if(null != queryListener){
//调用查询后处理监听器
queryListener.afterQuery(this);
}
return queryResult;
}
/**
* 继承类重载该函数来实现数据源数据的检索, 所有继承至BaseDataBase的数据源都必须
* 重载该函数,来实现数据检索工作。
* @param param
* @return
* @throws Exception
*/
public int query(Map param)throws Exception {
//返回检索数据失败, 因此继承函数必须重载该
//函数否则数据检索不会成功.
return IDataSource.QUERY_FAILURE;
}
/**
* 初始化,并取得数据源的输入参数. 该输入参数可能是一个字段变量,也可能是一个
* 输入参数,还有可能是一个常量
* @throws Exception
*/
private void loadInitParams() throws Exception{
Object variable = null, tempObj = null;
boolean resetParam = false;
String temp = "", value = "";
Map paramsInit = getParamInit();
List configParams = getConfig().getParams();
if(null != paramsInit && null != params){
//已经配置配置过参数则清除掉原来的参数
if(params.size() > 0){
params.clear();
}
if(paramsInit.size() != configParams.size()){
log.warn("The initialial parameters are not equal the datasource config parameters! 2");
}
//取得配置输入参数的值,该输入参数可能是一个字段变量,也可能是一个
//输入参数,还有可能是一个常量
for(int i=0; i<configParams.size(); i++){
variable = paramsInit.get((String)configParams.get(i));
if(null != variable){
String fieldValue = null;
if(variable instanceof Variable){
tempObj = ((Variable)variable).getString();
if(null != tempObj){
fieldValue = tempObj.toString();
}
}else{
log.error("Error: In BaseDataSource.getParam();");
}
if(null != fieldValue){
this.setParameter((String)configParams.get(i), fieldValue);
}
}
}
}
}
/**
* 设置该数据源实例的输入参数取值配置信息。信息保存方式为:(key=数据源对应的输入参数名称, value=参数值取值配置)
* <br>因为如果某个数据源在其定义过程中如果配置了相应的参数信息,
* 当系统在生成具体的某个报表时使用到了该数据源,这是候必须在配置文件中引用该数据源,同时也必须配置
* 该数据源实例的输入参数配置信息,即告诉该数据源实例,当它需要输入参数时应该去从那获得参数的值。
* 该配置通过< param-init >节点来定义,例如:<br>
* < datasource name="s5" source="testDataSource2"><br>
* < param-init name="arg1" value="$P{argumentName}"/ ><br>
* < /datasource><br>
* 在上面的配子文件中配置了一个名为s5的数据源的输入参数的配置信息,
* 其表示数据源其有一个名为arg1的输入参数应该去用户请求报表参数列表中取名称为
* argumentName的参数值。
* @param paramInit 初始化输入参数配置信息。
*/
public void setParamInit(Map paramInit){
//拷贝参数到本地,不能直接引用,应为在具体的数据源中会修改
//paramsInit中保存的初始化参数信息,会将初始化变量替换成相应的
//变量对象
if(null != paramInit){
this.paramsInit = new HashMap(paramInit);
}
}
/**
* 取得数据输入参数参数配置信息。在<param-init>节点配置
* @return 返回配置信息列表,
*/
public Map getParamInit(){
return paramsInit;
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#moveToFirst()
*/
public boolean moveToFirst(){
if(null != recordList && recordList.size() > 0){
index = 0;
return true;
}
return false;
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#next()
*/
public Map next(){
if(null == recordList) return null;
if(index + 1 < recordList.size() && recordList.size() > 0){
return (Map)recordList.get(++index);
}else{
//modified by ajun 2006-07-10 修改查询会漏掉一条记录的问题。
index++;
return null;
}
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#hasNext()
*/
public boolean hasNext() {
if(null == recordList || index == -1){
return false;
}
//modified by ajun 2006-07-10 修改查询会漏掉一条记录的问题。
//这里不好改MoveToFirst()函数,因为系统要求默认就在第一条记录。
//return ((index + 1) < data.size()) ? true : false;
return ((index + 1) <= recordList.size()) ? true : false;
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#undoNext()
*/
public void undoNext(){
if(index > 0){
index--;
}else{
//throw new Exception(Out of rang of the datasoure);
}
}
/*
* (non-Javadoc)
* @see excel.report.datasource.IDataSource#getString(java.lang.String)
*/
public String getString(String fieldName){
if(null == recordList) return "";
Object value = this.getValue(fieldName);
if(null != value){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -