//$Id:ParamHelper.java 2009-1-20 下午06:56:19 chaostone Exp $
/*
* Copyright c 2005-2009.
*
* Licensed under the GPL License, Version 2.0 (the "License")
* http://www.gnu.org/licenses/gpl-2.0.html
*
*/
package org.beanfuse.struts2.action.helper;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.BooleanConverter;
import org.apache.commons.beanutils.converters.DoubleConverter;
import org.apache.commons.beanutils.converters.FloatConverter;
import org.apache.commons.beanutils.converters.IntegerConverter;
import org.apache.commons.beanutils.converters.LongConverter;
import org.apache.commons.lang.StringUtils;
import org.beanfuse.bean.converters.DateConverter;
import org.beanfuse.bean.converters.SqlDateConverter;
import com.opensymphony.xwork2.ActionContext;
public class ParamHelper {
static {
registerConverter();
}
public static void registerConverter() {
ConvertUtils.register(new SqlDateConverter(), java.sql.Date.class);
ConvertUtils.register(new DateConverter(), java.util.Date.class);
ConvertUtils.register(new BooleanConverter(null), Boolean.class);
ConvertUtils.register(new IntegerConverter(null), Integer.class);
ConvertUtils.register(new LongConverter(null), Long.class);
ConvertUtils.register(new FloatConverter(null), Float.class);
ConvertUtils.register(new DoubleConverter(null), Double.class);
}
public static void put(String key, Object value) {
ActionContext.getContext().getContextMap().put(key, value);
}
/**
* 返回request中以prefix.开头的参数
*
* @param request
* @param prefix
* @param exclusiveAttrNames
* 要排除的属性串
* @return
*/
public static Map getParams(String prefix, String exclusiveAttrNames) {
return getParamsMap(prefix, exclusiveAttrNames, true);
}
public static Map getParams(String prefix) {
return getParamsMap(prefix, null, true);
}
public static String[] getValues(String attr) {
return (String[]) ActionContext.getContext().getParameters().get(attr);
}
/**
* get parameter named attr
*
* @param attr
* @return single value or multivalue joined with comma
*/
public static String get(String attr) {
String[] values = (String[]) ActionContext.getContext().getParameters().get(attr);
if (null != values) {
if (values.length == 1) {
return values[0];
} else {
return StringUtils.join(values, ',');
}
} else {
return null;
}
}
public static Object get(Class clazz, String name) {
String strValue = get(name);
if (StringUtils.isNotBlank(strValue)) {
return ConvertUtils.convert(strValue, clazz);
} else {
return null;
}
}
public static Boolean getBoolean(String name) {
return (Boolean) get(Boolean.class, name);
}
public static boolean getBool(String name) {
String strValue = get(name);
if (StringUtils.isEmpty(strValue))
return false;
else
return ((Boolean) ConvertUtils.convert(strValue, Boolean.class)).booleanValue();
}
public static java.sql.Date getDate(String name) {
return (java.sql.Date) get(java.sql.Date.class, name);
}
public static Date getTime(String name) {
return (Date) get(Date.class, name);
}
public static Float getFloat(String name) {
return (Float) get(Float.class, name);
}
public static Integer getInteger(String name) {
return (Integer) get(Integer.class, name);
}
public static Long getLong(String name) {
return (Long) get(Long.class, name);
}
public static Map getParamsMap(String prefix, String exclusiveAttrNames, boolean stripPrefix) {
HashSet excludes = new HashSet();
if (StringUtils.isNotEmpty(exclusiveAttrNames)) {
String[] exclusiveAttrs = StringUtils.split(exclusiveAttrNames, ",");
for (int i = 0; i < exclusiveAttrs.length; i++) {
excludes.add(exclusiveAttrs[i]);
}
}
Map params = new HashMap();
Map parameters = ActionContext.getContext().getParameters();
for (Iterator iterator = parameters.keySet().iterator(); iterator.hasNext();) {
String attr = (String) iterator.next();
if ((attr.indexOf(prefix + ".") == 0) && (!excludes.contains(attr))) {
String[] val = (String[]) parameters.get(attr);
if (null != val) {
if (1 == val.length) {
params.put((stripPrefix ? attr.substring(prefix.length() + 1) : attr),
val[0].trim());
} else {
params.put((stripPrefix ? attr.substring(prefix.length() + 1) : attr), val);
}
}
}
}
return params;
}
}