| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package com.persagy.fm.translate.extension;
- import com.persagy.fm.common.utils.ProxyBeanUtil;
- import com.persagy.fm.translate.model.ITransWrapper;
- import org.springframework.cglib.beans.BeanCopier;
- import org.springframework.cglib.beans.BeanGenerator;
- import java.util.Collection;
- import java.util.Map;
- /**
- * 基于对象的包装
- * @author Charlie Yu
- * @Date 2021-03-03
- */
- public class BeanTransWrapperBuilder implements ITransWrapperBuilder{
- /**
- * 是否需要替换原始对象
- */
- private boolean isMap;
- /**
- * 扩展项
- */
- private Collection<String> extendProps = null;
- /**
- * 对象类
- */
- private Class<?> clazz = null;
- /**
- * 新的扩展类
- */
- private Class<?> newClass = null;
- /**
- * 生成器
- */
- private BeanGenerator gen;
- /**
- * 是否存在扩展
- */
- private boolean extend = false;
- /**
- * 构造方法
- * @param clazz 对象类
- */
- public BeanTransWrapperBuilder(Class clazz){
- this.isMap = Map.class.isAssignableFrom(clazz);
- this.clazz = clazz;
- }
- @Override
- public ITransWrapper createWrapper(Object origion) {
- if(isMap) {
- return new MapTransWrapper((Map<String, Object>) origion);
- }
- if(extend && gen == null){
- gen = ProxyBeanUtil.createBeanGenerator(origion, extendProps.toArray(new String[0]));
- if(gen == null) {
- extend = false;
- } else {
- newClass = (Class) gen.createClass();
- }
- }
- Object target = null;
- if(extend){
- BeanCopier copier = BeanCopier.create(this.clazz,newClass,false);
- target = gen.create();
- copier.copy(origion,target,null);
- }
- return new BeanTransWrapper(origion, target);
- }
- @Override
- public boolean isNeedReplaceOrigin() {
- return !isMap;
- }
- @Override
- public void setExtendProps(Collection<String> extendProps) {
- if(extendProps != null && extendProps.size() > 0) {
- this.extendProps = extendProps;
- extend = true;
- }else {
- extend = false;
- }
- }
- }
|