package enum2value;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import sini.webapp.video.pojo.ScVideoData;
/**
*
* @author lzb<br/>
*
* 通过枚举的方式获取表单或url上传过来的值,<br/>
* 然后再通过javabean的反向 将表单提交的值赋给javabean相应的属性。
*/
public class EnumerationUtil {
/**
* 通过枚举向实体类赋值
* @param <T>
* @param entityName 需要赋值的试题类
* @param request
* @return
* @throws Exception
*/
public <T> T getEnumValue(Class entityName,HttpServletRequest request) throws Exception{
Object tObject = entityName.newInstance();
Field[] fields=entityName.getDeclaredFields();
for(Field field:fields){
String parame=field.getName();///获取实体属性名称
PropertyDescriptor p=new PropertyDescriptor(parame, entityName);
Method getMethod= p.getReadMethod(); ///获取属性的读方法
Method setMethod=p.getWriteMethod();//获取属性的写方法
Type[] ts = setMethod.getGenericParameterTypes();// 得到setter方法的参数
String xclass = ts[0].toString(); // 只要一个参数
xclass=xclass.toLowerCase();///统一小写
Enumeration e=request.getParameterNames(); //获取枚举对象
Map<String,Object> map=new HashMap<String, Object>();
while (e.hasMoreElements()){
String element=e.nextElement().toString();///获取表单请求的元素名称
if(element.equals(parame)){///表单元素名称与实体名称相对应 执行赋值操作
String elementValues[]=request.getParameterValues(element);
if(elementValues!=null){
//获得元素的值 赋给str
String str="";
for(String val:elementValues){
if(val!=null){
str+=val.trim()+",";
}
}
if(!str.equals("")){
str=str.substring(0,str.length()-1);
}else {
str=null;
}
if (xclass.equals("int")||xclass.contains("int")||xclass.contains("integer")||xclass.equals("integer"))
{
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] { new Integer(str) });
}
continue;
}
else if (xclass.equals("string")||xclass.contains("string"))
{
setMethod.invoke(tObject, new Object[] { str });
continue;
}
else if (xclass.equals("short")||xclass.contains("short"))
{
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] { new Short(str) });
}
continue;
}else if (xclass.equals("double")||xclass.contains("double"))
{
if(isMatch("^(-?\\d+)(\\.\\d+)?$",str)){
setMethod.invoke(tObject, new Object[] { new Double(str) });
}
continue;
}else if(xclass.equals("long")||xclass.contains("long")){
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] {Long.valueOf(str).longValue() });
}
continue;
}else if(xclass.equals("float")||xclass.contains("float")){
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] {Float.valueOf(str).floatValue() });
}
continue;
}
}
}
}
}
return (T)tObject;
}
/**
* 通过枚举向实体类赋值
* @param <T>
* @param entityName 需要赋值的试题类
* @param map
* @return
* @throws Exception
*/
public <T> T setMapValue2Bean(Class entityName,Map<String,Object> map) throws Exception{
Field[] fields=entityName.getDeclaredFields();
Object tObject = entityName.newInstance();
for(Field field:fields){
String parame=field.getName();///获取实体属性名称
PropertyDescriptor p=new PropertyDescriptor(parame, entityName);
Method getMethod= p.getReadMethod(); ///获取属性的读方法
Method setMethod=p.getWriteMethod();//获取属性的写方法
Type[] ts = setMethod.getGenericParameterTypes();// 得到setter方法的参数
String xclass = ts[0].toString(); // 只要一个参数
xclass=xclass.toLowerCase();///统一小写
if(map!=null&&!map.isEmpty()){
Set<String> keyset=map.keySet();
Object[] keys=keyset.toArray();
for (int i=0;i<keys.length;i++){
String element=keys[i].toString();///获取表单请求的元素名称
if(element.equals(parame)){///表单元素名称与实体名称相对应 执行赋值操作
Object elementValues=map.get(element);
if(elementValues!=null&&!elementValues.equals("")){
//获得元素的值 赋给str
String str=elementValues.toString();
if (xclass.equals("int")||xclass.contains("int")||xclass.contains("integer")||xclass.equals("integer"))
{
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] { new Integer(str) });
}
continue;
}
else if (xclass.equals("string")||xclass.contains("string"))
{
setMethod.invoke(tObject, new Object[] { str });
continue;
}
else if (xclass.equals("short")||xclass.contains("short"))
{
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] { new Short(str) });
}
continue;
}else if (xclass.equals("double")||xclass.contains("double"))
{
if(isMatch("^(-?\\d+)(\\.\\d+)?$",str)){
setMethod.invoke(tObject, new Object[] { new Double(str) });
}
continue;
}else if(xclass.equals("long")||xclass.contains("long")){
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] {Long.valueOf(str).longValue() });
}
continue;
}else if(xclass.equals("float")||xclass.contains("float")){
if(isMatch("\\d+$",str)){
setMethod.invoke(tObject, new Object[] {Float.valueOf(str).floatValue() });
}
continue;
}
}
}
}
}
}
return (T) tObject;
}
/**
* 通过枚举获取请求值,将值存到Map<key,val>中,key位请求属性,val为属性请求的值
* @param request
* @return
*/
public static Map<String,Object> enumValue2Map(HttpServletRequest request){
Map<String,Object> map=new HashMap<String, Object>();
Enumeration e=request.getParameterNames(); //获取枚举对象
while(e.hasMoreElements()){
String key=e.nextElement().toString();
String[] vals=request.getParameterValues(key);
String val="";
if(vals!=null&&vals.length>0){
for(String v:vals){
val+=v+",";
}
if(!val.trim().equals("")){
val=val.substring(0,val.length()-1);
}
map.put(key, val);
}
}
return map;
}
/**
* 判断字符串是否满足正则
*
* @param regex
* 正则
* @param str
* 内容
* @return 符合则返回true
*/
public boolean isMatch(String regex, String str) {
boolean b = true;
if(str!=null&&!str.equals("")){
Pattern p = Pattern.compile(regex);
java.util.regex.Matcher m = p.matcher(str);
b = m.matches();
}else {
b=false;
}
return b;
}
public static void main(String a[]){
EnumerationUtil c=new Enum