This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 99c9527caa [incubator-kie-issues#1528] Implement DMNEvent reporting
inside DMNConditionalEvaluator. (#6124)
99c9527caa is described below
commit 99c9527caa7309f7fbf0da525ac953b07de2af58
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Wed Oct 16 10:14:59 2024 +0200
[incubator-kie-issues#1528] Implement DMNEvent reporting inside
DMNConditionalEvaluator. (#6124)
* [incubator-kie-issues#1528] Implement DMNEvent reporting inside
DMNConditionalEvaluator.
* [incubator-kie-issues#1528] Implement DMNEvent reporting inside
DMNConditionalEvaluator.
* [incubator-kie-issues#1528] Fix RiskScore_Simple.dmn
* [incubator-kie-issues#1528] Fix id used to track conditional evaluation
---------
Co-authored-by: Gabriele-Cardosi <[email protected]>
---
.../org/kie/dmn/api/core}/EvaluatorResult.java | 2 +-
.../event/AfterConditionalEvaluationEvent.java} | 20 +-
.../core/event/AfterEvaluateConditionalEvent.java} | 20 +-
.../api/core/event/DMNRuntimeEventListener.java | 12 ++
.../core/jsr223/JSR223DTExpressionEvaluator.java | 4 +-
.../jsr223/JSR223LiteralExpressionEvaluator.java | 4 +-
.../kie/dmn/core/api/DMNExpressionEvaluator.java | 1 +
.../kie/dmn/core/ast/DMNConditionalEvaluator.java | 39 +++-
.../org/kie/dmn/core/ast/DMNContextEvaluator.java | 4 +-
.../kie/dmn/core/ast/DMNDTExpressionEvaluator.java | 5 +-
.../dmn/core/ast/DMNDecisionServiceEvaluator.java | 4 +-
...DecisionServiceFunctionDefinitionEvaluator.java | 4 +-
.../org/kie/dmn/core/ast/DMNFilterEvaluator.java | 4 +-
.../core/ast/DMNFunctionDefinitionEvaluator.java | 4 +-
.../kie/dmn/core/ast/DMNInvocationEvaluator.java | 4 +-
.../org/kie/dmn/core/ast/DMNIteratorEvaluator.java | 4 +-
.../org/kie/dmn/core/ast/DMNListEvaluator.java | 4 +-
.../core/ast/DMNLiteralExpressionEvaluator.java | 5 +-
.../org/kie/dmn/core/ast/DMNRelationEvaluator.java | 4 +-
.../org/kie/dmn/core/ast/EvaluatorResultImpl.java | 2 +-
.../dmn/core/compiler/DMNEvaluatorCompiler.java | 2 +-
.../DMNAlphaNetworkEvaluatorImpl.java | 2 +-
.../AfterConditionalEvaluationEventImpl.java} | 32 ++-
.../AfterEvaluateConditionalEventImpl.java} | 32 ++-
.../dmn/core/impl/DMNRuntimeEventManagerUtils.java | 18 ++
.../java/org/kie/dmn/core/impl/DMNRuntimeImpl.java | 2 +-
.../AbstractDMNKiePMMLInvocationEvaluator.java | 4 +-
.../core/pmml/AbstractPMMLInvocationEvaluator.java | 4 +-
.../java/org/kie/dmn/core/DMNInputRuntimeTest.java | 58 ++++++
.../test/java/org/kie/dmn/core/DMNRuntimeTest.java | 2 +-
.../dmn/core/ast/DMNConditionalEvaluatorTest.java | 175 ++++++++++++++++
.../kie/dmn/core/ast/DMNContextEvaluatorTest.java | 2 +-
.../core/impl/DMNRuntimeEventManagerUtilsTest.java | 78 +++++++
.../dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java | 2 +-
.../dmn/signavio/MultiInstanceDecisionLogic.java | 4 +-
.../valid_models/DMNv1_5/RiskScore_Simple.dmn | 228 +++++++++++++++++++++
.../core/ast/DMNConditionalEvaluator.java | 4 +-
.../dmn/trisotech/core/ast/DMNFilterEvaluator.java | 5 +-
.../trisotech/core/ast/DMNIteratorEvaluator.java | 4 +-
39 files changed, 693 insertions(+), 115 deletions(-)
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/EvaluatorResult.java
similarity index 96%
copy from
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
copy to
kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/EvaluatorResult.java
index 7ef00e8ac0..078bac9ce0 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
+++
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/EvaluatorResult.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.dmn.core.api;
+package org.kie.dmn.api.core;
public interface EvaluatorResult {
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterConditionalEvaluationEvent.java
similarity index 70%
copy from
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
copy to
kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterConditionalEvaluationEvent.java
index 7ef00e8ac0..06b4050772 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
+++
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterConditionalEvaluationEvent.java
@@ -16,16 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.dmn.core.api;
+package org.kie.dmn.api.core.event;
-public interface EvaluatorResult {
-
- enum ResultType {
- SUCCESS, FAILURE;
- }
-
- ResultType getResultType();
+import org.kie.dmn.api.core.EvaluatorResult;
- Object getResult();
+/**
+ * Event fired after the <b>then/else</b> branches of an <b>if</b> condition
are evaluated
+ * @see AfterEvaluateConditionalEvent
+ */
+public interface AfterConditionalEvaluationEvent {
+
+ EvaluatorResult getEvaluatorResultResult();
+
+ String getExecutedId();
}
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterEvaluateConditionalEvent.java
similarity index 74%
rename from
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
rename to
kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterEvaluateConditionalEvent.java
index 7ef00e8ac0..b0fb5f2c62 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
+++
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterEvaluateConditionalEvent.java
@@ -16,16 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.dmn.core.api;
+package org.kie.dmn.api.core.event;
-public interface EvaluatorResult {
-
- enum ResultType {
- SUCCESS, FAILURE;
- }
-
- ResultType getResultType();
+import org.kie.dmn.api.core.EvaluatorResult;
- Object getResult();
+/**
+ * Event fired after the if <b>if</b> conditional is evaluated
+ *
+ */
+public interface AfterEvaluateConditionalEvent {
+
+ EvaluatorResult getEvaluatorResultResult();
+
+ String getExecutedId();
}
diff --git
a/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
index ddb6e89093..258d3f8b6b 100644
---
a/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
+++
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
@@ -47,4 +47,16 @@ public interface DMNRuntimeEventListener {
default void beforeEvaluateAll(BeforeEvaluateAllEvent event) {}
default void afterEvaluateAll(AfterEvaluateAllEvent event) {}
+
+ /**
+ * Fired after the if <b>if</b> conditional is evaluated
+ *
+ */
+ default void afterEvaluateConditional(AfterEvaluateConditionalEvent event)
{}
+
+ /**
+ * Fired after the <b>then/else</b> branches of an <b>if</b> condition are
evaluated
+ *
+ */
+ default void afterConditionalEvaluation(AfterConditionalEvaluationEvent
event) {}
}
diff --git
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
index ff114e2eb4..afa8009e4d 100644
---
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
+++
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
@@ -35,8 +35,8 @@ import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.api.feel.runtime.events.FEELEvent;
import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.DMNDTExpressionEvaluator;
import org.kie.dmn.core.ast.DMNDTExpressionEvaluator.EventResults;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
index 5b3a530229..48630c6459 100644
---
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
+++
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
@@ -21,8 +21,8 @@ package org.kie.dmn.core.jsr223;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.slf4j.Logger;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
index c40ebcb323..c623764167 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
@@ -19,6 +19,7 @@
package org.kie.dmn.core.api;
import org.kie.dmn.api.core.DMNResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
/**
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
index 7da9445a81..8f89bb1fcb 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
@@ -18,15 +18,20 @@
*/
package org.kie.dmn.core.ast;
+import java.util.HashMap;
+import java.util.Map;
+
import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
+import org.kie.dmn.core.impl.DMNRuntimeEventManagerUtils;
import org.kie.dmn.core.util.Msg;
import org.kie.dmn.core.util.MsgUtil;
+import org.kie.dmn.model.api.Conditional;
import org.kie.dmn.model.api.DMNElement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +45,7 @@ public class DMNConditionalEvaluator implements
DMNExpressionEvaluator {
private DMNExpressionEvaluator elseEvaluator;
private DMNElement node;
private String name;
+ private final Map<DMNExpressionEvaluator, String> evaluatorIdMap = new
HashMap<>();
public DMNConditionalEvaluator(String name, DMNElement node,
DMNExpressionEvaluator ifEvaluator, DMNExpressionEvaluator thenEvaluator,
DMNExpressionEvaluator elseEvaluator) {
this.name = name;
@@ -47,6 +53,14 @@ public class DMNConditionalEvaluator implements
DMNExpressionEvaluator {
this.ifEvaluator = ifEvaluator;
this.thenEvaluator = thenEvaluator;
this.elseEvaluator = elseEvaluator;
+ Conditional conditional = node.getChildren().stream()
+ .filter(c -> c instanceof Conditional)
+ .map(c -> (Conditional) c)
+ .findFirst()
+ .orElseThrow(() -> new RuntimeException("Missing Conditional
element inside " + node));
+ evaluatorIdMap.put(ifEvaluator, conditional.getIf().getId());
+ evaluatorIdMap.put(thenEvaluator, conditional.getThen().getId());
+ evaluatorIdMap.put(elseEvaluator, conditional.getElse().getId());
}
@Override
@@ -54,16 +68,12 @@ public class DMNConditionalEvaluator implements
DMNExpressionEvaluator {
DMNResultImpl result = (DMNResultImpl) dmnr;
EvaluatorResult ifEvaluation = ifEvaluator.evaluate(eventManager,
result);
+ String executedId = evaluatorIdMap.get(ifEvaluator);
+ DMNRuntimeEventManagerUtils.fireAfterEvaluateConditional(eventManager,
ifEvaluation, executedId);
if (ifEvaluation.getResultType().equals(ResultType.SUCCESS)) {
Object ifResult = ifEvaluation.getResult();
- if (ifResult instanceof Boolean) {
- if (((Boolean) ifResult).booleanValue()) {
- return thenEvaluator.evaluate(eventManager, result);
- } else {
- return elseEvaluator.evaluate(eventManager, result);
- }
- } else if (ifResult == null) {
- return elseEvaluator.evaluate(eventManager, result);
+ if (ifResult == null || ifResult instanceof Boolean) {
+ return manageBooleanOrNullIfResult((Boolean) ifResult,
eventManager, result);
} else {
MsgUtil.reportMessage(logger,
DMNMessage.Severity.ERROR,
@@ -80,4 +90,13 @@ public class DMNConditionalEvaluator implements
DMNExpressionEvaluator {
return new EvaluatorResultImpl(null, ResultType.FAILURE);
}
+ protected EvaluatorResult manageBooleanOrNullIfResult(Boolean
booleanResult, DMNRuntimeEventManager eventManager, DMNResultImpl result) {
+ DMNExpressionEvaluator evaluatorToUse = booleanResult != null &&
booleanResult ? thenEvaluator : elseEvaluator;
+
+ EvaluatorResult toReturn = evaluatorToUse.evaluate(eventManager,
result);
+ String executedId = evaluatorIdMap.get(evaluatorToUse);
+
DMNRuntimeEventManagerUtils.fireAfterConditionalEvaluation(eventManager,
toReturn, executedId);
+ return toReturn;
+ }
+
}
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
index 4fbb5c0c64..cedf3e309a 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
@@ -31,8 +31,8 @@ import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.DMNType;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.impl.DMNRuntimeEventManagerUtils;
import org.kie.dmn.core.impl.DMNRuntimeImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
index 7432b3114c..8293f82e67 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
@@ -19,7 +19,6 @@
package org.kie.dmn.core.ast;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -32,8 +31,8 @@ import org.kie.dmn.api.core.ast.DMNNode;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.api.feel.runtime.events.FEELEvent;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.impl.DMNRuntimeEventManagerUtils;
import org.kie.dmn.core.impl.DMNRuntimeImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
index 63a6faf1a7..328ee461b0 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
@@ -33,8 +33,8 @@ import org.kie.dmn.api.core.DMNRuntime;
import org.kie.dmn.api.core.ast.DecisionServiceNode;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.compiler.DMNCompilerImpl;
import org.kie.dmn.core.impl.DMNDecisionResultImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
index 21ee7e0af6..00c2c0f50f 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
@@ -31,8 +31,8 @@ import org.kie.dmn.api.core.DMNType;
import org.kie.dmn.api.core.ast.DecisionServiceNode;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.DMNFunctionDefinitionEvaluator.FormalParameter;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.impl.DMNRuntimeImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
index ccaddaac57..b0120fd57e 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
@@ -28,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.IterableRange;
import org.kie.dmn.core.util.Msg;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
index c7d6469aac..902ff74556 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
@@ -32,8 +32,8 @@ import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
import org.kie.dmn.api.core.ast.DMNNode;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.BaseDMNTypeImpl;
import org.kie.dmn.core.impl.DMNContextFEELCtxWrapper;
import org.kie.dmn.core.impl.DMNResultImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
index ec42aa0f1e..44e166bb22 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
@@ -32,8 +32,8 @@ import org.kie.dmn.api.core.DMNType;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.api.feel.runtime.events.FEELEvent;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNModelImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.Msg;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
index 1abbe18e51..1d73315ede 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
@@ -27,8 +27,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.IterableRange;
import org.kie.dmn.core.util.Msg;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
index f0156ddfa9..0a85a47907 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
@@ -26,8 +26,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.Msg;
import org.kie.dmn.core.util.MsgUtil;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
index 5e42fbc420..07d1f69390 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
@@ -19,7 +19,6 @@
package org.kie.dmn.core.ast;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import org.kie.dmn.api.core.DMNMessage;
@@ -29,8 +28,8 @@ import org.kie.dmn.api.feel.runtime.events.FEELEvent;
import org.kie.dmn.api.feel.runtime.events.FEELEvent.Severity;
import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.Msg;
import org.kie.dmn.core.util.MsgUtil;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
index 1bb21d824b..6a971ffba1 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
@@ -28,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.Msg;
import org.kie.dmn.core.util.MsgUtil;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
index 73b25ca012..ed8eb06399 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
@@ -18,7 +18,7 @@
*/
package org.kie.dmn.core.ast;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
public class EvaluatorResultImpl implements EvaluatorResult {
private final Object result;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
index 9e4ad9d59e..57b4bc8f12 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
@@ -38,7 +38,7 @@ import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
import org.kie.dmn.api.core.ast.DMNNode;
import org.kie.dmn.api.core.ast.DecisionNode;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.core.ast.DMNBaseNode;
import org.kie.dmn.core.ast.DMNConditionalEvaluator;
import org.kie.dmn.core.ast.DMNContextEvaluator;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
index 522eb37743..cbffc8b5c8 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
@@ -27,7 +27,7 @@ import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.api.feel.runtime.events.FEELEvent;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.core.ast.DMNBaseNode;
import org.kie.dmn.core.ast.DMNDTExpressionEvaluator;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterConditionalEvaluationEventImpl.java
similarity index 56%
copy from
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
copy to
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterConditionalEvaluationEventImpl.java
index 73b25ca012..5d3c8eb246 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterConditionalEvaluationEventImpl.java
@@ -16,34 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.dmn.core.ast;
+package org.kie.dmn.core.impl;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
-public class EvaluatorResultImpl implements EvaluatorResult {
- private final Object result;
- private final ResultType code;
+public class AfterConditionalEvaluationEventImpl implements
AfterConditionalEvaluationEvent {
- public EvaluatorResultImpl(Object result, ResultType code) {
- this.result = result;
- this.code = code;
- }
+ private final EvaluatorResult evaluatorResult;
+ private final String executedId;
- @Override
- public Object getResult() {
- return result;
+ public AfterConditionalEvaluationEventImpl(EvaluatorResult
evaluatorResult, String executedId) {
+ this.evaluatorResult = evaluatorResult;
+ this.executedId = executedId;
}
@Override
- public ResultType getResultType() {
- return code;
+ public EvaluatorResult getEvaluatorResultResult() {
+ return evaluatorResult;
}
@Override
- public String toString() {
- return "EvaluatorResultImpl{" +
- "result=" + result +
- ", code=" + code +
- '}';
+ public String getExecutedId() {
+ return executedId;
}
}
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterEvaluateConditionalEventImpl.java
similarity index 56%
copy from
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
copy to
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterEvaluateConditionalEventImpl.java
index 73b25ca012..4aa97cec11 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterEvaluateConditionalEventImpl.java
@@ -16,34 +16,28 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.dmn.core.ast;
+package org.kie.dmn.core.impl;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.EvaluatorResult;
-public class EvaluatorResultImpl implements EvaluatorResult {
- private final Object result;
- private final ResultType code;
+public class AfterEvaluateConditionalEventImpl implements
AfterEvaluateConditionalEvent {
- public EvaluatorResultImpl(Object result, ResultType code) {
- this.result = result;
- this.code = code;
- }
+ private final EvaluatorResult evaluatorResult;
+ private final String executedId;
- @Override
- public Object getResult() {
- return result;
+ public AfterEvaluateConditionalEventImpl(EvaluatorResult evaluatorResult,
String executedId) {
+ this.evaluatorResult = evaluatorResult;
+ this.executedId = executedId;
}
@Override
- public ResultType getResultType() {
- return code;
+ public EvaluatorResult getEvaluatorResultResult() {
+ return evaluatorResult;
}
@Override
- public String toString() {
- return "EvaluatorResultImpl{" +
- "result=" + result +
- ", code=" + code +
- '}';
+ public String getExecutedId() {
+ return executedId;
}
}
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
index 23879b1c7a..d4a65088c7 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
@@ -26,8 +26,10 @@ import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
import org.kie.dmn.api.core.ast.DecisionNode;
import org.kie.dmn.api.core.ast.DecisionServiceNode;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
import org.kie.dmn.api.core.event.AfterEvaluateAllEvent;
import org.kie.dmn.api.core.event.AfterEvaluateBKMEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
import org.kie.dmn.api.core.event.AfterEvaluateContextEntryEvent;
import org.kie.dmn.api.core.event.AfterEvaluateDecisionEvent;
import org.kie.dmn.api.core.event.AfterEvaluateDecisionServiceEvent;
@@ -42,6 +44,7 @@ import
org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
import org.kie.dmn.api.core.event.BeforeInvokeBKMEvent;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -149,6 +152,20 @@ public final class DMNRuntimeEventManagerUtils {
}
}
+ public static void fireAfterEvaluateConditional(DMNRuntimeEventManager
eventManager, EvaluatorResult evaluatorResult, String executedId) {
+ if( eventManager.hasListeners() ) {
+ AfterEvaluateConditionalEvent event = new
AfterEvaluateConditionalEventImpl(evaluatorResult, executedId);
+ notifyListeners(eventManager, l ->
l.afterEvaluateConditional(event));
+ }
+ }
+
+ public static void fireAfterConditionalEvaluation(DMNRuntimeEventManager
eventManager, EvaluatorResult evaluatorResult, String idExecuted) {
+ if( eventManager.hasListeners() ) {
+ AfterConditionalEvaluationEvent event = new
AfterConditionalEvaluationEventImpl(evaluatorResult, idExecuted);
+ notifyListeners(eventManager, l ->
l.afterConditionalEvaluation(event));
+ }
+ }
+
private static void notifyListeners(DMNRuntimeEventManager eventManager,
Consumer<DMNRuntimeEventListener> consumer) {
for( DMNRuntimeEventListener listener : eventManager.getListeners() ) {
try {
@@ -159,6 +176,7 @@ public final class DMNRuntimeEventManagerUtils {
}
}
+
private DMNRuntimeEventManagerUtils() {
// Constructing instances is not allowed for this class
}
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
index 12a3eebea5..203c44f32a 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
@@ -45,7 +45,7 @@ import org.kie.dmn.api.core.ast.InputDataNode;
import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.core.ast.BusinessKnowledgeModelNodeImpl;
import org.kie.dmn.core.ast.DMNBaseNode;
import org.kie.dmn.core.ast.DMNDecisionServiceEvaluator;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
index 584005239c..414d1efbc4 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
@@ -28,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.DMNType;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
import org.kie.dmn.core.impl.CompositeTypeImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
index 25f6b18a96..fb07f4708a 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
@@ -30,8 +30,8 @@ import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.DMNType;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.DMNFunctionDefinitionEvaluator.FormalParameter;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
import org.kie.dmn.core.impl.DMNModelImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
index 4feaac9d57..d89ff7ef4c 100644
---
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
@@ -19,6 +19,7 @@
package org.kie.dmn.core;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -39,7 +40,11 @@ import org.kie.dmn.api.core.ast.DecisionNode;
import org.kie.dmn.api.core.ast.DecisionServiceNode;
import org.kie.dmn.api.core.ast.InputDataNode;
import org.kie.dmn.api.core.ast.ItemDefNode;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.dmn.core.api.DMNFactory;
+import org.kie.dmn.core.api.event.DefaultDMNRuntimeEventListener;
import org.kie.dmn.core.util.DMNRuntimeUtil;
import static org.assertj.core.api.Assertions.assertThat;
@@ -377,6 +382,59 @@ public class DMNInputRuntimeTest extends
BaseInterpretedVsCompiledTest {
assertThat(dmnResult3.getMessages().stream().anyMatch(m ->
m.getMessageType().equals(DMNMessageType.ERROR_EVAL_NODE))).isTrue();
}
+ @ParameterizedTest
+ @MethodSource("params")
+ void conditionalIfCheck(boolean useExecModelCompiler) {
+ init(useExecModelCompiler);
+ final String ifElementId = "_3C702CE4-E5A0-4B6F-905D-C2621FFFA387";
+ final String thenElementId = "_6481FF12-61B5-451C-B775-4143D9B6CD6B";
+ final String elseElementId = "_2CD02CB2-6B56-45C4-B461-405E89D45633";
+ final DMNRuntime runtime =
DMNRuntimeUtil.createRuntime("valid_models/DMNv1_5/RiskScore_Simple.dmn",
this.getClass() );
+
+
+ final List<AfterEvaluateConditionalEvent>
afterEvaluateConditionalEvents = new ArrayList<>();
+ final List<AfterConditionalEvaluationEvent>
afterConditionalEvaluationEvents = new ArrayList<>();
+ runtime.addListener(new DefaultDMNRuntimeEventListener() {
+
+ @Override
+ public void afterEvaluateConditional(AfterEvaluateConditionalEvent
event) {
+ afterEvaluateConditionalEvents.add(event);
+ }
+
+ @Override
+ public void
afterConditionalEvaluation(AfterConditionalEvaluationEvent event) {
+ afterConditionalEvaluationEvents.add(event);
+ }
+
+ });
+ final DMNModel dmnModel = runtime.getModel(
+ "https://kie.org/dmn/_A3317FB1-7BF8-4904-A5F4-2CD63AF3AEC9",
+ "DMN_A77074C1-21FE-4F7E-9753-F84661569AFC" );
+ assertThat(dmnModel).isNotNull();
+
assertThat(dmnModel.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnModel.getMessages())).isFalse();
+
+ final DMNContext ctx1 = runtime.newContext();
+ ctx1.set("Credit Score", "Poor");
+ ctx1.set("DTI", 33);
+ final DMNResult dmnResult1 = runtime.evaluateAll( dmnModel, ctx1 );
+
assertThat(dmnResult1.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnResult1.getMessages())).isFalse();
+ assertThat( dmnResult1.getContext().get( "Risk Score"
)).isEqualTo(BigDecimal.valueOf(50));
+ assertThat(afterEvaluateConditionalEvents).hasSize(1).allMatch(event
-> event.getExecutedId().equals(ifElementId));
+ assertThat(afterConditionalEvaluationEvents).hasSize(1).allMatch(event
-> event.getExecutedId().equals(elseElementId));
+
+ //
+ afterEvaluateConditionalEvents.clear();
+ afterConditionalEvaluationEvents.clear();
+ final DMNContext ctx2 = runtime.newContext();
+ ctx2.set("Credit Score", "Excellent");
+ ctx2.set("DTI", 10);
+ final DMNResult dmnResult2 = runtime.evaluateAll( dmnModel, ctx2 );
+
assertThat(dmnResult2.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnResult1.getMessages())).isFalse();
+ assertThat( dmnResult2.getContext().get( "Risk Score"
)).isEqualTo(BigDecimal.valueOf(20));
+ assertThat(afterEvaluateConditionalEvents).hasSize(1).allMatch(event
-> event.getExecutedId().equals(ifElementId));
+ assertThat(afterConditionalEvaluationEvents).hasSize(1).allMatch(event
-> event.getExecutedId().equals(thenElementId));
+ }
+
@ParameterizedTest
@MethodSource("params")
void dmnInputDataNodeTypeTest(boolean useExecModelCompiler) {
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
index 89e261436f..13a044a657 100644
--- a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
+++ b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
@@ -63,7 +63,7 @@ import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.core.ast.DMNContextEvaluator;
import org.kie.dmn.core.ast.DecisionNodeImpl;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNConditionalEvaluatorTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNConditionalEvaluatorTest.java
new file mode 100644
index 0000000000..4514ce77ce
--- /dev/null
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNConditionalEvaluatorTest.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.core.ast;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
+import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
+import org.kie.dmn.core.api.DMNExpressionEvaluator;
+import org.kie.dmn.core.impl.DMNResultImpl;
+import org.kie.dmn.model.api.ChildExpression;
+import org.kie.dmn.model.api.Conditional;
+import org.kie.dmn.model.api.DMNElement;
+import org.kie.dmn.model.api.DMNModelInstrumentedBase;
+import org.kie.dmn.model.api.Expression;
+import org.mockito.ArgumentCaptor;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DMNConditionalEvaluatorTest {
+
+ private static final String ID_ELEMENT_ID = "ID_ELEMENT_ID";
+ private static final String THEN_ELEMENT_ID = "THEN_ELEMENT_ID";
+ private static final String ELSE_ELEMENT_ID = "ELSE_ELEMENT_ID";
+ private static DMNRuntimeEventManager eventManagerMock;
+ private static DMNRuntimeEventListener spiedListener;
+ private static EvaluatorResult ifEvaluationMock;
+ private static EvaluatorResult thenEvaluationMock;
+ private static EvaluatorResult elseEvaluationMock;
+ private static DMNResultImpl dmnResultMock;
+ private static DMNConditionalEvaluator dmnConditionalEvaluator;
+
+ @BeforeAll
+ static void setUp() {
+ spiedListener = spy(DMNRuntimeEventListener.class);
+ Set<DMNRuntimeEventListener> listeners =
Collections.singleton(spiedListener);
+ eventManagerMock = mock(DMNRuntimeEventManager.class);
+ when(eventManagerMock.hasListeners()).thenReturn(true);
+ when(eventManagerMock.getListeners()).thenReturn(listeners);
+ ifEvaluationMock = mock(EvaluatorResult.class);
+ thenEvaluationMock = mock(EvaluatorResult.class);
+ elseEvaluationMock = mock(EvaluatorResult.class);
+
+ dmnResultMock = mock(DMNResultImpl.class);
+ DMNExpressionEvaluator ifEvaluatorMock =
mock(DMNExpressionEvaluator.class);
+ DMNExpressionEvaluator thenEvaluatorMock =
mock(DMNExpressionEvaluator.class);
+ DMNExpressionEvaluator elseEvaluatorMock =
mock(DMNExpressionEvaluator.class);
+
+ when(ifEvaluatorMock.evaluate(eventManagerMock,
dmnResultMock)).thenReturn(ifEvaluationMock);
+ when(thenEvaluatorMock.evaluate(eventManagerMock,
dmnResultMock)).thenReturn(thenEvaluationMock);
+ when(elseEvaluatorMock.evaluate(eventManagerMock,
dmnResultMock)).thenReturn(elseEvaluationMock);
+
+ ChildExpression ifMock = mock(ChildExpression.class);
+ when(ifMock.getId()).thenReturn(ID_ELEMENT_ID);
+
+ ChildExpression thenMock = mock(ChildExpression.class);
+ when(thenMock.getId()).thenReturn(THEN_ELEMENT_ID);
+
+ ChildExpression elseMock = mock(ChildExpression.class);
+ when(elseMock.getId()).thenReturn(ELSE_ELEMENT_ID);
+
+ Conditional conditionalMock = mock(Conditional.class);
+ when(conditionalMock.getIf()).thenReturn(ifMock);
+ when(conditionalMock.getThen()).thenReturn(thenMock);
+ when(conditionalMock.getElse()).thenReturn(elseMock);
+
+ List<DMNModelInstrumentedBase> nodeChildren =
Collections.singletonList(conditionalMock);
+ DMNElement nodeMock = mock(DMNElement.class);
+ when(nodeMock.getChildren()).thenReturn(nodeChildren);
+
+ dmnConditionalEvaluator = new DMNConditionalEvaluator("name",
+ nodeMock,
+ ifEvaluatorMock,
+
thenEvaluatorMock,
+
elseEvaluatorMock);
+ }
+
+ @BeforeEach
+ void setup() {
+ reset(spiedListener);
+ }
+
+ @Test
+ void evaluateListenerInvocation() {
+
when(ifEvaluationMock.getResultType()).thenReturn(EvaluatorResult.ResultType.FAILURE);
// not interested in
+ // nested execution
+
+ dmnConditionalEvaluator.evaluate(eventManagerMock, dmnResultMock);
+ ArgumentCaptor<AfterEvaluateConditionalEvent>
evaluateConditionalEventArgumentCaptor =
+ ArgumentCaptor.forClass(AfterEvaluateConditionalEvent.class);
+
verify(spiedListener).afterEvaluateConditional(evaluateConditionalEventArgumentCaptor.capture());
+ AfterEvaluateConditionalEvent evaluateConditionalEvent =
evaluateConditionalEventArgumentCaptor.getValue();
+ assertThat(evaluateConditionalEvent).isNotNull();
+
assertThat(evaluateConditionalEvent.getEvaluatorResultResult()).isEqualTo(ifEvaluationMock);
+
assertThat(evaluateConditionalEvent.getExecutedId()).isEqualTo(ID_ELEMENT_ID);
+ }
+
+ @Test
+ void evaluateManageBooleanOrNullIfResultInvocation() {
+
when(ifEvaluationMock.getResultType()).thenReturn(EvaluatorResult.ResultType.SUCCESS);
+ when(ifEvaluationMock.getResult()).thenReturn(true);
+
+ DMNConditionalEvaluator spiedDmnConditionalEvaluator =
spy(dmnConditionalEvaluator);
+ spiedDmnConditionalEvaluator.evaluate(eventManagerMock, dmnResultMock);
+ verify(spiedDmnConditionalEvaluator).manageBooleanOrNullIfResult(true,
eventManagerMock, dmnResultMock);
+ }
+
+ @Test
+ void manageBooleanOrNullIfResultWithTrue() {
+ dmnConditionalEvaluator.manageBooleanOrNullIfResult(true,
eventManagerMock, dmnResultMock);
+ ArgumentCaptor<AfterConditionalEvaluationEvent>
afterConditionalEvaluationEventArgumentCaptor =
+ ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+
verify(spiedListener).afterConditionalEvaluation(afterConditionalEvaluationEventArgumentCaptor.capture());
+ AfterConditionalEvaluationEvent conditionalEvaluationEvent =
+ afterConditionalEvaluationEventArgumentCaptor.getValue();
+ assertThat(conditionalEvaluationEvent).isNotNull();
+
assertThat(conditionalEvaluationEvent.getEvaluatorResultResult()).isEqualTo(thenEvaluationMock);
+
assertThat(conditionalEvaluationEvent.getExecutedId()).isEqualTo(THEN_ELEMENT_ID);
+ }
+
+ @Test
+ void manageBooleanOrNullIfResultWithFalse() {
+ dmnConditionalEvaluator.manageBooleanOrNullIfResult(false,
eventManagerMock, dmnResultMock);
+ ArgumentCaptor<AfterConditionalEvaluationEvent>
afterConditionalEvaluationEventArgumentCaptor =
+ ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+
verify(spiedListener).afterConditionalEvaluation(afterConditionalEvaluationEventArgumentCaptor.capture());
+ AfterConditionalEvaluationEvent conditionalEvaluationEvent =
+ afterConditionalEvaluationEventArgumentCaptor.getValue();
+ assertThat(conditionalEvaluationEvent).isNotNull();
+
assertThat(conditionalEvaluationEvent.getEvaluatorResultResult()).isEqualTo(elseEvaluationMock);
+
assertThat(conditionalEvaluationEvent.getExecutedId()).isEqualTo(ELSE_ELEMENT_ID);
+ }
+
+ @Test
+ void manageBooleanOrNullIfResultWithNull() {
+ dmnConditionalEvaluator.manageBooleanOrNullIfResult(null,
eventManagerMock, dmnResultMock);
+ ArgumentCaptor<AfterConditionalEvaluationEvent>
afterConditionalEvaluationEventArgumentCaptor =
+ ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+
verify(spiedListener).afterConditionalEvaluation(afterConditionalEvaluationEventArgumentCaptor.capture());
+ AfterConditionalEvaluationEvent conditionalEvaluationEvent =
+ afterConditionalEvaluationEventArgumentCaptor.getValue();
+ assertThat(conditionalEvaluationEvent).isNotNull();
+
assertThat(conditionalEvaluationEvent.getEvaluatorResultResult()).isEqualTo(elseEvaluationMock);
+
assertThat(conditionalEvaluationEvent.getExecutedId()).isEqualTo(ELSE_ELEMENT_ID);
+ }
+}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
index 066c543943..ab1f01394f 100644
---
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
@@ -31,7 +31,7 @@ import org.kie.dmn.api.core.DMNRuntime;
import org.kie.dmn.api.core.ast.DecisionNode;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.core.impl.DMNDecisionResultImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.impl.DMNResultImplFactory;
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtilsTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtilsTest.java
new file mode 100644
index 0000000000..1a78b34fe8
--- /dev/null
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtilsTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.core.impl;
+
+import java.util.Collections;
+import java.util.Set;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
+import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
+import org.mockito.ArgumentCaptor;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DMNRuntimeEventManagerUtilsTest {
+
+ private static DMNRuntimeEventManager eventManagerMock;
+ private static DMNRuntimeEventListener spiedListener;
+
+ @BeforeAll
+ static void setUp() {
+ spiedListener = spy(DMNRuntimeEventListener.class);
+ Set<DMNRuntimeEventListener> listeners =
Collections.singleton(spiedListener);
+ eventManagerMock = mock(DMNRuntimeEventManager.class);
+ when(eventManagerMock.hasListeners()).thenReturn(true);
+ when(eventManagerMock.getListeners()).thenReturn(listeners);
+ }
+
+ @Test
+ void fireAfterEvaluateConditional() {
+ EvaluatorResult evaluatorResult = mock(EvaluatorResult.class);
+ String executedId = "EXECUTED_ID";
+
DMNRuntimeEventManagerUtils.fireAfterEvaluateConditional(eventManagerMock,
evaluatorResult, executedId);
+ ArgumentCaptor<AfterEvaluateConditionalEvent>
evaluateConditionalEventArgumentCaptor =
ArgumentCaptor.forClass(AfterEvaluateConditionalEvent.class);
+ verify(spiedListener).afterEvaluateConditional
(evaluateConditionalEventArgumentCaptor.capture());
+ AfterEvaluateConditionalEvent evaluateConditionalEvent =
evaluateConditionalEventArgumentCaptor.getValue();
+ assertThat(evaluateConditionalEvent).isNotNull();
+
assertThat(evaluateConditionalEvent.getEvaluatorResultResult()).isEqualTo(evaluatorResult);
+
assertThat(evaluateConditionalEvent.getExecutedId()).isEqualTo(executedId);
+ }
+
+ @Test
+ void fireAfterConditionalEvaluation() {
+ EvaluatorResult evaluatorResult = mock(EvaluatorResult.class);
+ String executedId = "EXECUTED_ID";
+
DMNRuntimeEventManagerUtils.fireAfterConditionalEvaluation(eventManagerMock,
evaluatorResult, executedId);
+ ArgumentCaptor<AfterConditionalEvaluationEvent>
conditionalEvaluationEventArgumentCaptor =
ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+ verify(spiedListener).afterConditionalEvaluation
(conditionalEvaluationEventArgumentCaptor.capture());
+ AfterConditionalEvaluationEvent evaluateConditionalEvent =
conditionalEvaluationEventArgumentCaptor.getValue();
+ assertThat(evaluateConditionalEvent).isNotNull();
+
assertThat(evaluateConditionalEvent.getEvaluatorResultResult()).isEqualTo(evaluatorResult);
+
assertThat(evaluateConditionalEvent.getExecutedId()).isEqualTo(executedId);
+ }
+}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
b/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
index b5443e3e86..e562d67e1a 100644
---
a/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
+++
b/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
@@ -58,7 +58,7 @@ import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
import org.kie.dmn.core.ast.DMNContextEvaluator;
import org.kie.dmn.core.ast.DecisionNodeImpl;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git
a/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
b/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
index 542b7c3ff9..aab6c9897d 100644
---
a/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
+++
b/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
@@ -33,8 +33,8 @@ import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.ast.DMNNode;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.DMNBaseNode;
import org.kie.dmn.core.ast.DecisionNodeImpl;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/RiskScore_Simple.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/RiskScore_Simple.dmn
new file mode 100644
index 0000000000..ea0d40e36a
--- /dev/null
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/RiskScore_Simple.dmn
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<definitions xmlns="https://www.omg.org/spec/DMN/20230324/MODEL/"
xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
xmlns:kie="https://kie.org/dmn/extensions/1.0"
expressionLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/"
namespace="https://kie.org/dmn/_A3317FB1-7BF8-4904-A5F4-2CD63AF3AEC9"
id="_49F637EB-0176-4A4A-9E4A-CBE3A969721E"
name="DMN_A77074C1-21FE-4F7E-9753-F846 [...]
+ <itemDefinition id="_77090217-FF01-45CD-A561-C96D420D407A" name="Credit
Score Rating" isCollection="false"
typeLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/">
+ <typeRef>string</typeRef>
+ <typeConstraint id="_9DB25671-9A5B-44E4-ABE6-449C844D0001"
kie:constraintType="enumeration">
+ <text>"Poor", "Fair", "Excellent"</text>
+ </typeConstraint>
+ </itemDefinition>
+ <itemDefinition id="_22017A5D-692E-4DB4-BAE2-E99E88B4572F" name="Risk Level"
isCollection="false" typeLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/">
+ <typeRef>string</typeRef>
+ <typeConstraint id="_03B1B44C-3CEA-479E-BA26-8B07F3A68FB9"
kie:constraintType="enumeration">
+ <text>"High", "Medium", "Low"</text>
+ </typeConstraint>
+ </itemDefinition>
+ <itemDefinition id="_21DBC185-4698-4F3C-9F25-5822307020EC" name="Loan
Pre-Qualification" isCollection="false"
typeLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/">
+ <typeRef>string</typeRef>
+ <typeConstraint id="_AD5868E3-2107-438F-B5A2-CFD92F03F195"
kie:constraintType="enumeration">
+ <text>"Qualified", "Not Qualified"</text>
+ </typeConstraint>
+ </itemDefinition>
+ <inputData name="Credit Score" id="_D2C418A0-2BF8-4984-83C9-E53B9EF4EBA7">
+ <variable name="Credit Score" id="_BE4CFC54-DF9A-43B5-BB55-D5AED6674702"
typeRef="Credit Score Rating" />
+ </inputData>
+ <inputData name="DTI" id="_7570C90B-8161-4F3B-B663-BDD72CEA6F69">
+ <variable name="DTI" id="_65E61476-DD45-4273-BC21-9CAD344B2506"
typeRef="number" />
+ </inputData>
+ <decision name="Risk Score" id="_6C207FD6-14EA-4480-A90D-074ABC97B54B">
+ <variable name="Risk Score" id="_9D33E1E8-4F9D-4EE3-93F9-B626A24347B8"
typeRef="number" />
+ <informationRequirement id="_2A94FC78-2E41-4674-B59D-88DF61B740CC">
+ <requiredInput href="#_D2C418A0-2BF8-4984-83C9-E53B9EF4EBA7" />
+ </informationRequirement>
+ <informationRequirement id="_33CC1417-78FB-483C-9C6A-05AB2541F3A3">
+ <requiredInput href="#_7570C90B-8161-4F3B-B663-BDD72CEA6F69" />
+ </informationRequirement>
+ <decisionTable id="_A7CCB9B9-9EF2-45B9-981B-623F2EA38C8A"
hitPolicy="COLLECT" label="Risk Score" aggregation="SUM" typeRef="number">
+ <input id="_0E464A23-DDD9-49D6-B538-53BDFE6BCFA8">
+ <inputExpression id="_7E530C61-58CF-41A4-AD89-2EEDEA2AF87D"
typeRef="Credit Score Rating">
+ <text>Credit Score</text>
+ </inputExpression>
+ </input>
+ <input id="_4ED67727-8A46-44AD-8E83-0930686523F5">
+ <inputExpression id="_A0CEB857-D309-4C6B-AFA9-AD0DCD294A14"
typeRef="number">
+ <text>DTI</text>
+ </inputExpression>
+ </input>
+ <output id="_8694B6C1-E07D-49A0-B77B-B8BF99C85B1D" />
+ <annotation name="Annotations" />
+ <rule id="_1578BD9E-2BF9-4BFC-8956-1A736959C937">
+ <inputEntry id="_57DAA79A-4929-4D0C-A7D1-E7BA81674B8B">
+ <text>"Poor"</text>
+ </inputEntry>
+ <inputEntry id="_E2D67EAF-9023-4657-A852-7AFF89DDFF26">
+ <text>-</text>
+ </inputEntry>
+ <outputEntry id="_93601F57-F06C-4AD2-9BA0-6933AD8F6007">
+ <text>30</text>
+ </outputEntry>
+ <annotationEntry>
+ <text>// Your annotations here</text>
+ </annotationEntry>
+ </rule>
+ <rule id="_7A520705-7932-4DCD-B5CF-83E221C22C67">
+ <inputEntry id="_0251FFBE-776E-445C-9D21-1016D567E4B2">
+ <text>"Fair"</text>
+ </inputEntry>
+ <inputEntry id="_49919773-5835-4B07-B904-4C8AE17DFC9D">
+ <text>-</text>
+ </inputEntry>
+ <outputEntry id="_6B3C183E-44C5-4417-867D-D0E07BE873F2">
+ <text>20</text>
+ </outputEntry>
+ <annotationEntry>
+ <text></text>
+ </annotationEntry>
+ </rule>
+ <rule id="_31CD7AA3-A806-4E7E-B512-821F82043620">
+ <inputEntry id="_35282AEA-88C9-487E-9351-0C41DFD47EDD">
+ <text>"Excellent"</text>
+ </inputEntry>
+ <inputEntry id="_2A826B63-ACD7-4FED-95F5-A00BFD9ED6A0">
+ <text>-</text>
+ </inputEntry>
+ <outputEntry id="_6F982961-2952-4D54-8FA8-C81635E32D9B">
+ <text>10</text>
+ </outputEntry>
+ <annotationEntry>
+ <text></text>
+ </annotationEntry>
+ </rule>
+ <rule id="_01139A03-3E52-463E-B021-D71C87D85D19">
+ <inputEntry id="_AEB5E0A8-6DA5-4164-A604-B0F7080052F6">
+ <text>-</text>
+ </inputEntry>
+ <inputEntry id="_19A046D5-7580-46EB-85BB-94772286F91E">
+ <text>> 40</text>
+ </inputEntry>
+ <outputEntry id="_996CE47F-5F6D-445C-8B3B-E2133B53B4C9">
+ <text>30</text>
+ </outputEntry>
+ <annotationEntry>
+ <text></text>
+ </annotationEntry>
+ </rule>
+ <rule id="_2545E1A8-93D3-4C8A-A0ED-8AD8B10A58F9">
+ <inputEntry id="_C567462E-0C4A-4451-83A2-9C8F29F186DE">
+ <text>-</text>
+ </inputEntry>
+ <inputEntry id="_D286A02E-A286-4C12-B660-3E5803BF060C">
+ <text>[20..40]</text>
+ </inputEntry>
+ <outputEntry id="_D4114EE4-CD1B-476C-B82B-CFEC94C8A5BD">
+ <text>20</text>
+ </outputEntry>
+ <annotationEntry>
+ <text></text>
+ </annotationEntry>
+ </rule>
+ <rule id="_510A50DA-D5A4-4F06-B0BE-7F8F2AA83740">
+ <inputEntry id="_682B0AF4-E50B-48D9-9DC9-BF5E4DC1BA7F">
+ <text>-</text>
+ </inputEntry>
+ <inputEntry id="_31ED8040-8FFB-47CE-9688-095652B48A56">
+ <text>< 20</text>
+ </inputEntry>
+ <outputEntry id="_34B5B114-3860-4661-8736-6690FA3EED6A">
+ <text>10</text>
+ </outputEntry>
+ <annotationEntry>
+ <text></text>
+ </annotationEntry>
+ </rule>
+ </decisionTable>
+ </decision>
+ <decision name="Loan Pre-Qualification"
id="_A1236581-4334-43F1-82A0-72CE204F07F9">
+ <variable name="Loan Pre-Qualification"
id="_5144C9A3-5B8F-45F0-9197-85AC4A9101FF" typeRef="Loan Pre-Qualification" />
+ <informationRequirement id="_071A7C19-6F4B-4383-837D-F3AE68D790CA">
+ <requiredDecision href="#_6C207FD6-14EA-4480-A90D-074ABC97B54B" />
+ </informationRequirement>
+ <conditional id="_A80832EF-8F9C-4638-B5FB-047210860DF2" label="Loan
Pre-Qualification" typeRef="Loan Pre-Qualification">
+ <if id="_3C702CE4-E5A0-4B6F-905D-C2621FFFA387">
+ <literalExpression id="_CA44F978-C3A3-4D65-BABB-8BDA2FBB1074"
label="Expression Name">
+ <text>Risk Score <= 30</text>
+ </literalExpression>
+ </if>
+ <then id="_6481FF12-61B5-451C-B775-4143D9B6CD6B">
+ <literalExpression id="_000EE7D4-6DAB-4BC1-8A5A-59E1E9E61B21"
label="Expression Name">
+ <text>"Qualified" </text>
+ </literalExpression>
+ </then>
+ <else id="_2CD02CB2-6B56-45C4-B461-405E89D45633">
+ <literalExpression id="_EDEFF23B-55B9-4D8C-AB04-8E49F642CB22"
label="Expression Name">
+ <text>"Not Qualified"</text>
+ </literalExpression>
+ </else>
+ </conditional>
+ </decision>
+ <dmndi:DMNDI>
+ <dmndi:DMNDiagram id="_5E59BB13-A55B-4CCD-A809-5AF1453F9497" name="Default
DRD" useAlternativeInputDataShape="false">
+ <di:extension>
+ <kie:ComponentsWidthsExtension>
+ <kie:ComponentWidths
dmnElementRef="_6296756B-FA04-4FF7-A57A-544032479953">
+ <kie:width>60</kie:width>
+ <kie:width>145</kie:width>
+ <kie:width>118</kie:width>
+ <kie:width>118</kie:width>
+ <kie:width>240</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_27AD330E-AE19-4C6A-957F-BEA0298BE91B">
+ <kie:width>120</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_9F210198-9DE3-4187-919C-0C0438B0329D">
+ <kie:width>60</kie:width>
+ <kie:width>145</kie:width>
+ <kie:width>118</kie:width>
+ <kie:width>118</kie:width>
+ <kie:width>240</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_61B65CB0-E875-402F-8523-D0B96842D149">
+ <kie:width>190</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_21462997-F64F-4B7F-ABC8-9E590D24792F">
+ <kie:width>190</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_A7CCB9B9-9EF2-45B9-981B-623F2EA38C8A">
+ <kie:width>60</kie:width>
+ <kie:width>145</kie:width>
+ <kie:width>118</kie:width>
+ <kie:width>118</kie:width>
+ <kie:width>240</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_CA44F978-C3A3-4D65-BABB-8BDA2FBB1074">
+ <kie:width>232</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_EDEFF23B-55B9-4D8C-AB04-8E49F642CB22">
+ <kie:width>232</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_000EE7D4-6DAB-4BC1-8A5A-59E1E9E61B21">
+ <kie:width>190</kie:width>
+ </kie:ComponentWidths>
+ </kie:ComponentsWidthsExtension>
+ </di:extension>
+ <dmndi:DMNShape id="_A81B6612-69E6-4F16-9757-BF7B4F303F31"
dmnElementRef="_D2C418A0-2BF8-4984-83C9-E53B9EF4EBA7" isCollapsed="false"
isListedInputData="false">
+ <dc:Bounds x="100" y="340" width="160" height="80" />
+ </dmndi:DMNShape>
+ <dmndi:DMNShape id="_B56A8877-2ED9-4EC8-8892-85AC3E43EAFC"
dmnElementRef="_7570C90B-8161-4F3B-B663-BDD72CEA6F69" isCollapsed="false"
isListedInputData="false">
+ <dc:Bounds x="300" y="340" width="160" height="80" />
+ </dmndi:DMNShape>
+ <dmndi:DMNShape id="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60"
dmnElementRef="_6C207FD6-14EA-4480-A90D-074ABC97B54B" isCollapsed="false"
isListedInputData="false">
+ <dc:Bounds x="200" y="180" width="160" height="80" />
+ </dmndi:DMNShape>
+ <dmndi:DMNEdge id="_C2F3DE23-1403-437E-8BCE-3BA2ED0DD3B3"
dmnElementRef="_2A94FC78-2E41-4674-B59D-88DF61B740CC"
sourceElement="_A81B6612-69E6-4F16-9757-BF7B4F303F31"
targetElement="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60">
+ <di:waypoint x="180" y="380" />
+ <di:waypoint x="280" y="260" />
+ </dmndi:DMNEdge>
+ <dmndi:DMNEdge id="_998389B1-5594-4995-9B82-1805BF2AD884"
dmnElementRef="_33CC1417-78FB-483C-9C6A-05AB2541F3A3"
sourceElement="_B56A8877-2ED9-4EC8-8892-85AC3E43EAFC"
targetElement="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60">
+ <di:waypoint x="380" y="380" />
+ <di:waypoint x="280" y="260" />
+ </dmndi:DMNEdge>
+ <dmndi:DMNShape id="_AE60ECB8-640A-4386-9D92-C5050242BA46"
dmnElementRef="_A1236581-4334-43F1-82A0-72CE204F07F9" isCollapsed="false"
isListedInputData="false">
+ <dc:Bounds x="200" y="20" width="160" height="80" />
+ </dmndi:DMNShape>
+ <dmndi:DMNEdge id="_9D96AB19-6CE1-42DD-88F6-7D6216CBDF9F"
dmnElementRef="_071A7C19-6F4B-4383-837D-F3AE68D790CA"
sourceElement="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60"
targetElement="_AE60ECB8-640A-4386-9D92-C5050242BA46">
+ <di:waypoint x="280" y="220" />
+ <di:waypoint x="280" y="100" />
+ </dmndi:DMNEdge>
+ </dmndi:DMNDiagram>
+ </dmndi:DMNDI>
+</definitions>
diff --git
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
index 4a2a1e1558..7821ce3672 100644
---
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
+++
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
@@ -22,8 +22,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.MsgUtil;
diff --git
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
index 167a6bd01a..f5482b7b7c 100644
---
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
+++
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
@@ -18,7 +18,6 @@
*/
package org.kie.dmn.trisotech.core.ast;
-import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -29,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.MsgUtil;
diff --git
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
index 0c5a30c0eb..6536b46adb 100644
---
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
+++
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
@@ -26,8 +26,8 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
import org.kie.dmn.core.ast.EvaluatorResultImpl;
import org.kie.dmn.core.impl.DMNResultImpl;
import org.kie.dmn.core.util.MsgUtil;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]