Search in sources :

Example 1 with Some

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

ArrayList (java.util.ArrayList)1 DMNContext (org.kie.dmn.api.core.DMNContext)1 EvaluatorResult (org.kie.dmn.core.api.EvaluatorResult)1 DMNResultImpl (org.kie.dmn.core.impl.DMNResultImpl)1 IterableRange (org.kie.dmn.core.util.IterableRange)1 Range (org.kie.dmn.feel.runtime.Range)1 Every (org.kie.dmn.model.api.Every)1 For (org.kie.dmn.model.api.For)1 Some (org.kie.dmn.model.api.Some)1