use of org.kie.dmn.model.api.Some in project drools by kiegroup.
the class DMNIteratorEvaluator method evaluate.
@Override
public EvaluatorResult evaluate(DMNRuntimeEventManager eventManager, DMNResult dmnr) {
DMNResultImpl result = (DMNResultImpl) dmnr;
EvaluatorResult inResult = inEvaluator.evaluate(eventManager, result);
if (inResult == null || inResult.getResultType() != ResultType.SUCCESS) {
return inResult;
}
Object inObj = inResult.getResult();
if (inObj instanceof Range) {
inObj = new IterableRange((Range) inObj);
} else if (!(inObj instanceof Iterable)) {
if (inObj == null) {
MsgUtil.reportMessage(logger, DMNMessage.Severity.ERROR, node, result, null, null, Msg.IN_RESULT_NULL, name);
return new EvaluatorResultImpl(null, ResultType.FAILURE);
}
// 10.3.2.9.4 Type conversions "to singleton list"
inObj = Collections.singletonList(inObj);
}
DMNContext previousContext = result.getContext();
DMNContext dmnContext = previousContext.clone();
List<Object> returnList = new ArrayList<>();
try {
result.setContext(dmnContext);
dmnContext.set("partial", returnList);
for (Object item : (Iterable) inObj) {
dmnContext.set(variable, item);
EvaluatorResult evaluate = returnEvaluator.evaluate(eventManager, dmnr);
returnList.add(evaluate.getResult());
}
} finally {
result.setContext(previousContext);
}
if (type instanceof Every) {
for (Object satisfies : returnList) {
if (!(satisfies instanceof Boolean) || ((Boolean) satisfies).booleanValue() == false) {
return new EvaluatorResultImpl(Boolean.FALSE, ResultType.SUCCESS);
}
}
return new EvaluatorResultImpl(Boolean.TRUE, ResultType.SUCCESS);
}
if (type instanceof Some) {
for (Object satisfies : returnList) {
if (satisfies instanceof Boolean && ((Boolean) satisfies).booleanValue() == true) {
return new EvaluatorResultImpl(Boolean.TRUE, ResultType.SUCCESS);
}
}
return new EvaluatorResultImpl(Boolean.FALSE, ResultType.SUCCESS);
}
if (type instanceof For) {
return new EvaluatorResultImpl(returnList, ResultType.SUCCESS);
}
return new EvaluatorResultImpl(null, ResultType.FAILURE);
}
Aggregations