Search in sources :

Example 1 with XExpression

use of com.iabcinc.jmep.XExpression in project hale by halestudio.

the class MathematicalExpression method evaluateExpression.

/**
 * Evaluate a mathematical expression.
 *
 * @param expression the mathematical expression. It may contain references
 *            to variables
 * @param vars the list of available property values that may be bound to
 *            variables
 * @return the evaluated expression, which can be Double, Integer or String
 * @throws XExpression if the expression could not be evaluated
 */
public static Object evaluateExpression(String expression, List<PropertyValue> vars) throws XExpression {
    Environment env = new Environment();
    for (PropertyValue var : vars) {
        // add the variable to the environment
        // determine the variable value
        Object value = var.getValue();
        Number number;
        if (value instanceof Number) {
            number = (Number) value;
        } else {
            // try conversion to Double as default
            number = var.getValueAs(Double.class);
        }
        // Floats
        if (!(number instanceof Integer) && !(number instanceof Double)) {
            number = number.doubleValue();
        }
        // determine the variable name
        String name = var.getProperty().getDefinition().getName().getLocalPart();
        Constant varValue = new Constant(number);
        // name is overridden
        if (env.getVariable(name) == null || var.getProperty().getPropertyPath().size() == 1) {
            env.addVariable(name, varValue);
        }
        // add with long name if applicable
        if (var.getProperty().getPropertyPath().size() > 1) {
            List<String> names = new ArrayList<String>();
            for (ChildContext context : var.getProperty().getPropertyPath()) {
                names.add(context.getChild().getName().getLocalPart());
            }
            String longName = Joiner.on('.').join(names);
            env.addVariable(longName, varValue);
        }
    }
    Expression ex = new Expression(expression, env);
    return ex.evaluate();
}
Also used : Expression(com.iabcinc.jmep.Expression) XExpression(com.iabcinc.jmep.XExpression) Constant(com.iabcinc.jmep.hooks.Constant) ArrayList(java.util.ArrayList) Environment(com.iabcinc.jmep.Environment) PropertyValue(eu.esdihumboldt.hale.common.align.transformation.function.PropertyValue) ChildContext(eu.esdihumboldt.hale.common.align.model.ChildContext)

Example 2 with XExpression

use of com.iabcinc.jmep.XExpression in project hale by halestudio.

the class MathematicalExpression method evaluate.

/**
 * @see AbstractSingleTargetPropertyTransformation#evaluate(String,
 *      TransformationEngine, ListMultimap, String,
 *      PropertyEntityDefinition, Map, TransformationLog)
 */
@Override
protected Object evaluate(String transformationIdentifier, TransformationEngine engine, ListMultimap<String, PropertyValue> variables, String resultName, PropertyEntityDefinition resultProperty, Map<String, String> executionParameters, TransformationLog log) throws TransformationException {
    // get the mathematical expression
    String expression = getParameterChecked(PARAMETER_EXPRESSION).as(String.class);
    // replace transformation variables in expression
    expression = getExecutionContext().getVariables().replaceVariables(expression);
    List<PropertyValue> vars = variables.get(ENTITY_VARIABLE);
    try {
        return evaluateExpression(expression, vars);
    } catch (XExpression e) {
        throw new TransformationException("Error evaluating the cell expression", e);
    }
}
Also used : TransformationException(eu.esdihumboldt.hale.common.align.transformation.function.TransformationException) PropertyValue(eu.esdihumboldt.hale.common.align.transformation.function.PropertyValue) XExpression(com.iabcinc.jmep.XExpression)

Example 3 with XExpression

use of com.iabcinc.jmep.XExpression in project hale by halestudio.

the class MathScript method evaluate.

/**
 * @see Script#evaluate(String, Iterable, ServiceProvider)
 */
@Override
public Object evaluate(String script, Iterable<PropertyValue> variables, ServiceProvider provider) throws ScriptException {
    Object result;
    try {
        Expression ex = new Expression(script, createEnvironment(variables));
        result = ex.evaluate();
    } catch (XExpression e) {
        // XXX message + exception?
        throw new ScriptException(e);
    }
    return result;
}
Also used : ScriptException(javax.script.ScriptException) Expression(com.iabcinc.jmep.Expression) XExpression(com.iabcinc.jmep.XExpression) XExpression(com.iabcinc.jmep.XExpression)

Aggregations

XExpression (com.iabcinc.jmep.XExpression)3 Expression (com.iabcinc.jmep.Expression)2 PropertyValue (eu.esdihumboldt.hale.common.align.transformation.function.PropertyValue)2 Environment (com.iabcinc.jmep.Environment)1 Constant (com.iabcinc.jmep.hooks.Constant)1 ChildContext (eu.esdihumboldt.hale.common.align.model.ChildContext)1 TransformationException (eu.esdihumboldt.hale.common.align.transformation.function.TransformationException)1 ArrayList (java.util.ArrayList)1 ScriptException (javax.script.ScriptException)1