package jas.spawner.refactor.mvel; import jas.common.JASLog; import java.io.Serializable; import org.mvel2.MVEL; import com.google.common.base.Optional; public class MVELExpression<T> { public final String expression; public final Optional<Serializable> compiled; public MVELExpression(String expression) { this.expression = expression; if (expression != null && !expression.trim().equals("")) { compiled = Optional.of(MVEL.compileExpression(expression)); } else { compiled = Optional.absent(); } } public T evaluate(Object contextObject, String... errorMessage) { try { return (T) MVEL.executeExpression(compiled, contextObject); } catch (RuntimeException e) { for (String error : errorMessage) { JASLog.log().severe(error); } throw e; } } public boolean isPresent() { return compiled.isPresent(); } public static <T> Optional<T> execute(MVELExpression<T> expression, Object contextObject, String... errorMessage) { if (expression.isPresent()) { try { Object value = MVEL.executeExpression(expression.compiled.get(), contextObject); return value != null ? Optional.of((T) value) : Optional.<T> absent(); } catch (RuntimeException e) { for (String error : errorMessage) { JASLog.log().severe(error); } throw e; } } return Optional.<T> absent(); } }