package com.behosoft.util; import java.lang.reflect.Array; import java.text.ParseException; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.behosoft.lis.bc.routeConfig.service.RouteConfigService; import com.behosoft.lis.data.dictionary.service.DictionaryService; import com.behosoft.lis.model.vo.DictionaryVO; import com.behosoft.lis.model.vo.RouteConfigVO; import com.wondersgroup.framework.util.preloadutil.AppContextUtils; /** * *
 * 数据转换工具类
 * 
* *
* JDK版本:1.6 * * @author * @version 1.0 * @see The author for more details * @since 1.0 */ public class DataUtils { private static Log log = (Log) LogFactory.getLog(DataUtils.class); /** * 返回指定对象的int值, 如果无法解析成int, 返回0 * * @param obj * @return */ public static int asInt(Object obj) { return asInt(obj, 0); } /** * * @param param * @return 字符串 */ public static String asString(Object param) { return asString(param, ""); } /** * 返回指定对象的String形式,如果对象为null返回默认值,否则返回对象的toString()方法 * * @param obj * @param defaultValue * @return */ public static String asString(Object obj, String defaultValue) { String value = defaultValue; if (obj instanceof String) { value = (String) obj; } else if (obj != null) { value = obj.toString(); } return value; } /** * 返回指定对象的String形式,如果对象为null返回默认值,否则返回对象的toString()方法 * * @param obj * @param defaultValue * @return */ public static String asStringExt(Object obj, String defaultValue) { String value = defaultValue; if (obj instanceof String) { value = (String) obj; } else if (obj != null) { value = obj.toString(); } if (value.endsWith(".0")) { value = value.substring(0, value.indexOf(".")); } return value; } /** * 返回指定对象的int值,如果无法解析成int值,返回defaultValue * * @param obj * @param defaultValue * @return */ public static int asInt(Object obj, int defaultValue) { int value = defaultValue; if (obj instanceof String) { String str = (String) obj; if (StringUtils.isNotBlank(str)) { try { value = Integer.parseInt(str); } catch (NumberFormatException e) { } } } else if (obj instanceof Number) { value = ((Number) obj).intValue(); } return value; } /** * 返回指定对象的long值,如果无法解析成long值,返回defaultValue * * @param obj * @param defaultValue * @return */ public static long asLong(Object obj, long defaultValue) { long value = defaultValue; if (obj instanceof String) { String str = (String) obj; if (StringUtils.isNotBlank(str)) { try { value = Long.parseLong(str); } catch (NumberFormatException e) { } } } else if (obj instanceof Number) { value = ((Number) obj).longValue(); } return value; } /** 求差 * @param a * @param b * @return * @see [类、类#方法、类#成员] */ public static double subDouble(Object a,Object b) { return asDouble(a, 0d) - asDouble(b, 0d); } /** 求差 * @param a * @param b * @return * @see [类、类#方法、类#成员] */ public static int subInt(int a,int b) { return asInt(a, 0) - asInt(b, 0); } /** * 返回指定对象的long值,如果无法解析成long值,返回0L * * @param obj * @return */ public static long asLong(Object obj) { return asLong(obj, 0L); } /** * 返回指定对象的float值,如果无法解析成float值,返回defaultValue * * @param obj * @param defaultValue * @return */ public static float asFloat(Object obj, float defaultValue) { float value = defaultValue; if (obj instanceof String) { String str = (String) obj; if (StringUtils.isNotBlank(str)) { try { value = Float.parseFloat(str); } catch (NumberFormatException e) { } } } else if (obj instanceof Number) { value = ((Number) obj).floatValue(); } return value; } /** * 返回指定对象的float值,如果无法解析成float值,返回0f * * @param obj * @return */ public static float asFlost(Object obj) { return asFloat(obj, 0f); } /** * 返回指定对象的double值,如果无法解析成double值,返回0.0 * * @param obj * @return */ public static Object asDouble(Object obj) { return asDouble(obj, 0.0); } /** * 返回指定对象的double值,如果无法解析成double值,返回defaultValue * * @param obj * @param defaultValue * @return */ public static double asDouble(Object obj, double defaultValue) { double value = defaultValue; if (obj instanceof String) { String str = (String) obj; if (StringUtils.isNotBlank(str)) { try { value = Double.parseDouble(str); } catch (NumberFormatException e) { } } } else if (obj instanceof Number) { value = ((Number) obj).doubleValue(); } return value; } /** * 返回指定对象的boolean值 * * @param obj * @return */ public static boolean asBoolean(Object obj) { return asBoolean(obj, false); } /** * * 返回指定对象的boolean值
* 示例:DataUtils.asBoolean("TRUE",defaultValue) 返回true
* 示例:DataUtils.asBoolean("yes",defaultValue) 返回defaultValue
* 示例:DataUtils.asBoolean("False",defaultValue) 返回false
* 示例:DataUtils.asBoolean((Integer)1,defaultValue) 返回true
* 示例:DataUtils.asBoolean((Integer)0,defaultValue) 返回false
* 示例:DataUtils.asBoolean(Boolean.TRUE,defaultValue) 返回true
* * @param obj * @param defaultValue * 如果无法正确转换,返回的默认值 * @return */ public static boolean asBoolean(Object obj, boolean defaultValue) { if (obj instanceof Boolean) { return (Boolean) obj; } else if (obj instanceof Number) { if (((Number) obj).intValue() == 0) return false; else return true; } else if (obj != null) { String str = obj.toString(); if (str.equalsIgnoreCase("true")) return true; else if (str.equalsIgnoreCase("false")) return false; else return defaultValue; } else { return defaultValue; } } /** * 返回指定对象的Date值,obj有有效的数据格式为:java.util.Date,Long和满足yyyy-MM-dd HH:mm:ss的字符串 * * @param obj * @param defaultValue * 如果无法转换,返回的默认值 * @return */ public static Date asDate(Object obj, Date defaultValue) { if (obj == null) return defaultValue; if (obj instanceof Date) { return (Date) obj; } if (obj instanceof Number) { return new Date(((Number) obj).longValue()); } String str = obj.toString(); try { return DateUtils.getDate(str, "yyyy-MM-dd HH:mm:ss"); } catch (ParseException e) { try { return DateUtils.getDate(str, "yyyy-MM-dd"); } catch (ParseException e1) { log.warn("解析对象[" + obj + "]成时间格式错误"); } return defaultValue; } } /** * 返回指定对象的Date值,obj有有效的数据格式为:java.util.Date,Long和满足yyyy-MM-dd HH:mm:ss的字符串 * * @param obj * @return */ public static Date asDate(Object obj) { return asDate(obj, null); } /** * 根据指定的数据类型转换对象 * * @param obj * @param targetClass * 目标数据类型 * @return */ @SuppressWarnings("unchecked") public static Object as(Object obj, Class targetClass) { if (targetClass == String.class) { return asString(obj); } if (targetClass == Boolean.class || targetClass == Boolean.TYPE) { return asBoolean(obj); } if (targetClass == Integer.class || targetClass == Integer.TYPE) { return asInt(obj); } if (Date.class == targetClass) { return asDate(obj); } if (targetClass == Double.class || targetClass == Double.TYPE) { return asDouble(obj); } if (targetClass == Float.class || targetClass == Float.TYPE) { return asFlost(obj); } if (targetClass == Long.class || targetClass == Long.TYPE) { return asLong(obj); } if (targetClass.isEnum()) { return asEnum(obj, (Class) targetClass); } return obj; } /** * 返回枚举类型的数据,如果无法转换,返回null * * @param * @param obj * @param enumClass * @return */ public static > T asEnum(Object obj, Class enumClass) { if (obj == null) return null; String name = null; int i = -1; if (obj instanceof String && StringUtils.isNotBlank((String) obj)) { String str = (String) obj; if (Character.isDigit(str.charAt(0))) { i = asInt(str, -1); } else { name = str; } } else { i = asInt(obj, -1); } if (i >= 0) { T[] arr = enumClass.getEnumConstants(); if (i < arr.length) { return arr[i]; } else return null; } else if (name != null) return Enum.valueOf(enumClass, name); else return null; } public static int[] asIntArray(Object obj, int defaultValue) { if (obj == null) return null; if (obj.getClass().isArray()) { if (obj.getClass().getComponentType() == Integer.TYPE) return (int[]) obj; else { int l = Array.getLength(obj); int[] array = new int[l]; for (int i = 0; i < l; i++) { array[i] = asInt(Array.get(obj, i), defaultValue); } return array; } } else { return new int[] { asInt(obj, defaultValue) }; } } public static int[] asIntArray(Object obj) { return asIntArray(obj, 0); } public static double[] asDoubleArray(Object obj, double defaultValue) { if (obj == null) return null; if (obj.getClass().isArray()) { if (obj.getClass().getComponentType() == Double.TYPE) return (double[]) obj; else { int l = Array.getLength(obj); double[] array = new double[l]; for (int i = 0; i < l; i++) { array[i] = asDouble(Array.get(obj, i), defaultValue); } return array; } } else { return new double[] { asDouble(obj, defaultValue) }; } } public static double[] asDoubleArray(Object obj) { return asDoubleArray(obj, 0.0); } public static long[] asLongArray(Object obj, long defaultValue) { if (obj == null) return null; if (obj.getClass().isArray()) { if (obj.getClass().getComponentType() == Long.TYPE) return (long[]) obj; else { int l = Array.getLength(obj); long[] array = new long[l]; for (int i = 0; i < l; i++) { array[i] = asLong(Array.get(obj, i), defaultValue); } return array; } } else { return new long[] { asLong(obj, defaultValue) }; } } public static long[] asLongArray(Object obj) { return asLongArray(obj, 0l); } public static float[] asFloatArray(Object obj, float defaultValue) { if (obj == null) return null; if (obj.getClass().isArray()) { if (obj.getClass().getComponentType() == Float.TYPE) return (float[]) obj; else { int l = Array.getLength(obj); float[] array = new float[l]; for (int i = 0; i < l; i++) { array[i] = asFloat(Array.get(obj, i), defaultValue); } return array; } } else { return new float[] { asFloat(obj, defaultValue) }; } } public static float[] asFloatArray(Object obj) { return asFloatArray(obj, 0f); } public static Date[] asDateArray(Object obj) { if (obj == null) return null; if (obj.getClass().isArray()) { if (obj.getClass().getComponentType() == Date.class) return (Date[]) obj; else { int l = Array.getLength(obj); Date[] array = new Date[l]; for (int i = 0; i < l; i++) { array[i] = asDate(Array.get(obj, i)); } return array; } } else { return new Date[] { asDate(obj) }; } } /** * 从类名称获取对应的Class类型,有效的类名称可以是标准Class.getName()的名称或是java编码习惯上定义类型的文本,
* 如以下内容都是有效的typeStr,如果类名称是java.lang.开头的,可以省略java.lang.:
* java.lang.String
* String
* Integer
* int
* int[]
* long[][]
* [Ljava.lang.String; (Class名称标准写法,等同String[])
* [[I (Class名称标准写法,等同int[][]) * * @param typeStr * @return * @throws ClassNotFoundException */ public static Class toClass(String typeStr) throws ClassNotFoundException { Class type; if ("boolean".equals(typeStr)) { type = Boolean.TYPE; } else if ("int".equals(typeStr)) { type = Integer.TYPE; } else if ("long".equals(typeStr)) { type = Long.TYPE; } else if ("double".equals(typeStr)) { type = Double.TYPE; } else if ("float".equals(typeStr)) { type = Float.TYPE; } else if ("byte".equals(typeStr)) { type = Byte.TYPE; } else if ("short".equals(typeStr)) { type = Short.TYPE; } else if ("char".equals(typeStr)) { type = Character.TYPE; } else { int i = typeStr.indexOf("[]"); String str = typeStr; if (i > 0) { str = typeStr.substring(0, i); int d = 1; while ((i = typeStr.indexOf("[]", i + 2)) > 0) { d++; } Class compType = toClass(str); type = Array.newInstance(compType, new int[d]).getClass(); } else { try { type = Class.forName(str); } catch (ClassNotFoundException e) { str = "java.lang." + str; try { type = Class.forName(str); } catch (ClassNotFoundException e1) { throw e; } } } } return type; } /** * 字典ID转换成字典名称 * @param id * @return */ public static String asDictionary(String id){ String ret =""; if( !StringUtils.isBlank(id)){ DictionaryService dictionaryService = AppContextUtils.getApplicationContext().getBean(DictionaryService.class); DictionaryVO vo = dictionaryService.getDictionaryVoById(id); if( vo!=null ){ ret = vo.getDictionaryName(); } } return ret; } /** * 路向ID转换成路向名称 * @param routeId * @return */ public static String asRoute(String routeId){ String ret =""; if( !StringUtils.isBlank(routeId)){ RouteConfigService routeConfigService = AppContextUtils.getApplicationContext().getBean(RouteConfigService.class); RouteConfigVO vo = routeConfigService.getRouteConfigVOById(routeId); if( vo!=null ){ ret = vo.getRouteName(); } } return ret; } }