Skip to content

Commit

Permalink
[incubator-kie-issues#1791] Moving evaluationHitIds map inside JITDMN…
Browse files Browse the repository at this point in the history
…DecisionResult (apache#2185)

* [incubator-kie-issues#1791] Moving evaluationHitIds map inside JITDMNDecisionResult. Add/modify test

* [incubator-kie-issues#1791] Fixing serialization/deserialization. Adding tests

* [incubator-kie-issues#1791] Fixing duplicated count of evaluation hit ids

---------

Co-authored-by: Gabriele-Cardosi <[email protected]>
  • Loading branch information
2 people authored and rgdoliveira committed Feb 10, 2025
1 parent c47fdd3 commit 725a3ed
Show file tree
Hide file tree
Showing 8 changed files with 932 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,13 @@ public JITDMNResult evaluate(Map<String, Object> context) {
DMNContext dmnContext =
new DynamicDMNContextBuilder(dmnRuntime.newContext(), dmnModel).populateContextWith(context);
DMNResult dmnResult = dmnRuntime.evaluateAll(dmnModel, dmnContext);
Optional<Map<String, Integer>> evaluationHitIds = dmnRuntime.getListeners().stream()
Optional<Map<String, Map<String, Integer>>> decisionEvaluationHitIdsMap = dmnRuntime.getListeners().stream()
.filter(JITDMNListener.class::isInstance)
.findFirst()
.map(JITDMNListener.class::cast)
.map(JITDMNListener::getEvaluationHitIds);
return new JITDMNResult(getNamespace(), getName(), dmnResult, evaluationHitIds.orElse(Collections.emptyMap()));
.map(JITDMNListener::getDecisionEvaluationHitIdsMap);
return new JITDMNResult(getNamespace(), getName(), dmnResult,
decisionEvaluationHitIdsMap.orElse(Collections.emptyMap()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
*/
package org.kie.kogito.jitexecutor.dmn;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

Expand All @@ -36,14 +38,14 @@

public class JITDMNListener implements DMNRuntimeEventListener {

private final Map<String, Integer> evaluationHitIds = new HashMap<>();
private final Map<String, Map<String, Integer>> decisionEvaluationHitIdsMap = new HashMap<>();

private static final Logger LOGGER = LoggerFactory.getLogger(JITDMNListener.class);

@Override
public void afterEvaluateDecisionTable(AfterEvaluateDecisionTableEvent event) {
logEvent(event);
event.getSelectedIds().forEach(s -> evaluationHitIds.compute(s, (k, v) -> v == null ? 1 : v + 1));
populateDecisionAndEvaluationHitIdMaps(event.getNodeName(), event.getSelectedIds());
}

@Override
Expand Down Expand Up @@ -79,11 +81,22 @@ public void afterEvaluateAll(AfterEvaluateAllEvent event) {
@Override
public void afterConditionalEvaluation(AfterConditionalEvaluationEvent event) {
logEvent(event);
evaluationHitIds.compute(event.getExecutedId(), (k, v) -> v == null ? 1 : v + 1);
populateDecisionAndEvaluationHitIdMaps(event.getNodeName(), Collections.singleton(event.getExecutedId()));
}

public Map<String, Integer> getEvaluationHitIds() {
return evaluationHitIds;
public Map<String, Map<String, Integer>> getDecisionEvaluationHitIdsMap() {
return decisionEvaluationHitIdsMap;
}

private void populateDecisionAndEvaluationHitIdMaps(String decisionName, Collection<String> idsToStore) {
Map<String, Integer> evaluationHitIds;
if (decisionEvaluationHitIdsMap.containsKey(decisionName)) {
evaluationHitIds = decisionEvaluationHitIdsMap.get(decisionName);
} else {
evaluationHitIds = new HashMap<>();
decisionEvaluationHitIdsMap.put(decisionName, evaluationHitIds);
}
idsToStore.forEach(s -> evaluationHitIds.compute(s, (k, v) -> v == null ? 1 : v + 1));
}

private void logEvent(DMNEvent toLog) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.kie.dmn.api.core.DMNDecisionResult;
import org.kie.dmn.api.core.DMNMessage;
Expand All @@ -39,17 +41,24 @@ public class JITDMNDecisionResult implements Serializable,

private DecisionEvaluationStatus status;

private Map<String, Integer> evaluationHitIds;

public JITDMNDecisionResult() {
// Intentionally blank.
}

public static JITDMNDecisionResult of(DMNDecisionResult value) {
return of(value, Collections.emptyMap());
}

public static JITDMNDecisionResult of(DMNDecisionResult value, Map<String, Integer> decisionEvaluationHitIdsMap) {
JITDMNDecisionResult res = new JITDMNDecisionResult();
res.decisionId = value.getDecisionId();
res.decisionName = value.getDecisionName();
res.setResult(value.getResult());
res.setMessages(value.getMessages());
res.status = value.getEvaluationStatus();
res.evaluationHitIds = decisionEvaluationHitIdsMap;
return res;
}

Expand Down Expand Up @@ -100,6 +109,14 @@ public void setMessages(List<DMNMessage> messages) {
}
}

public Map<String, Integer> getEvaluationHitIds() {
return evaluationHitIds;
}

public void setEvaluationHitIds(Map<String, Integer> evaluationHitIds) {
this.evaluationHitIds = evaluationHitIds;
}

@Override
public boolean hasErrors() {
return messages != null && messages.stream().anyMatch(m -> m.getSeverity() == DMNMessage.Severity.ERROR);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ public class JITDMNResult implements Serializable,

private Map<String, JITDMNDecisionResult> decisionResults = new HashMap<>();

private Map<String, Integer> evaluationHitIds;

public JITDMNResult() {
// Intentionally blank.
}
Expand All @@ -60,13 +58,12 @@ public JITDMNResult(String namespace, String modelName, org.kie.dmn.api.core.DMN
this(namespace, modelName, dmnResult, Collections.emptyMap());
}

public JITDMNResult(String namespace, String modelName, org.kie.dmn.api.core.DMNResult dmnResult, Map<String, Integer> evaluationHitIds) {
public JITDMNResult(String namespace, String modelName, org.kie.dmn.api.core.DMNResult dmnResult, Map<String, Map<String, Integer>> decisionEvaluationHitIdsMap) {
this.namespace = namespace;
this.modelName = modelName;
this.setDmnContext(dmnResult.getContext().getAll());
this.setMessages(dmnResult.getMessages());
this.setDecisionResults(dmnResult.getDecisionResults());
this.evaluationHitIds = evaluationHitIds;
this.internalSetDecisionResults(dmnResult.getDecisionResults(), decisionEvaluationHitIdsMap);
}

public String getNamespace() {
Expand Down Expand Up @@ -110,14 +107,6 @@ public void setDecisionResults(List<? extends DMNDecisionResult> decisionResults
}
}

public Map<String, Integer> getEvaluationHitIds() {
return evaluationHitIds;
}

public void setEvaluationHitIds(Map<String, Integer> evaluationHitIds) {
this.evaluationHitIds = evaluationHitIds;
}

@JsonIgnore
@Override
public DMNContext getContext() {
Expand Down Expand Up @@ -167,7 +156,13 @@ public String toString() {
.append(", dmnContext=").append(dmnContext)
.append(", messages=").append(messages)
.append(", decisionResults=").append(decisionResults)
.append(", evaluationHitIds=").append(evaluationHitIds)
.append("]").toString();
}

private void internalSetDecisionResults(List<? extends DMNDecisionResult> decisionResults, Map<String, Map<String, Integer>> decisionEvaluationHitIdsMap) {
this.decisionResults = new HashMap<>();
for (DMNDecisionResult dr : decisionResults) {
this.decisionResults.put(dr.getDecisionId(), JITDMNDecisionResult.of(dr, decisionEvaluationHitIdsMap.getOrDefault(dr.getDecisionName(), Collections.emptyMap())));
}
}
}
Loading

0 comments on commit 725a3ed

Please sign in to comment.