import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.huawei.widget.commons.dao.DBException;
import com.huawei.widget.commons.dao.ResultSetHandler;
import com.huawei.widget.commons.dao.SqlParameterSource;
/**
* SqlParameterSource缺省实现,用于进行参数处理的类。
*
* @author g00106664
* @version C02 2009-4-27
* @since OpenEye WIDGET_SRV V100R001C02
*/
public class SqlParameterSourceDefault implements SqlParameterSource
{
/**
* 用于存储参数。
*/
private Map<String, SqlParameter> params = new HashMap<String, SqlParameter>();
/**
* 游标处理的字段名。
*/
private String handerName = null;
/**
* 此方法用于获取所有的参数集合。
*
* @return the sql parameters
*/
public Collection<SqlParameter> getSqlParameters()
{
return params.values();
}
/**
* Adds the sql parameter.
*
* @param param
* the param
* @return the sql parameter source
* @see SqlParameterSource#addSqlParameter(SqlParameter)
* @since 2008-5-28
*/
private SqlParameterSource addSqlParameter(SqlParameter param)
{
params.put(param.getName(), param);
return this;
}
/**
* Adds the sql parameter.
*
* @param name
* 名称。
* @param type
* 类型。
* @param value
* the value
* @return the sql parameter source
* @since 2008-5-28
*/
public SqlParameterSource addSqlParameter(String name, int type,
Object value)
{
return addSqlParameter(new SqlParameterDefault(name, type, value));
}
/**
* 此方法用于增加流标处理。
*
* @param name
* of type String
* @param handler
* of type ResultSetHandler
* @return SqlParameterSource
*/
public SqlParameterSource addCursorHandler(String name,
ResultSetHandler handler)
{
if (handerName == null || name.equals(handerName))
{
handerName = name;
return addSqlParameter(new SqlParameterDefault(name, handler));
}
else
{
throw new DBException(
"one SqlParameter just allow one cursor handler");
}
}
/**
* 此方法用于增加OUT参数。
*
* @param name
* of type String
* @param type
* 数据类型。
* @return SqlParameterSource
*/
public SqlParameterSource addOutParameter(String name, int type)
{
return addSqlParameter(new SqlParameterDefault(name, type,
PARAM_TYPE_OUT));
}
/**
* 此方法用于增加IN/OUT参数。
*
* @param name
* of type String
* @param type
* of type int
* @param value
* of type Object
* @return SqlParameterSource
*/
public SqlParameterSource addInOutParameter(String name, int type,
Object value)
{
return addSqlParameter(new SqlParameterDefault(name, type, value,
PARAM_TYPE_INOUT));
}
/**
* 此方法用于根据键值获取参数。
*
* @param key
* 键值。
* @return SqlParameter
*/
public SqlParameter getSqlParameter(String key)
{
return params.get(key);
}
/**
* 此方法用于SqlParameter缺省实现。
*/
private static class SqlParameterDefault implements SqlParameter
{
/**
* 名称。
*/
private String name;
/**
* 类型。
*/
private int type;
/**
* 值对象
*/
private Object value = null;
/**
* 游标处理器。
*/
private ResultSetHandler handler = null;
/**
* 参数类型。
*/
private int paramType = 0;
/**
* 初始化
*
* @param name
* 名称。
* @param type
* 参数类型。
* @param value
* 值。
*/
public SqlParameterDefault(String name, int type, Object value)
{
this.name = name;
this.type = type;
this.value = value;
}
/**
* 初始化
*
* @param name
* 名称。
* @param type
* 数据类型。
* @param paramType
* 参数类型(输入、输出、输出/输入)。
*/
public SqlParameterDefault(String name, int type, int paramType)
{
this.name = name;
this.type = type;
this.paramType = paramType;
}
/**
* 初始化
*
* @param name
* 名称。
* @param type
* 类型。
* @param value
* 值。
* @param paramType
* 参数类型(输入、输出、输出/输入)。
*/
public SqlParameterDefault(String name, int type, Object value,
int paramType)
{
this.name = name;
this.type = type;
this.value = value;
this.paramType = paramType;
}
/**
* 初始化
*
* @param name
* 名称。
* @param handler
* ResultRset处理接口,主要用于游标处理。
*/
public SqlParameterDefault(String name, ResultSetHandler handler)
{
this.name = name;
this.type = CURSOR;
this.handler = handler;
this.paramType = PARAM_TYPE_OUT;
}
/**
* Method getName returns the name of this SqlParameter object.
*
* @return the name (type String) of this SqlParameter object.
*/
public String getName()
{
return name;
}
/**
* Sets the name.
*
* @param name
* the new name
*/
public void setName(String name)
{
this.name = name;
}
/**
* Method getType returns the type of this SqlParameter object.
*
* @return the type (type int) of this SqlParameter object.
*/
public int getType()
{
return type;
}
/**
* Sets the type.
*
* @param type
* the new type
*/
public void setType(int type)
{
this.type = type;
}
/**
* Method getValue returns the value of this SqlParameter object.
*
* @return the value (type Object) of this SqlParameter object.
*/
public Object getValue()
{
return value;
}
/**
* Sets the value.
*
* @param value
* the new value
*/
public void setValue(Object value)
{
this.value = value;
}
/**
* Method getParamType returns the paramType of this SqlParameter
* object.
*
* @return the paramType (type int) of this SqlParameter object.
*/
public int getParamType()
{
return paramType;
}
/**
* Method getHandler returns the handler of this SqlParameter object.
*
* @return the handler (type ResultSetHandler) of this SqlParameter
* object.
*/
public ResultSetHandler getHandler()
{
return handler;
}
/**
* Sets the handler. 主要用于游标处理
*
* @param handler
* the new handler
*/
public void setHandler(ResultSetHandler handler)
{
this.handler = handler;
}
/*
* (非 Javadoc)
*
* @see java.lang.Object#toString()
*/
public String toString()
{
final StringBuilder sb = new StringBuilder();
sb.append("SqlParameterSourceDefault");
sb.append("{name='").append(name).append('/'');
sb.append(", type=").append(type);
sb.append(", value=").append(value);
sb.append(", handler=").append(handler);
sb.append(", paramType=").append(paramType);
sb.append('}');
return sb.toString();
}
}
}