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); } }