All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.featherfly.conversion.core.BeanPropertyConversion Maven / Gradle / Ivy

There is a newer version: 1.5.0
Show newest version

package cn.featherfly.conversion.core;

import java.util.HashMap;
import java.util.Map;

import cn.featherfly.common.bean.BeanProperty;
import cn.featherfly.common.bean.BeanUtils;
import cn.featherfly.common.lang.ClassUtils;
import cn.featherfly.common.lang.StringUtils;
import cn.featherfly.conversion.core.annotation.Assign;


/**
 * 

* 使用BeanProperty作为参数的转换器. *

* * @author 钟冀 */ public class BeanPropertyConversion extends AbstractConversion>{ private static final Map>, Convertor> ASSIGN_CONVERSIONS = new HashMap>, Convertor>(); /** * 使用BASIC_CONVERSION_POLICY */ public BeanPropertyConversion() { super(); } /** * 构造函数 * @param conversionPolicy conversionPolicy */ public BeanPropertyConversion(ConversionPolicy conversionPolicy) { super(conversionPolicy); } /** *

* 对象转换为字符串 *

* @param 泛型 * @param value 对象 * @param beanProperty 指定对象的指定属性,否则为null * @return 字符串 */ @SuppressWarnings("unchecked") @Override public String toString(E value, BeanProperty beanProperty) { Assign assign = beanProperty.getAnnotation(Assign.class); if (assign != null && assignable) { logger.debug("类 {} 的属性 {} 指定了转换器{} 使用该转换器进行转换", new Object[]{beanProperty.getOwnerType().getName() , beanProperty.getName(), assign.conversion().getClass().getName()}); Class> ct = (Class>) assign.conversion(); return getAssignConvertor(ct, beanProperty).toString(value, (BeanProperty) beanProperty); } else { check(); return getConvertor(ClassUtils.castGenericType( beanProperty.getType(), value)) .toString(value, (BeanProperty) beanProperty); } } /** *

* 字符串转换为对象 *

* @param 泛型 * @param value 字符串 * @param beanProperty 指定对象的指定属性,否则为null * @return 对象 */ @Override @SuppressWarnings("unchecked") public E toObject(String value, BeanProperty beanProperty) { Assign assign = beanProperty.getAnnotation(Assign.class); if (assign != null && assignable) { logger.debug("类 {} 的属性 {} 指定了转换器{} 使用该转换器进行转换", new Object[]{beanProperty.getOwnerType().getName() , beanProperty.getName(), assign.conversion().getClass().getName()}); Class> ct = (Class>) assign.conversion(); return getAssignConvertor(ct, beanProperty).toObject(value, (BeanProperty) beanProperty); } else { check(); return getConvertor((Class) beanProperty.getType()) .toObject(value, (BeanProperty) beanProperty); } } @SuppressWarnings("unchecked") private Convertor getAssignConvertor(Class> conversionType , BeanProperty beanProperty) { Convertor conversion = ASSIGN_CONVERSIONS.get(conversionType); if (conversion == null) { conversion = BeanUtils.instantiateClass(conversionType); if (conversion.getType() != beanProperty.getType()) { String msg = StringUtils.format("类 [#1] 的属性 [#2]->[#3] 不能使用指定的转换器 [#4],该转换器只能转换 [#5] 类型" , beanProperty.getOwnerType().getName(), beanProperty.getName() , beanProperty.getType().getName(), conversionType.getName() , conversion.getType().getName()); throw new ConversionException(msg); } } return (Convertor) conversion; } // ******************************************************************** // // ******************************************************************** private boolean assignable = true; /** * 返回是否开启指派类型转换器 * @return assignable */ public boolean isAssignable() { return assignable; } /** * 设置是否开启指派类型转换器 * @param assignable assignable */ public void setAssignable(boolean assignable) { this.assignable = assignable; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy