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();
}
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);
}
}
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;
}
Aggregations