/**
* Copyright 2008 biaoping.yin
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.frameworkset.common.tag.pager;
import java.util.Map;
import org.apache.log4j.Logger;
import com.frameworkset.common.poolman.util.SQLUtil.DBHashtable;
import com.frameworkset.util.ValueObjectUtil;
/**
* 封装调用业务方法产生的集合中的值对象的Class句柄和public fields
* @author biaoping.yin
* 2005-3-25
* version 1.0
*/
public class ClassData
{
private static final Logger log = Logger.getLogger(ClassData.class);
/**
* 值对象
*/
private Object valueObject;
private Map data = null;
private Object mapkey = null;
private boolean toUpercase = true;
/**
// * 值对象定义的方法
// */
// private Method[] methods;
// private Field[] fields;
public ClassData()
{
}
public ClassData(Map data)
{
this.data = data;
if(data instanceof DBHashtable)
{
}
else
{
this.toUpercase = false;
}
}
public ClassData(Map data,boolean toUpercase)
{
this.data = data;
this.toUpercase = toUpercase;
}
/**
* 构建器,以一个值对象和Field数组作为参数,构建体内对私有的valueObject对象、fields
* 数组进行初始化
* @param valueObject - 值对象,用来初始化valueObjce变量
* @param fields - 值对象中外界可以访问到的所有属性
*/
// public ClassData(Object valueObject,
// Method[] methods,
// Field[] fields)
// {
// this.setValueObject(valueObject);
//// this.methods = methods;
//// this.fields = fields;
// }
public ClassData(Object valueObject)
{
this.setValueObject(valueObject);
// this.methods = valueObject.getClass().getMethods();
// this.fields = valueObject.getClass().getFields();
}
public ClassData(Object valueObject,Object mapkey,boolean toUpercase)
{
this.setValueObject(valueObject);
this.mapkey = mapkey;
this.toUpercase = toUpercase;
// this.methods = valueObject.getClass().getMethods();
// this.fields = valueObject.getClass().getFields();
}
/**
* Access method for the valueObject property.
*
* @return the current value of the valueObject property
*/
public Object getValueObject()
{
if(this.data != null)
{
return data;
}
return valueObject;
}
/**
* Sets the value of the valueObject property.
*
* @param aValueObject the new value of the valueObject property
*/
private void setValueObject(Object aValueObject)
{
if(aValueObject == null)
return;
if((aValueObject instanceof DBHashtable))
{
this.data = (Map)aValueObject;
}
else if((aValueObject instanceof Map))
{
this.data = (Map)aValueObject;
toUpercase = false;
}
else
{
valueObject = aValueObject;
}
}
/**
* 从methods中查询给定字段的getter Method对象,如果找到则返回该对象,否则返回null或者抛出异常
*
* @return Method
*/
// private Method seekMethod(String fieldName)
// {
//// if (methods == null)
//// return null;
//// for (int i = 0; i < this.methods.length; i++)
//// {
//// if (methods[i]
//// .getName()
//// .equals(ValueObjectUtil.getMethodName(fieldName)))
//// return methods[i];
//// }
// return null;
// }
/**
* 从fields中查询给定名称的Field对象,如果找到则返回该对象,否则返回null或者抛出异常
*
* @return Field
*/
// private Field seekField(String fieldName)
// {
//// if (fields == null)
//// return null;
//// for (int i = 0; i < this.fields.length; i++)
//// {
//// if (fields[i].getName().equals(fieldName))
//// return fields[i];
//// }
// return null;
// }
/**
* 返回给定属性fieldName的值,
* 返回值得类型为Object
* @param fieldName - 属性名称
* @return Object
*/
public Object getValue(String fieldName)
{
if (fieldName == null)
return null;
/**
* 如果封装数据的值对象为Hashtable时直接从hashtable中获取数据,
* 否则通过值对象获取相应字段的值
*/
if(data != null)
{
if(this.toUpercase)
return data.get(fieldName.toUpperCase());
else
return data.get(fieldName);
}
else
{
return ValueObjectUtil.getValue(valueObject,fieldName);
}
}
/**
* @return Returns the data.
*/
public Map getData() {
return data;
}
/**
* @param data The data to set.
*/
public void setData(Map data) {
this.data = data;
}
public Object getMapkey()
{
return mapkey;
}
}