package org.compass.core.converter.dynamic; import ognl.Ognl; import ognl.OgnlContext; import org.compass.core.converter.ConversionException; import org.compass.core.mapping.ResourcePropertyMapping; /** * @author kimchy */ public class OgnlDynamicConverter extends AbstractDynamicConverter { private Object expression; public void setExpression(String expression) throws ConversionException { try { this.expression = Ognl.parseExpression(expression); } catch (Exception e) { throw new ConversionException("Failed to compile expression [" + expression + "]", e); } } protected Object evaluate(Object o, ResourcePropertyMapping resourcePropertyMapping) throws ConversionException { OgnlContext ctx = new OgnlContext(); ctx.put(DATA_CONTEXT_KEY, o); try { return Ognl.getValue(expression, ctx, o); } catch (Exception e) { throw new ConversionException("Failed to evaluate [" + o + "] with expression [" + expression + "]", e); } } }