Package com.alibaba.tamper.process

Source Code of com.alibaba.tamper.process.ScriptValueProcess

package com.alibaba.tamper.process;

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

import org.apache.commons.lang.StringUtils;

import com.alibaba.tamper.core.BeanMappingException;
import com.alibaba.tamper.core.config.BeanMappingField;
import com.alibaba.tamper.core.config.BeanMappingObject;
import com.alibaba.tamper.core.helper.ContextObjectHolder;
import com.alibaba.tamper.core.process.ValueProcess;
import com.alibaba.tamper.core.process.ValueProcessInvocation;
import com.alibaba.tamper.process.script.ScriptExecutor;
import com.alibaba.tamper.process.script.ScriptHelper;

/**
* 自定义script脚本的处理器 , get流程处理
*
* @author jianghang 2011-5-27 下午09:25:17
*/
public class ScriptValueProcess implements ValueProcess {

    @Override
    public Object process(Object value, ValueProcessInvocation invocation) throws BeanMappingException {
        BeanMappingField currentField = invocation.getContext().getCurrentField();
        if (StringUtils.isNotEmpty(currentField.getScript())) {
            BeanMappingObject beanObject = invocation.getContext().getBeanObject();

            Map param = (Map) ContextObjectHolder.getInstance().get(ContextObjectHolder.SCRIPT_CONTEXT);// 使用第一次记录的script_context
            if (param == null) {
                param = new HashMap();
                param.put(beanObject.getSrcKey(), invocation.getContext().getParam().getSrcRef());
                param.put(beanObject.getTargetKey(), invocation.getContext().getParam().getTargetRef());
                ContextObjectHolder.getInstance().put(ContextObjectHolder.SCRIPT_CONTEXT, param);
            }

            Map custom = invocation.getContext().getCustom();
            if (custom != null && custom.containsKey(ContextObjectHolder.SCRIPT_CONTEXT)) {
                Map newParam = (Map) custom.get(ContextObjectHolder.SCRIPT_CONTEXT);
                param.putAll(newParam);
            }

            // 进行值转化处理
            ScriptExecutor scriptExecutor = ScriptHelper.getInstance().getScriptExecutor();
            value = scriptExecutor.evaluate(param, currentField.getScript());
        }

        // 继续走到下一步处理
        return invocation.proceed(value);

    }
}
TOP

Related Classes of com.alibaba.tamper.process.ScriptValueProcess

TOP
Copyright © 2018 www.massapi.com. 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.