package com.mandi.common;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.URLDecoder;
import java.util.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

/**
 * httpservletrequest。getparameter,并转换为响应的类型
 * @author Administrator
 *
 */
public class RequestParam {
	public static int getInt(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		int i=0;
		try {
			i=Integer.valueOf(tstr);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return i;
	}
	private static float getFloat(HttpServletRequest request, String name) {
		String tstr=request.getParameter(name);
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		if(tstr==null)
			return 0;
		float i=0.0f;
		try {
			i=Float.valueOf(tstr);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return i;

	}
	private static byte getByte(HttpServletRequest request, String name) {
		String tstr=request.getParameter(name);
		if(tstr==null)
			return 0;
		tstr=StringUtils.trimToEmpty(tstr);
		byte i=0;
		try {
			i=Byte.valueOf(tstr);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return i;
	}
	public static long getLong(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr==null)
			return 0;
		tstr=StringUtils.trimToEmpty(tstr);
		long i=0;
		try {
			i=Long.valueOf(tstr);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return i;
	}
	public static double getDouble(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr==null)
			return 0;
		tstr=StringUtils.trimToEmpty(tstr);
		double i=0;
		try {
			i=Double.valueOf(tstr);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return i;
	}
	public static Date getDate(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		Date tt=null;
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		try {
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			tt=sdf.parse(tstr);
		} catch (Exception e) {

			try{
				SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
				tt=sdf.parse(tstr);
			}catch(Exception ee){
				try{
					SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
					tt=sdf.parse(tstr);
				}catch(Exception eee){
					try{
						SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM");
						tt=sdf.parse(tstr);
					}catch(Exception eeee){
						
					}
				}
			}
		}
		return tt;
	}
	public static Timestamp Timestamp(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		Timestamp tt=null;
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		try {
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			tt=new Timestamp(sdf.parse(tstr).getTime());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return tt;
	}
	public static Time getTime(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		Time tt=null;
		try {
			SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
			tt=new Time(sdf.parse(tstr).getTime());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return tt;
	}
	public static boolean getBool(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		try {
			if("true".equals(tstr)||"1".equals(tstr.trim()))
				return true;
		} catch (Exception e) {
			// TODO: handle exception
		}
		return false;
	}
	public static String getString(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		if(StringUtils.isBlank(tstr)){
			return null;
		}
		return tstr;
	}
	public static String getSqlString(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr!=null)
			tstr=StringUtils.trimToEmpty(tstr);
		if(tstr!=null)
			tstr=BasicMethod.sqlformat(tstr);
		if(StringUtils.isBlank(tstr)){
			return null;
		}
		return tstr;
	}
	public static String getURLString(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		if(tstr==null||tstr.equals(""))
			return "";
		try {
			String tstr1=new String(tstr.getBytes("ISO-8859-1"), "UTF-8");
			return tstr1.trim();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return tstr;
	}
	/*
	 * <script language="JavaScript">
document.write(encodeURI('http://www.blogjava.net/chenlb/abc 中文'));
</script>

String url = "http://www.blogjava.net/chenlb/abc%20%E4%B8%AD%E6%96%87";
        try {
            System.out.println(URLDecoder.decode(url, "UTF-8"));
            System.out.println(URLDecoder.decode(url, "GBK"));//乱码
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
	 */
	public static String getDecodeStr(HttpServletRequest request,String name)
	{
		String tstr=request.getParameter(name);
		try {
			tstr= URLDecoder.decode(tstr,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return tstr;
	}
	public static <T extends Enum<T>> T getenum(HttpServletRequest r,String name,Class<T> clazz)
	{
		String tstr=r.getParameter(name);
		T t=null;
		try {
			t=Enum.valueOf(clazz, tstr);
		} catch (Exception e) {
		}
		return t;
	}
	public static <T> T getobj(HttpServletRequest r,T obj)
	{
		@SuppressWarnings("rawtypes")
		Class cls=obj.getClass();
		try {
			Field[] fs=cls.getDeclaredFields();
			for (Field field : fs) {
				field.setAccessible(true);
				String fn=field.getName();
				if(field.getType()==String.class)
				{
					String t=RequestParam.getString(r, fn);
					if(t!=null)
						field.set(obj, t);
				}else if(field.getType()==Timestamp.class)
				{
					Timestamp tt=RequestParam.Timestamp(r, fn);
					if(tt!=null)
						field.set(obj, tt);
				}else if(field.getType()==Date.class)
				{
					Date dt=RequestParam.getDate(r, fn);
					if(dt!=null)
						field.set(obj, dt);
				}else if(field.getType()==byte.class||field.getType()==Byte.class)
				{
					byte i=getByte(r, fn);
					if(i!=0)
						field.setByte(obj, i);
				}else if(field.getType()==float.class||field.getType()==Float.class)
				{
					float i=getFloat(r, fn);
					if(i!=0)
						field.setFloat(obj, i);
				}else if(field.getType()==int.class||field.getType()==Integer.class)
				{
					int i=getInt(r, fn);
					if(i!=0)
						field.setInt(obj, i);
				}else if(field.getType()==double.class||field.getType()==Double.class)
				{
					Double d=getDouble(r, fn);
					if(Math.abs(d)>0.0001)
						field.setDouble(obj, d);
				}else if(field.getType()==long.class||field.getType()==Long.class)
				{
					Long l=getLong(r, fn);
					if(l!=0)
						field.setLong(obj, l);
				}else if(field.getType()==Boolean.class||field.getType()==boolean.class)
				{
					Boolean b=RequestParam.getBool(r, fn);
					field.setBoolean(obj, b);
				}
				//System.out.println(field.getType().toString()+(field.getType()==int.class));
			}
		} catch (IllegalAccessException e) {
		}
		return obj;
	}

}