Package com.alibaba.tamper.core.config

Examples of com.alibaba.tamper.core.config.BeanMappingObject


    public static List<BeanMappingObject> parseMapping(InputStream in) throws BeanMappingException {
        List<BeanMappingObject> result = parseMappingObject(in);
        List<BeanMappingObject> reseverResult = new ArrayList<BeanMappingObject>(result.size());
        for (BeanMappingObject object : result) {
            if (object.isReversable()) {
                BeanMappingObject reverseObject = reverse(object);
                if (reverseObject != null) {
                    reseverResult.add(reverseObject);
                }
            }
        }
View Full Code Here


    // 自动解析下src/target匹配的属性
    public static List<BeanMappingObject> parseMapping(Class src, Class target) throws BeanMappingException {
        List<BeanMappingObject> result = new ArrayList<BeanMappingObject>(2);
        PropertyDescriptor[] targetPds = ReflectionHelper.getPropertyDescriptors(target);
        PropertyDescriptor[] srcPds = ReflectionHelper.getPropertyDescriptors(src);
        BeanMappingObject object = new BeanMappingObject();
        object.setSrcClass(src);
        object.setTargetClass(target);
        object.setBatch(true);
        BeanMappingBehavior globalBehavior = BeanMappingConfigHelper.getInstance().getGlobalBehavior();
        List<BeanMappingField> fields = new ArrayList<BeanMappingField>();
        for (PropertyDescriptor targetPd : targetPds) {
            String property = targetPd.getName();
            PropertyDescriptor srcPd = getMatchPropertyDescriptor(srcPds, property);
            if (srcPd == null) {// 没有匹配属性
                continue;
            }

            if (targetPd.getWriteMethod() != null && srcPd.getReadMethod() != null) {
                BeanMappingField field = new BeanMappingField();
                BeanMappingFieldAttributes srcFieldAttribute = new BeanMappingFieldAttributes();
                srcFieldAttribute.setName(property);
                srcFieldAttribute.setClazz(srcPd.getPropertyType());
                BeanMappingFieldAttributes targetFieldAttribute = new BeanMappingFieldAttributes();
                targetFieldAttribute.setName(property);
                targetFieldAttribute.setClazz(targetPd.getPropertyType());
                // 添加记录
                field.setSrcField(srcFieldAttribute);
                field.setTargetField(targetFieldAttribute);
                field.setBehavior(globalBehavior);
                fields.add(field);
            }

        }
        object.setBeanFields(fields);
        object.setBehavior(globalBehavior);// 设置为global
        result.add(object);
        if (object.isReversable()) {
            BeanMappingObject reverseObject = reverse(object);
            if (reverseObject != null) {
                result.add(reverseObject);
            }
        }
        return result;
View Full Code Here

    // 解析class的属性为BeanMapping对象
    public static List<BeanMappingObject> parseMapMapping(Class src) throws BeanMappingException {
        List<BeanMappingObject> result = new ArrayList<BeanMappingObject>(2);
        PropertyDescriptor[] targetPds = ReflectionHelper.getPropertyDescriptors(src);
        BeanMappingObject object = new BeanMappingObject();
        object.setSrcClass(src);
        object.setTargetClass(Map.class); // 设置为map接口
        object.setBatch(true);
        List<BeanMappingField> fields = new ArrayList<BeanMappingField>();
        BeanMappingBehavior globalBehavior = BeanMappingConfigHelper.getInstance().getGlobalBehavior();
        for (PropertyDescriptor targetPd : targetPds) {
            if (targetPd.getWriteMethod() != null && targetPd.getReadMethod() != null) {
                BeanMappingField field = new BeanMappingField();
                BeanMappingFieldAttributes srcFieldAttribute = new BeanMappingFieldAttributes();
                srcFieldAttribute.setName(targetPd.getName());
                srcFieldAttribute.setClazz(targetPd.getPropertyType());
                BeanMappingFieldAttributes targetFieldAttribute = new BeanMappingFieldAttributes();
                targetFieldAttribute.setName(targetPd.getName());
                targetFieldAttribute.setClazz(targetPd.getPropertyType());
                field.setSrcField(srcFieldAttribute);
                field.setTargetField(targetFieldAttribute);
                field.setBehavior(globalBehavior);// 设置为global
                fields.add(field);
            }
        }
        object.setBeanFields(fields);
        object.setBehavior(globalBehavior);// 设置为global
        result.add(object);
        if (object.isReversable()) {
            BeanMappingObject reverseObject = reverse(object);
            if (reverseObject != null) {
                result.add(reverseObject);
            }
        }
        return result;
View Full Code Here

        return result;
    }

    // 反转处理BeanMappingObject对象
    private static BeanMappingObject reverse(BeanMappingObject object) {
        BeanMappingObject newObject = new BeanMappingObject();
        // 反转一下属性,主要是一些srcName,srcClass等
        newObject.setSrcClass(object.getTargetClass());
        newObject.setTargetClass(object.getSrcClass());
        newObject.setReversable(object.isReversable());
        newObject.setBatch(object.isBatch());
        newObject.setSrcKey(object.getSrcKey());
        newObject.setTargetKey(object.getTargetKey());
        newObject.setBehavior(object.getBehavior());
        List<BeanMappingField> fields = newObject.getBeanFields();
        for (BeanMappingField field : object.getBeanFields()) {
            // 倒转一下
            BeanMappingField newField = new BeanMappingField();
            BeanMappingFieldAttributes srcFieldAttribute = new BeanMappingFieldAttributes();
            srcFieldAttribute.setName(field.getTargetField().getName());
View Full Code Here

        NodeList nodeList = root.getElementsByTagName("bean-mapping");
        List<BeanMappingObject> mappings = new ArrayList<BeanMappingObject>();
        // 解析BeanMappingObject属性
        for (int i = 0; i < nodeList.getLength(); i++) {
            BeanMappingObject config = BeanMappingParse.parse(nodeList.item(i), globalBehavior);
            // 添加到返回结果
            mappings.add(config);
        }

        return mappings;
View Full Code Here

* @author jianghang 2011-6-21 下午01:40:18
*/
public class BeanMappingParse {

    public static BeanMappingObject parse(Node node, BeanMappingBehavior parent) {
        BeanMappingObject config = new BeanMappingObject();
        // mapping source class
        Node nameNode = node.getAttributes().getNamedItem("name");
        // mapping source class
        Node srcNode = node.getAttributes().getNamedItem("srcClass");
        // mapping target class
        Node targetNode = node.getAttributes().getNamedItem("targetClass");

        if (srcNode == null || targetNode == null) {
            throw new BeanMappingException("Parse error for bean-mapping srcClass or targetClass is null");
        }
        Node srcKeyNode = node.getAttributes().getNamedItem("srcKey");
        Node targetKeyNode = node.getAttributes().getNamedItem("targetKey");
        // 设置reversable
        Node reversableNode = node.getAttributes().getNamedItem("reversable");
        Node batchNode = node.getAttributes().getNamedItem("batch");

        String src = srcNode.getNodeValue();
        String target = targetNode.getNodeValue();
        config.setSrcClass(ReflectionHelper.forName(src));
        config.setTargetClass(ReflectionHelper.forName(target));
        if (nameNode != null) {
            config.setName(nameNode.getNodeValue()); // v1.0.2增加了mapping name定义
        }
        if (srcKeyNode != null) {
            config.setSrcKey(srcKeyNode.getNodeValue());
        }
        if (targetNode != null) {
            config.setTargetKey(targetKeyNode.getNodeValue());
        }
        if (reversableNode != null) {
            config.setReversable(Boolean.valueOf(reversableNode.getNodeValue()));
        }
        if (batchNode != null) {
            config.setBatch(Boolean.valueOf(batchNode.getNodeValue()));
        }

        // 解析下BeanHaivor参数
        BeanMappingBehavior beanbeHavior = BeanMappingBehaviorParse.parse(node, parent);
        config.setBehavior(beanbeHavior);

        if (beanbeHavior.isMappingEmptyStrings() == false || beanbeHavior.isMappingNullValue() == false) {
            config.setBatch(false);// 强制设置为false,因为batch处理无法过滤null/empty value不做set处理
        }

        // 解析bean fields
        NodeList nodeList = node.getChildNodes();
        List<BeanMappingField> beanFields = new ArrayList<BeanMappingField>(10);
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node clildNode = nodeList.item(i);
            if ("field-mapping".equals(clildNode.getNodeName())) {
                BeanMappingField field = parseField(clildNode);
                BeanMappingBehavior fieldbehavior = BeanMappingBehaviorParse.parse(clildNode, beanbeHavior);// 解析下behaivor参数
                field.setBehavior(fieldbehavior);
                if (fieldbehavior.isMappingEmptyStrings() == false || fieldbehavior.isMappingNullValue() == false) {
                    config.setBatch(false);// 强制设置为false,因为batch处理无法过滤null/empty value不做set处理
                }
                beanFields.add(field);
            }
        }
        config.setBeanFields(beanFields);
        return config;
    }
View Full Code Here

                }
            } else {
                try {

                    if (context != null) {// 如果存在上下文,说明是mapping内部递归调用
                        BeanMappingObject object = context.getNestObject();
                        if (object == null) {
                            String nestname = context.getNestName();
                            if (StringUtils.isNotEmpty(nestname)) {
                                object = BeanMappingConfigHelper.getInstance().getBeanMappingObject(nestname);
                                config.beanMapping = new BeanMapping(object);
View Full Code Here

    /**
     * 创建指定name的BeanMapping操作
     */
    public static BeanMapping create(String mappingName) {
        BeanMappingObject config = BeanMappingConfigHelper.getInstance().getBeanMappingObject(mappingName);
        if (config == null) {
            throw new BeanMappingException("can not found mapping config for name[" + mappingName + "]");
        }

        return new BeanMapping(config);
View Full Code Here

    /**
     * 创建srcClass和targetClass之间的BeanMapping操作
     */
    public static BeanMapping create(Class srcClass, Class targetClass) {
        BeanMappingObject config = BeanMappingConfigHelper.getInstance().getBeanMappingObject(srcClass, targetClass);
        if (config == null) {
            throw new BeanMappingException("can not found mapping config for srcClass[" + srcClass.toString()
                                           + "] targetClass[" + targetClass + "]");
        }

View Full Code Here

    /**
     * 根据传递的param,进行mapping处理
     */
    public static void execute(BeanMappingParam param) {
        BeanMappingObject config = param.getConfig();
        boolean isDebug = config.getBehavior().isDebug();
        if (isDebug && logger.isDebugEnabled()) {
            logger.debug("====================== start mapping \n\t srcClass["
                         + param.getSrcRef().getClass().toString() + "] \n\t targetClass["
                         + param.getTargetRef().getClass().toString() + "]");
        }
        BatchObjectHolder holder = null;
        BatchExecutor getBatchExecutor = null;
        BatchExecutor setBatchExecutor = null;
        if (config.isBatch()) { // 执行一次batch get操作,注意batch的获取操作需要放置在doFieldMapping/doBeanMapping之前
            getBatchExecutor = getGetBatchExecutor(param, config);
            setBatchExecutor = getSetBatchExecutor(param, config);
        }
        if (config.isBatch() && getBatchExecutor != null) { // 执行一次batch get操作
            Object[] batchValues = getBatchExecutor.gets(param.getSrcRef());
            holder = new BatchObjectHolder(batchValues);
        }
        List<BeanMappingField> beanFields = config.getBeanFields();
        for (int i = 0, size = beanFields.size(); i < size; i++) {
            BeanMappingField beanField = beanFields.get(i);
            if (beanField.isMapping()) {
                doBeanMapping(param, beanField, holder);
            } else {
                doFieldMapping(param, beanField, holder);
            }
        }
        if (config.isBatch() && setBatchExecutor != null && holder != null) { // 执行一次batch set操作
            setBatchExecutor.sets(param.getTargetRef(), holder.getBatchValues());
        }

        if (isDebug && logger.isDebugEnabled()) {
            logger.debug("====================== end mapping");
View Full Code Here

TOP

Related Classes of com.alibaba.tamper.core.config.BeanMappingObject

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.