package org.squirrelframework.foundation.fsm.impl; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.mvel2.MVEL; import org.squirrelframework.foundation.fsm.MvelScriptManager; public class MvelScriptManagerImpl implements MvelScriptManager { private Map<String, Object> compiledExpressions; @Override public <T> T eval(String script, Object context, Class<T> returnType) { Object evaluateResult = null; if(getCompiledExpression().containsKey(script)) { Object exp = getCompiledExpression().get(script); evaluateResult = MVEL.executeExpression(exp, context); } else { evaluateResult = MVEL.eval(script, context); } return returnType.cast(evaluateResult); } @Override public void compile(String script) { if(!getCompiledExpression().containsKey(script)) { Object compiled = MVEL.compileExpression(script); if(compiled!=null) { getCompiledExpression().put(script, compiled); } } } private Map<String, Object> getCompiledExpression() { if(compiledExpressions==null) compiledExpressions = new ConcurrentHashMap<String, Object>(); return compiledExpressions; } @Override public boolean evalBoolean(String script, Object context) { return eval(script, context, Boolean.class); } }