Model与Record转换适配

/**
 * 
 * Model属性名称转换适配
 * @author Administrator
 *
 */
public class BsModelPropAdapter {

    private BsModelPropAdapter(){}
    
    /**
     * 适配转换单个属性
     */
    public static <T> T adapter(Record record,Class<T> modelClass){
        /**
         * record Map 转换 model 属性
         */
        Record r = (Record)record;
        T model = null;
        try {
            model = modelClass.newInstance();
            Field[] fields = model.getClass().getDeclaredFields();
            
            /* 遍历映射关系  */
            for (Field field : fields) {
                field.setAccessible(true);
                if(field.getName().equals("serialVersionUID"))continue;
                if(field.getAnnotation(Ignore.class) != null)continue;
                
                if(field.getType() == int.class || field.getType() == Integer.class){
                    field.set(model, NumberUtils.toInt(StringUtil.toString(r.get(field.getName()))));
                }else{
                    field.set(model, r.get(field.getName()));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return model;
    }
    
    /**
     * 适配转换集合
     */
    @SuppressWarnings("unchecked")
    public static <T> List<T> adapterList(List<?> records,Class<T> modelClass){
        List<T> models = Lists.newArrayList();
        T model = null;
        List<Record> rs = (List<Record>)records;
        for (Record r : rs) {
            model = adapter(r,modelClass);
            models.add(model);
        }
        return models;
    }
    
    /**
     * 适配转换分页对象
     */
    @SuppressWarnings("unchecked")
    public static <T> BsPageRow adapterPageRow(BsPageRow pg,Class<T> modelClass){
        List<T> models = Lists.newArrayList();
        List<Record> rs = (List<Record>)pg.getRows();
        models = adapterList(rs, modelClass);
        pg.setRows(models);
        return pg;
    }
    
    /**
     * 表单数据适配转换到对象属性
     * @param <T>
     */
    public static <T> Record adapterByModel(Record record,Class<T> modelClass){
        Record r = (Record)record;
        T model = null;
        Record recordTo = new Record();
        try {
            model = modelClass.newInstance();
            Field[] fields = model.getClass().getDeclaredFields();
            /* 遍历映射关系  */
            for (Field field : fields) {
                field.setAccessible(true);
                if(field.getName().equals("serialVersionUID"))continue;
                if(field.getAnnotation(Ignore.class) != null)continue;
                recordTo.set(field.getName(), r.get(field.getName()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return recordTo;
    }
    
    /**
     * 表单数据适配转换到对象属性
     * @param <T>
     */
    public static <T> Record adapterByRecord(Class<T> modelClass){
        T model = null;
        Record recordTo = new Record();
        try {
            model = modelClass.newInstance();
            Field[] fields = model.getClass().getDeclaredFields();
            /* 遍历映射关系  */
            for (Field field : fields) {
                field.setAccessible(true);
                if(field.getName().equals("serialVersionUID"))continue;
                if(field.getAnnotation(Ignore.class) != null)continue;
                recordTo.set(field.getName(), field.get(field.getName()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return recordTo;
    }
    
    /**
     * 表单数据适配转换到对象属性
     * @param <T>
     */
    @SuppressWarnings("rawtypes")
    public static <T> Record adapterModelToModel(Object object,Class<T> modelClass){
        T model = null;
        Record recordTo = new Record();
        Class c = object.getClass();
        try {
            model = modelClass.newInstance();
            Field[] fields = model.getClass().getDeclaredFields();
            /* 遍历映射关系  */
            for (Field field : fields) {
                field.setAccessible(true);
                if(!checkType(field.getType()) || field.getAnnotation(Ignore.class) != null 
                        || field.getName().equals("serialVersionUID")) 
                    continue;
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), c);
                Method getMethod = pd.getReadMethod();// 获得get方法
                Object o = getMethod.invoke(object);// 执行get方法返回一个Object
                if(field.getType() == int.class || field.getType() == Integer.class){
                    recordTo.set(field.getName(),NumberUtils.toInt(StringUtil.toString(o)));
                }else{
                    recordTo.set(field.getName(), o==null?"":o.toString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return recordTo;
    }
    
    public static boolean checkType(Object type) {
        if ((type == String.class) || (type == Integer.class) || (type == Integer.TYPE) || (type == Double.class)
                || (type == Double.TYPE) || (type == Float.class) || (type == Float.TYPE)) {
            return true;
        }
        return false;
    }
    
}

 

posted @ 2016-04-27 14:48  IAMME  阅读(582)  评论(0)    收藏  举报