Java tutorial
/** * Copyright (c) 2005-2011 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * * $Id: ObjectMapper.java 1627 2011-05-23 16:23:18Z calvinxiu $ */ package com.mawujun.utils; import java.lang.reflect.InvocationTargetException; import java.util.Date; import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.converters.DateConverter; import org.dozer.DozerBeanMapper; /** * ?. * 1.?Dozer, ? * 2.?Apache Commons BeanUtils, ?. * * */ public abstract class BeanUtils extends org.apache.commons.beanutils.BeanUtils { /** * ?Dozer?, ????DozerMapper?. */ private static DozerBeanMapper dozer = new DozerBeanMapper(); /** * Dozer?. * ?? * * 1Long[] aa=BeanUtils.copy(value, long[].class)value * 2BeanUtils.copyOrCast(map, Product.class);map?? */ public static <T> T copyOrCast(Object source, Class<T> destinationClass) { // Class fromType=source.getClass(); // if (fromType == destinationClass || destinationClass == null || fromType == null) // return (T) source; // if (fromType.getName().equals(destinationClass.getName())) // return (T) source; // if (destinationClass.isAssignableFrom(fromType)) // return (T) source; return dozer.map(source, destinationClass); } // /** // * Dozer?Collection. // */ // public static <T> List<T> copyList(Collection sourceList, Class<T> destinationClass) { // List<T> destinationList = Lists.newArrayList(); // for (Object sourceObject : sourceList) { // T destinationObject = dozer.map(sourceObject, destinationClass); // destinationList.add(destinationObject); // } // return destinationList; // } /** * DozerA?B. */ public static void copyOrCast(Object source, Object destinationObject) { //dozer. dozer.map(source, destinationObject); } // private static HashMap<String,PropertyDescriptor[]> beanPropertyCache=new HashMap<String,PropertyDescriptor[]>(); // private static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws BeansException, IntrospectionException { // PropertyDescriptor[] pds = beanPropertyCache.get(clazz.getName()); // if(pds!=null){ // //return pds; // } else { // BeanInfo beanInfo = Introspector.getBeanInfo(clazz); // pds = beanInfo.getPropertyDescriptors(); // beanPropertyCache.put(clazz.getName(), pds); // } // return pds; // } // private static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String propertyName) // throws BeansException, IntrospectionException { // PropertyDescriptor[] pds = getPropertyDescriptors(clazz); // for(PropertyDescriptor pd:pds){ // if(pd.getName().equals(propertyName)){ // return pd; // } // } // return null; // } // /** // * ???? // * null // * @param source // * @param target // * @throws BeansException // * @throws IntrospectionException // */ // public static void copyExcludeNull(Object source, Object target) // throws BeansException, IntrospectionException { // // Assert.notNull(source, "Source must not be null"); // Assert.notNull(target, "Target must not be null"); // // Class<?> actualEditable = target.getClass(); // // PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable); // // // for (PropertyDescriptor targetPd : targetPds) { // if (targetPd.getWriteMethod() != null) { // PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName()); // if (sourcePd != null && sourcePd.getReadMethod() != null) { // try { // Method readMethod = sourcePd.getReadMethod(); // if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { // readMethod.setAccessible(true); // } // Object value = readMethod.invoke(source); // if(value==null){//?? // continue; // } // Method writeMethod = targetPd.getWriteMethod(); // if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { // writeMethod.setAccessible(true); // } // writeMethod.invoke(target, value); // } // catch (Throwable ex) { // throw new FatalBeanException("Could not copy properties from source to target", ex); // } // } // } // } // } static { //??yyyy-MM-dd yyyy-MM-dd HH:mm:ss registerDateConverter("yyyy-MM-dd,yyyy-MM-dd HH:mm:ss"); //ConvertUtils.deregister(Integer.class); //ConvertUtils.register(new IntegerConverter(null), Integer.class); } /** * Apache BeanUtilsConverter?,??,',' */ public static void registerDateConverter(String patterns) { DateConverter dc = new DateConverter(); dc.setUseLocaleFormat(true); dc.setPatterns(StringUtils.split(patterns, ",")); ConvertUtils.register(dc, Date.class); } /** * Apache BeanUtils?. * ???Integer??0"10.123"?Intger0 * @param value ?. * @param toType ?. */ public static <T> T convert(String value, Class<T> toType) { //??? if (toType == String.class) { return (T) value; } try { return (T) ConvertUtils.convert(value, toType); } catch (Exception e) { throw ReflectUtils.convertReflectionExceptionToUnchecked(e); } } public static <T> T convert(Object value, Class<T> toType) { //??? if (value.getClass() == toType) { return (T) value; } try { return (T) ConvertUtils.convert(value, toType); } catch (Exception e) { throw ReflectUtils.convertReflectionExceptionToUnchecked(e); } } /** * ?? * @param values * @param toType * @return */ public static <T> T convert(String[] values, Class<T> toType) { return (T) ConvertUtils.convert(values, toType); } /** * <p>Copy the specified property value to the specified destination bean, * performing any type conversion that is required.</p> * * <p>For more details see <code>BeanUtilsBean</code>.</p> * * @param bean Bean on which setting is to be performed * @param name Property name (can be nested/indexed/mapped/combo) * @param value Value to be set * * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception InvocationTargetException if the property accessor method * throws an exception * @see BeanUtilsBean#copyProperty */ public static void copyProperty(Object bean, String name, Object value) throws IllegalAccessException, InvocationTargetException { BeanUtilsBean.getInstance().copyProperty(bean, name, value); } }