Search in sources :

Example 6 with For

use of org.kie.dmn.model.api.For 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);
}
Also used : DMNResultImpl(org.kie.dmn.core.impl.DMNResultImpl) EvaluatorResult(org.kie.dmn.core.api.EvaluatorResult) DMNContext(org.kie.dmn.api.core.DMNContext) ArrayList(java.util.ArrayList) For(org.kie.dmn.model.api.For) Range(org.kie.dmn.feel.runtime.Range) IterableRange(org.kie.dmn.core.util.IterableRange) Some(org.kie.dmn.model.api.Some) Every(org.kie.dmn.model.api.Every) IterableRange(org.kie.dmn.core.util.IterableRange)

Aggregations

For (org.kie.dmn.model.api.For)6 ArrayList (java.util.ArrayList)4 DMNType (org.kie.dmn.api.core.DMNType)4 DMNExpressionEvaluator (org.kie.dmn.core.api.DMNExpressionEvaluator)4 EvaluatorResult (org.kie.dmn.core.api.EvaluatorResult)4 DMNIteratorEvaluator (org.kie.dmn.core.ast.DMNIteratorEvaluator)4 BaseDMNTypeImpl (org.kie.dmn.core.impl.BaseDMNTypeImpl)4 Collections (java.util.Collections)3 List (java.util.List)3 Entry (java.util.Map.Entry)3 Objects (java.util.Objects)3 Optional (java.util.Optional)3 UUID (java.util.UUID)3 Collectors (java.util.stream.Collectors)3 Collectors.toList (java.util.stream.Collectors.toList)3 QName (javax.xml.namespace.QName)3 Resource (org.kie.api.io.Resource)3 DMNMessage (org.kie.dmn.api.core.DMNMessage)3 BusinessKnowledgeModelNode (org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode)3 DMNNode (org.kie.dmn.api.core.ast.DMNNode)3