This is an automated email from the ASF dual-hosted git repository.
pefernan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new b3aca2e9b kie-issues#677: Data Index shows error when querying for
ProcessInstancess that contain nodes with null enter property. (#1926)
b3aca2e9b is described below
commit b3aca2e9b9660171b32998a0e85b55a204826fcc
Author: Pere Fernández <[email protected]>
AuthorDate: Thu Nov 30 21:13:50 2023 +0100
kie-issues#677: Data Index shows error when querying for ProcessInstancess
that contain nodes with null enter property. (#1926)
---
.../mapper/ProcessInstanceNodeDataEventMerger.java | 11 +-
.../ProcessInstanceNodeDataEventMergerTest.java | 115 +++++++++++++++++++++
.../service/json/ProcessInstanceMetaMapper.java | 3 +-
3 files changed, 125 insertions(+), 4 deletions(-)
diff --git
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMerger.java
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMerger.java
index 1d1eeea8a..051d933c8 100644
---
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMerger.java
+++
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMerger.java
@@ -36,6 +36,8 @@ import org.kie.kogito.index.model.ProcessInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static
org.kie.kogito.event.process.ProcessInstanceNodeEventBody.EVENT_TYPE_ENTER;
+import static
org.kie.kogito.event.process.ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT;
import static org.kie.kogito.index.DateTimeUtils.toZonedDateTime;
@ApplicationScoped
@@ -65,11 +67,16 @@ public class ProcessInstanceNodeDataEventMerger implements
ProcessInstanceEventM
nodeInstance.setName(body.getNodeName());
nodeInstance.setType(body.getNodeType());
switch (body.getEventType()) {
- case 1:
+ case EVENT_TYPE_ENTER:
nodeInstance.setEnter(toZonedDateTime(body.getEventDate()));
break;
- case 2:
+ case EVENT_TYPE_EXIT:
nodeInstance.setExit(toZonedDateTime(body.getEventDate()));
+
+ if (nodeInstance.getEnter() == null) {
+ // Adding a default enter time for exit events triggered
by EventNodeInstances
+ nodeInstance.setEnter(nodeInstance.getExit());
+ }
break;
}
nodeInstances.add(nodeInstance);
diff --git
a/data-index/data-index-common/src/test/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMergerTest.java
b/data-index/data-index-common/src/test/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMergerTest.java
new file mode 100644
index 000000000..331376590
--- /dev/null
+++
b/data-index/data-index-common/src/test/java/org/kie/kogito/index/event/mapper/ProcessInstanceNodeDataEventMergerTest.java
@@ -0,0 +1,115 @@
+package org.kie.kogito.index.event.mapper;
+
+import java.time.ZonedDateTime;
+import java.util.Date;
+import java.util.HashMap;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.kie.kogito.event.process.ProcessInstanceNodeDataEvent;
+import org.kie.kogito.event.process.ProcessInstanceNodeEventBody;
+import org.kie.kogito.index.model.NodeInstance;
+import org.kie.kogito.index.model.ProcessInstance;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static
org.kie.kogito.event.process.ProcessInstanceNodeEventBody.EVENT_TYPE_ENTER;
+import static
org.kie.kogito.event.process.ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT;
+import static org.kie.kogito.index.DateTimeUtils.toZonedDateTime;
+
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+public class ProcessInstanceNodeDataEventMergerTest {
+
+ private static final String HIRING_PROCESS_ID = "hiring";
+ private static final String PROCESS_INSTANCE_ID =
"7b8ea46e-ffe7-4fdd-8cf5-72a3f0353947";
+
+ private static final String START_NODE_INSTANCE_ID =
"35d525eb-868a-4056-91cc-dbc3804d157c";
+ private static final String START = "Start";
+ private static final String START_NODE_DEFINITION_ID =
"_1639F738-45F3-4CD6-A80E-CCEBAA605D56";
+ private static final String START_NODE_TYPE = "StartNode";
+
+ private static final String ACTION_NODE_INSTANCE_ID =
"08ee9c9c-cf67-47e5-a7e6-901a6f556c0a";
+ private static final String ACTION_NODE = "New Hiring";
+ private static final String ACTION_NODE_DEFINITION_ID =
"_5BDBE48C-CC83-46A9-9D56-F846F8FC1045";
+ private static final String ACTION_NODE_TYPE = "ActionNode";
+
+ private static final String BOUNDARY_EVENT_NODE_INSTANCE_ID =
"f22510d2-e0e5-460a-901e-494cda3dea26";
+ private static final String BOUNDARY_EVENT_NODE_NODE = "BoundaryEvent";
+ private static final String BOUNDARY_EVENT_NODE_NODE_DEFINITION_ID =
"_116F3C54-A10E-4952-9E08-1CACE74CED0B";
+ private static final String BOUNDARY_EVENT_NODE_NODE_TYPE =
"BoundaryEventNode";
+
+ private ProcessInstanceNodeDataEventMerger merger;
+ private ProcessInstance pi;
+
+ @BeforeEach
+ public void setup() {
+ merger = new ProcessInstanceNodeDataEventMerger();
+ pi = new ProcessInstance();
+ pi.setProcessId(HIRING_PROCESS_ID);
+ pi.setProcessName(HIRING_PROCESS_ID);
+ pi.setId(PROCESS_INSTANCE_ID);
+ pi.setVersion("1.0");
+ pi.setStart(ZonedDateTime.now());
+ pi.setState(1);
+ }
+
+ @Test
+ public void testMergeProcessInstanceNodeDataEvents() {
+ ProcessInstanceNodeDataEvent startNodeEnter =
buildNodeEvent(START_NODE_INSTANCE_ID, START, START_NODE_DEFINITION_ID,
START_NODE_TYPE, EVENT_TYPE_ENTER);
+
+ merger.merge(pi, startNodeEnter);
+
+ ProcessInstanceNodeDataEvent startNodeExit =
buildNodeEvent(START_NODE_INSTANCE_ID, START, START_NODE_DEFINITION_ID,
START_NODE_TYPE, EVENT_TYPE_EXIT);
+
+ merger.merge(pi, startNodeExit);
+
+ ProcessInstanceNodeDataEvent actionNodeEnter =
buildNodeEvent(ACTION_NODE_INSTANCE_ID, ACTION_NODE, ACTION_NODE_DEFINITION_ID,
ACTION_NODE_TYPE, EVENT_TYPE_ENTER);
+
+ merger.merge(pi, actionNodeEnter);
+
+ ProcessInstanceNodeDataEvent actionNodeExit =
buildNodeEvent(ACTION_NODE_INSTANCE_ID, ACTION_NODE, ACTION_NODE_DEFINITION_ID,
ACTION_NODE_TYPE, EVENT_TYPE_EXIT);
+
+ merger.merge(pi, actionNodeExit);
+
+ assertThat(pi.getNodes()).hasSize(2);
+
+ verifyNode(pi.getNodes().get(0), startNodeEnter.getData(),
startNodeEnter.getData().getEventDate(),
startNodeExit.getData().getEventDate());
+ verifyNode(pi.getNodes().get(1), actionNodeEnter.getData(),
actionNodeEnter.getData().getEventDate(),
actionNodeExit.getData().getEventDate());
+ }
+
+ @Test
+ public void testMergeBoundaryNodeExitEvent() {
+ ProcessInstanceNodeDataEvent boundaryEvent =
+ buildNodeEvent(BOUNDARY_EVENT_NODE_INSTANCE_ID,
BOUNDARY_EVENT_NODE_NODE, BOUNDARY_EVENT_NODE_NODE_DEFINITION_ID,
BOUNDARY_EVENT_NODE_NODE_TYPE, EVENT_TYPE_EXIT);
+
+ merger.merge(pi, boundaryEvent);
+
+ assertThat(pi.getNodes()).hasSize(1);
+
+ verifyNode(pi.getNodes().get(0), boundaryEvent.getData(),
boundaryEvent.getData().getEventDate(), boundaryEvent.getData().getEventDate());
+ }
+
+ private void verifyNode(NodeInstance nodeInstance,
ProcessInstanceNodeEventBody eventBody, Date enter, Date exit) {
+ assertThat(nodeInstance)
+ .hasFieldOrPropertyWithValue("id",
eventBody.getNodeInstanceId())
+ .hasFieldOrPropertyWithValue("nodeId",
eventBody.getNodeDefinitionId())
+ .hasFieldOrPropertyWithValue("definitionId",
eventBody.getNodeDefinitionId())
+ .hasFieldOrPropertyWithValue("name", eventBody.getNodeName())
+ .hasFieldOrPropertyWithValue("type", eventBody.getNodeType())
+ .hasFieldOrPropertyWithValue("enter", toZonedDateTime(enter))
+ .hasFieldOrPropertyWithValue("exit", toZonedDateTime(exit));
+ }
+
+ private ProcessInstanceNodeDataEvent buildNodeEvent(String nodeInstanceId,
String nodeName, String nodeDefinitionId, String nodeType, Integer eventType) {
+ return new ProcessInstanceNodeDataEvent(HIRING_PROCESS_ID, "", "", new
HashMap<>(), ProcessInstanceNodeEventBody.create()
+ .processId(HIRING_PROCESS_ID)
+ .processInstanceId(PROCESS_INSTANCE_ID)
+ .nodeInstanceId(nodeInstanceId)
+ .nodeName(nodeName)
+ .nodeDefinitionId(nodeDefinitionId)
+ .nodeType(nodeType)
+ .eventDate(new Date())
+ .eventType(eventType)
+ .build());
+ }
+}
diff --git
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/json/ProcessInstanceMetaMapper.java
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/json/ProcessInstanceMetaMapper.java
index 4c5811f77..bc1e5c3c4 100644
---
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/json/ProcessInstanceMetaMapper.java
+++
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/json/ProcessInstanceMetaMapper.java
@@ -25,7 +25,6 @@ import java.util.function.Function;
import org.kie.kogito.event.process.ProcessInstanceDataEvent;
import org.kie.kogito.event.process.ProcessInstanceStateDataEvent;
import org.kie.kogito.event.process.ProcessInstanceVariableDataEvent;
-import org.kie.kogito.index.service.IndexingService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,7 +41,7 @@ import static
org.kie.kogito.index.storage.Constants.PROCESS_NAME;
public class ProcessInstanceMetaMapper implements
Function<ProcessInstanceDataEvent<?>, ObjectNode> {
- private static final Logger LOGGER =
LoggerFactory.getLogger(IndexingService.class);
+ private static final Logger LOGGER =
LoggerFactory.getLogger(ProcessInstanceMetaMapper.class);
@Override
public ObjectNode apply(ProcessInstanceDataEvent<?> event) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]