use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.
the class ASTDivNode method interpret.
private final Operand interpret(Operand ao, Operand bo) {
Object a = ao.value;
Object b = bo.value;
if (a instanceof String || b instanceof String)
throw new TMLExpressionException("Division not defined for strings");
if (a instanceof Integer && b instanceof Integer)
return Operand.ofInteger(Integer.valueOf(((Integer) a).intValue() / ((Integer) b).intValue()));
double dA = Utils.getDoubleValue(a);
double dB = Utils.getDoubleValue(b);
return Operand.ofFloat(Double.valueOf(dA / dB));
}
use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.
the class ASTForAllNode method interpret.
/**
* FORALL(<EXPRESSION>, `[$x] <EXPRESSION>`) E.G.
* FORALL([/ClubMembership/ClubMemberships/ClubIdentifier],
* `CheckRelatieCode([$x])`)
*
* @return
*/
private final Operand interpret(Navajo doc, Message parentMsg, Message parentParamMsg, Selection parentSel, MappableTreeNode mapNode, TipiLink tipiLink, Access access, Optional<ImmutableMessage> immutableMessage, Optional<ImmutableMessage> paramMessage, ContextExpression a, ContextExpression b) {
boolean matchAll = true;
if (functionName.equals("FORALL"))
matchAll = true;
else
matchAll = false;
String msgList = (String) a.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value;
try {
List<Message> list = null;
if (parentMsg == null) {
list = doc.getMessages(msgList);
} else {
list = parentMsg.getMessages(msgList);
}
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
parentMsg = (Message) o;
// ignore definition messages in the evaluation
if (parentMsg.getType().equals(Message.MSG_TYPE_DEFINITION))
continue;
Operand apply = b.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage);
boolean result = (Boolean) apply.value;
if ((!(result)) && matchAll)
return Operand.ofBoolean(false);
if ((result) && !matchAll)
return Operand.ofBoolean(true);
}
} catch (NavajoException ne) {
throw new TMLExpressionException("Invalid expression in FORALL construct: \n" + ne.getMessage());
}
return Operand.ofBoolean(matchAll);
}
use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.
the class ASTForAllNode method interpretToLambda.
@Override
public ContextExpression interpretToLambda(List<String> problems, String expression, Function<String, FunctionClassification> functionClassifier, Function<String, Optional<Node>> mapResolver) {
return new ContextExpression() {
@Override
public boolean isLiteral() {
return false;
}
@Override
public Operand apply(Navajo doc, Message parentMsg, Message parentParamMsg, Selection parentSel, MappableTreeNode mapNode, TipiLink tipiLink, Access access, Optional<ImmutableMessage> immutableMessage, Optional<ImmutableMessage> paramMessage) {
List<String> problems = new ArrayList<>();
ContextExpression a = jjtGetChild(0).interpretToLambda(problems, expression, functionClassifier, mapResolver);
ContextExpression b = jjtGetChild(1).interpretToLambda(problems, expression, functionClassifier, mapResolver);
if (!problems.isEmpty()) {
throw new TMLExpressionException(problems, expression);
}
return interpret(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage, a, b);
}
@Override
public Optional<String> returnType() {
return Optional.empty();
}
@Override
public String expression() {
return expression;
}
};
}
use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.
the class Expression method match.
public static final Message match(String matchString, Navajo inMessage, MappableTreeNode o, Message parent) throws SystemException {
try {
StringTokenizer tokens = new StringTokenizer(matchString, ";");
String matchSet = tokens.nextToken();
if (matchSet == null)
throw new TMLExpressionException("Invalid usage of match: match=\"[match set];[match value]\"");
String matchValue = tokens.nextToken();
if (matchValue == null)
throw new TMLExpressionException("Invalid usage of match: match=\"[match set];[match value]\"");
Operand value = evaluate(matchValue, inMessage, o, parent, null, null, null, null);
List<Property> properties;
if (parent == null)
properties = inMessage.getProperties(matchSet);
else
properties = parent.getProperties(matchSet);
for (int i = 0; i < properties.size(); i++) {
Property prop = properties.get(i);
Message parentMsg = prop.getParentMessage();
if (prop.getValue().equals(value.value))
return parentMsg;
}
} catch (NavajoException e) {
throw new SystemException(-1, e.getMessage(), e);
}
return null;
}
use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.
the class Switch method testWithPropertyAndSingleValueParameter.
@Test
public void testWithPropertyAndSingleValueParameter() throws Exception {
FunctionInterface fi = fff.getInstance(cl, "Switch");
fi.reset();
Navajo n = createTestNavajo();
fi.setInMessage(n);
fi.insertOperand(Expression.evaluate("[/Single/Vuur]", n));
fi.insertIntegerOperand(0);
try {
Object result = fi.evaluate();
} catch (TMLExpressionException tmle) {
assertTrue(tmle.getMessage().indexOf("Not enough") != -1);
}
}
Aggregations