package com.gh.mygreen.xlsmapper.expression; import java.util.Map; import org.mvel2.MVEL; import org.mvel2.ParserConfiguration; import org.mvel2.ParserContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gh.mygreen.xlsmapper.ArgUtils; /** * 式言語「MVEL」の実装。 * <p>利用する際には、MVEL2.xのライブラリが必要です。</p> * * @version 1.6 * @author T.TSUCHIE * */ public class ExpressionLanguageMVELImpl implements ExpressionLanguage { private static final Logger logger = LoggerFactory.getLogger(ExpressionLanguageMVELImpl.class); private final ObjectCache<String, Object> expressionCache = new ObjectCache<String, Object>(); private ParserConfiguration parserConfiguration = new ParserConfiguration(); @Override public Object evaluate(final String expression, final Map<String, ?> values) { ArgUtils.notEmpty(expression, "expression"); ArgUtils.notNull(values, "values"); try { if(logger.isDebugEnabled()) { logger.debug("Evaluating MVEL expression: {}", expression); } Object expr = expressionCache.get(expression); if (expr == null) { expr = MVEL.compileExpression(expression, new ParserContext(parserConfiguration)); expressionCache.put(expression, expr); } return MVEL.executeExpression(expr, values); } catch(Exception ex) { throw new ExpressionEvaluationException(String.format("Evaluating [%s] script with MVEL failed.", expression), ex); } } /** * MVELの式を評価する際の設定情報を取得する。 * @since 1.6 * @return */ public ParserConfiguration getParserConfiguration() { return parserConfiguration; } /** * MVELの式を評価する際の設定情報を設定する。 * @since 1.6 * @param parserConfiguration */ public void setParserConfiguration(ParserConfiguration parserConfiguration) { this.parserConfiguration = parserConfiguration; } }