use of com.iabcinc.jmep.Expression in project hale by halestudio.
the class MathExpressionParameterPage method configure.
/**
* @see TextSourceListParameterPage#configure(Text)
*/
@Override
protected void configure(final Text textField) {
super.configure(textField);
this.textField = textField;
final TransformationVariableReplacer replacer = new TransformationVariableReplacer();
textField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
try {
String exprStr = textField.getText();
exprStr = replacer.replaceVariables(exprStr);
Expression ex = new Expression(exprStr, environment);
ex.evaluate();
setErrorMessage(null);
setPageComplete(true);
} catch (Exception ex) {
String message = ex.getLocalizedMessage();
if (message != null && !message.isEmpty())
setErrorMessage(ex.getLocalizedMessage());
else
setErrorMessage("Invalid variable");
setPageComplete(false);
}
}
});
}
use of com.iabcinc.jmep.Expression 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.Expression 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