This is an automated email from the ASF dual-hosted git repository.
egonzalez 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 e8195dc84 [incubator-kie-issues-1485] Reenable event test in
ProcessTestEvents in kogito-apps (#2110)
e8195dc84 is described below
commit e8195dc849ae0bcf6fc227c02150785573a72b41
Author: Enrique <[email protected]>
AuthorDate: Tue Oct 22 22:40:01 2024 +0200
[incubator-kie-issues-1485] Reenable event test in ProcessTestEvents in
kogito-apps (#2110)
---
.../kogito/index/AbstractProcessDataIndexIT.java | 42 +++++++++++------
.../index/api/KogitoRuntimeCommonClient.java | 7 ++-
.../src/main/resources/basic.schema.graphqls | 1 +
.../index/service/api/KogitoRuntimeClientImpl.java | 55 ++++++++++------------
.../index/service/AbstractIndexingServiceIT.java | 2 +-
.../index/service/api/KogitoRuntimeClientTest.java | 35 +++++++-------
.../src/main/resources/application.properties | 1 +
.../kie/kogito/index/model/UserTaskInstance.java | 9 ++++
.../merger/UserTaskInstanceStateEventMerger.java | 3 +-
.../protostream/UserTaskInstanceMarshaller.java | 3 ++
.../UserTaskInstanceMarshallerTest.java | 5 ++
.../index/jpa/model/UserTaskInstanceEntity.java | 10 ++++
.../jpa/storage/ProcessInstanceEntityStorage.java | 5 +-
.../jpa/storage/UserTaskInstanceEntityStorage.java | 3 +-
.../AbstractUserTaskInstanceEntityMapperIT.java | 3 ++
.../ansi/V1.45.0.5__add_external_reference_id.sql | 20 ++++++++
.../mongodb/model/UserTaskInstanceEntity.java | 11 +++++
.../model/UserTaskInstanceEntityMapper.java | 2 +
.../model/UserTaskInstanceEntityMapperTest.java | 3 ++
.../V1.45.0.5__add_external_reference_id.sql | 20 ++++++++
.../src/main/resources/META-INF/kogito-index.proto | 2 +
.../java/org/kie/kogito/index/test/TestUtils.java | 2 +
22 files changed, 177 insertions(+), 67 deletions(-)
diff --git
a/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
b/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
index e2fb7f7b7..2dd753f10 100644
---
a/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
+++
b/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
@@ -30,7 +30,6 @@ import java.time.temporal.ChronoUnit;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.testcontainers.shaded.com.fasterxml.jackson.databind.JsonNode;
import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
@@ -92,7 +91,6 @@ public abstract class AbstractProcessDataIndexIT {
}
@Test
- @Disabled
public void testProcessInstanceEvents() throws IOException {
String pId = given()
.contentType(ContentType.JSON)
@@ -113,13 +111,13 @@ public abstract class AbstractProcessDataIndexIT {
.contentType(ContentType.JSON)
.queryParam("user", "admin")
.queryParam("group", "managers")
- .pathParam("processId", pId)
.when()
- .get("/approvals/{processId}/tasks")
+ .get("/usertasks/instance")
.then()
.statusCode(200)
+ .log().body()
.body("$.size()", is(1))
- .body("[0].name", is("firstLineApproval"))
+ .body("[0].taskName", is("firstLineApproval"))
.body("[0].id", notNullValue())
.extract()
.path("[0].id");
@@ -152,7 +150,7 @@ public abstract class AbstractProcessDataIndexIT {
.body("data.Approvals[0].metadata.userTasks.size()", is(1))
.body("data.Approvals[0].metadata.userTasks[0].id", is(flTaskId))
.body("data.Approvals[0].metadata.userTasks[0].name", is("firstLineApproval"))
-
.body("data.Approvals[0].metadata.userTasks[0].state", is("Ready")));
+
.body("data.Approvals[0].metadata.userTasks[0].state", is("Reserved")));
}
await()
@@ -187,7 +185,22 @@ public abstract class AbstractProcessDataIndexIT {
.body("data.UserTaskInstances.size()", is(1))
.body("data.UserTaskInstances[0].id", is(flTaskId))
.body("data.UserTaskInstances[0].name",
is("firstLineApproval"))
- .body("data.UserTaskInstances[0].state", is("Ready")));
+ .body("data.UserTaskInstances[0].state",
is("Reserved")));
+
+ String workItemId = given()
+ .contentType(ContentType.JSON)
+ .queryParam("user", "admin")
+ .queryParam("group", "managers")
+ .pathParam("processId", pId)
+ .when()
+ .get("/approvals/{processId}/tasks")
+ .then()
+ .statusCode(200)
+ .body("$.size()", is(1))
+ .body("[0].name", is("firstLineApproval"))
+ .body("[0].id", notNullValue())
+ .extract()
+ .path("[0].id");
await()
.atMost(TIMEOUT)
@@ -196,7 +209,7 @@ public abstract class AbstractProcessDataIndexIT {
.queryParam("user", "admin")
.queryParam("group", "managers")
.pathParam("processId", pId)
- .pathParam("taskId", flTaskId)
+ .pathParam("taskId", workItemId)
.body(singletonMap("approved", true))
.post("/approvals/{processId}/firstLineApproval/{taskId}")
.then()
@@ -324,6 +337,7 @@ public abstract class AbstractProcessDataIndexIT {
.when().post("/graphql")
.then()
.statusCode(200)
+ .log().body()
.body("data.UserTaskInstances[0].description", nullValue())
.body("data.UserTaskInstances[0].potentialGroups[0]",
equalTo("managers"))
.extract().path("data.UserTaskInstances[0].id");
@@ -335,6 +349,7 @@ public abstract class AbstractProcessDataIndexIT {
.when().post("/graphql")
.then()
.statusCode(200)
+ .log().body()
.body("errors", nullValue())
.extract().path("data.UserTaskInstances[0].schema");
checkExpectedTaskSchema(taskSchema);
@@ -474,9 +489,8 @@ public abstract class AbstractProcessDataIndexIT {
.when()
.queryParam("user", "manager")
.queryParam("group", "managers")
- .pathParam("id", processInstanceId)
.pathParam("taskId", taskId)
-
.get("/approvals/{id}/firstLineApproval/{taskId}/comments")
+ .get("/usertasks/instance/{taskId}/comments")
.then()
.statusCode(200)
.body("size()", is(1))
@@ -585,9 +599,8 @@ public abstract class AbstractProcessDataIndexIT {
.when()
.queryParam("user", "manager")
.queryParam("group", "managers")
- .pathParam("id", processInstanceId)
.pathParam("taskId", taskId)
-
.get("/approvals/{id}/firstLineApproval/{taskId}/attachments")
+ .get("/usertasks/instance/{taskId}/attachments")
.then()
.statusCode(200)
.body("size()", is(1))
@@ -710,14 +723,13 @@ public abstract class AbstractProcessDataIndexIT {
assertEquals("object", schemaJsonNode.at("/type").asText());
// Check Schema phases
- assertEquals(4, schemaJsonNode.at("/phases").size());
+ assertEquals(3, schemaJsonNode.at("/phases").size());
assertTrue(schemaJsonNode.get("phases").toString().contains("abort"));
- assertTrue(schemaJsonNode.get("phases").toString().contains("claim"));
assertTrue(schemaJsonNode.get("phases").toString().contains("skip"));
assertTrue(schemaJsonNode.get("phases").toString().contains("complete"));
// Check Schema properties
- assertEquals(2, schemaJsonNode.at("/properties").size());
+ assertEquals(3, schemaJsonNode.at("/properties").size());
assertEquals("true",
schemaJsonNode.at("/properties/approved/output").asText());
assertEquals("boolean",
schemaJsonNode.at("/properties/approved/type").asText());
diff --git
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
index 7e86049fc..1df466aa4 100644
---
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
+++
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
@@ -7,7 +7,7 @@
* "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
+ * 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
@@ -118,8 +118,11 @@ public class KogitoRuntimeCommonClient {
protected void
asyncHttpResponseTreatment(AsyncResult<HttpResponse<Buffer>> res,
CompletableFuture future, String logMessage) {
if (res.succeeded() && (res.result().statusCode() == 200 ||
res.result().statusCode() == 201)) {
- future.complete(res.result().bodyAsString() != null ?
res.result().bodyAsString() : "Successfully performed: " + logMessage);
+ String jsonMessage = res.result().bodyAsString();
+ LOGGER.trace("Result {}", jsonMessage);
+ future.complete(jsonMessage != null ? jsonMessage : "Successfully
performed: " + logMessage);
} else {
+ LOGGER.trace("Error {}", logMessage);
future.completeExceptionally(new
DataIndexServiceException(getErrorMessage(logMessage, res.result())));
}
}
diff --git
a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index 4e6f30b76..741c0d4e8 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -367,6 +367,7 @@ type UserTaskInstance {
endpoint: String
comments: [Comment!]
attachments: [Attachment!]
+ externalReferenceId : String
}
input UserTaskInstanceArgument {
diff --git
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
index beabe661a..badbe77b2 100644
---
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
+++
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
@@ -28,11 +28,13 @@ import org.kie.kogito.index.model.Node;
import org.kie.kogito.index.model.ProcessInstance;
import org.kie.kogito.index.model.UserTaskInstance;
import org.kie.kogito.index.service.DataIndexServiceException;
+import org.kie.kogito.usertask.model.CommentInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.vertx.core.AsyncResult;
import io.vertx.core.buffer.Buffer;
+import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.HttpResponse;
@@ -58,15 +60,15 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
public static final String CANCEL_NODE_INSTANCE_PATH =
"/management/processes/%s/instances/%s/nodeInstances/%s"; // nodeInstance Id
public static final String GET_TASK_SCHEMA_PATH = "/%s/%s/%s/%s/schema";
- public static final String UPDATE_USER_TASK_INSTANCE_PATH =
"/management/processes/%s/instances/%s/tasks/%s";
+ public static final String UPDATE_USER_TASK_INSTANCE_PATH =
"/management/usertasks/%s";
- public static final String CREATE_USER_TASK_INSTANCE_COMMENT_PATH =
"/%s/%s/%s/%s/comments";
- public static final String UPDATE_USER_TASK_INSTANCE_COMMENT_PATH =
"/%s/%s/%s/%s/comments/%s";
- public static final String DELETE_USER_TASK_INSTANCE_COMMENT_PATH =
"/%s/%s/%s/%s/comments/%s";
+ public static final String CREATE_USER_TASK_INSTANCE_COMMENT_PATH =
"/usertasks/instance/%s/comments";
+ public static final String UPDATE_USER_TASK_INSTANCE_COMMENT_PATH =
"/usertasks/instance/%s/comments/%s";
+ public static final String DELETE_USER_TASK_INSTANCE_COMMENT_PATH =
"/usertasks/instance/%s/comments/%s";
- public static final String CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH =
"/%s/%s/%s/%s/attachments";
- public static final String UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH =
"/%s/%s/%s/%s/attachments/%s";
- public static final String DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH =
"/%s/%s/%s/%s/attachments/%s";
+ public static final String CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH =
"/usertasks/instance/%s/attachments";
+ public static final String UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH =
"/usertasks/instance/%s/attachments/%s";
+ public static final String DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH =
"/usertasks/instance/%s/attachments/%s";
private static final Logger LOGGER =
LoggerFactory.getLogger(KogitoRuntimeClientImpl.class);
@@ -137,7 +139,8 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
@Override
public CompletableFuture<String> getUserTaskSchema(String serviceURL,
UserTaskInstance userTaskInstance, String user, List<String> groups) {
String requestURI = format(GET_TASK_SCHEMA_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
- userTaskInstance.getName(), userTaskInstance.getId()) + "?" +
getUserGroupsURIParameter(user, groups);
+ userTaskInstance.getName(),
userTaskInstance.getExternalReferenceId()) + "?" +
getUserGroupsURIParameter(user, groups);
+ LOGGER.trace("get user task schema service {} and URI {}", serviceURL,
requestURI);
return sendGetClientRequest(getWebClient(serviceURL), requestURI,
"Get User Task schema for task:" + userTaskInstance.getName()
+ " with id: " + userTaskInstance.getId(),
null);
@@ -146,44 +149,40 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
@Override
public CompletableFuture<String> updateUserTaskInstance(String serviceURL,
UserTaskInstance userTaskInstance, String user,
List<String> groups, Map taskInfo) {
- String requestURI = format(UPDATE_USER_TASK_INSTANCE_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
- userTaskInstance.getId()) + "?" +
getUserGroupsURIParameter(user, groups);
+ String requestURI = format(UPDATE_USER_TASK_INSTANCE_PATH,
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
+ LOGGER.trace("Send request to {}", requestURI);
return sendPatchClientRequest(getWebClient(serviceURL), requestURI,
- "Update user task instance:" + userTaskInstance.getName() + "
with id: " + userTaskInstance.getId(),
+ "Update user task instance: " + userTaskInstance.getName() + "
with id: " + userTaskInstance.getId(),
new JsonObject(taskInfo));
}
@Override
public CompletableFuture<String> createUserTaskInstanceComment(String
serviceURL, UserTaskInstance userTaskInstance, String user, List<String>
groups, String commentInfo) {
- String requestURI = format(CREATE_USER_TASK_INSTANCE_COMMENT_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(),
- userTaskInstance.getId()) + "?" +
getUserGroupsURIParameter(user, groups);
+ String requestURI = format(CREATE_USER_TASK_INSTANCE_COMMENT_PATH,
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
return sendPostWithBodyClientRequest(getWebClient(serviceURL),
requestURI,
"Adding comment to UserTask:" + userTaskInstance.getName() +
" with id: " + userTaskInstance.getId(),
- commentInfo, MediaType.TEXT_PLAIN);
+ Json.encode(new CommentInfo(commentInfo)),
MediaType.APPLICATION_JSON);
}
@Override
public CompletableFuture<String> updateUserTaskInstanceComment(String
serviceURL, UserTaskInstance userTaskInstance, String user, List<String>
groups, String commentId, String commentInfo) {
- String requestURI = format(UPDATE_USER_TASK_INSTANCE_COMMENT_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(),
- userTaskInstance.getId(), commentId) + "?" +
getUserGroupsURIParameter(user, groups);
+ String requestURI = format(UPDATE_USER_TASK_INSTANCE_COMMENT_PATH,
userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user,
groups);
return sendPutClientRequest(getWebClient(serviceURL),
requestURI,
"Update UserTask: " + userTaskInstance.getName() + " comment:"
+ commentId + " with taskid: " + userTaskInstance.getId(),
- commentInfo, MediaType.TEXT_PLAIN);
+ Json.encode(new CommentInfo(commentInfo)),
MediaType.APPLICATION_JSON);
}
@Override
public CompletableFuture<String> deleteUserTaskInstanceComment(String
serviceURL, UserTaskInstance userTaskInstance, String user, List<String>
groups, String commentId) {
- String requestURI = format(DELETE_USER_TASK_INSTANCE_COMMENT_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
- userTaskInstance.getName(), userTaskInstance.getId(),
commentId) + "?" + getUserGroupsURIParameter(user, groups);
+ String requestURI = format(DELETE_USER_TASK_INSTANCE_COMMENT_PATH,
userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user,
groups);
return sendDeleteClientRequest(getWebClient(serviceURL), requestURI,
"Delete comment : " + commentId + "of Task: " +
userTaskInstance.getName() + " with taskid: " + userTaskInstance.getId());
}
@Override
public CompletableFuture<String> createUserTaskInstanceAttachment(String
serviceURL, UserTaskInstance userTaskInstance, String user, List<String>
groups, String name, String uri) {
- String requestURI = format(CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(),
- userTaskInstance.getId()) + "?" +
getUserGroupsURIParameter(user, groups);
+ String requestURI = format(CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH,
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
return sendPostWithBodyClientRequest(getWebClient(serviceURL),
requestURI,
"Adding attachment to UserTask:" + userTaskInstance.getName()
+ " with id: " + userTaskInstance.getId(),
"{ \"name\": \"" + name + "\", \"uri\": \"" + uri + "\" }",
MediaType.APPLICATION_JSON);
@@ -192,8 +191,7 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
@Override
public CompletableFuture<String> updateUserTaskInstanceAttachment(String
serviceURL, UserTaskInstance userTaskInstance, String user,
List<String> groups, String attachmentId, String name, String uri)
{
- String requestURI = format(UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
userTaskInstance.getName(),
- userTaskInstance.getId(), attachmentId) + "?" +
getUserGroupsURIParameter(user, groups);
+ String requestURI = format(UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH,
userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user,
groups);
return sendJSONPutClientRequest(getWebClient(serviceURL),
requestURI,
"Update UserTask: " + userTaskInstance.getName() + "
attachment:" + attachmentId +
@@ -203,8 +201,7 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
@Override
public CompletableFuture<String> deleteUserTaskInstanceAttachment(String
serviceURL, UserTaskInstance userTaskInstance, String user, List<String>
groups, String attachmentId) {
- String requestURI = format(DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH,
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
- userTaskInstance.getName(), userTaskInstance.getId(),
attachmentId) + "?" + getUserGroupsURIParameter(user, groups);
+ String requestURI = format(DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH,
userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user,
groups);
return sendDeleteClientRequest(getWebClient(serviceURL), requestURI,
"Delete attachment : " + attachmentId + "of Task: " +
userTaskInstance.getName() + " with taskid: " + userTaskInstance.getId());
}
@@ -225,10 +222,10 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
.putHeader("Authorization", getAuthHeader())
.putHeader("Content-Type", contentType);
if (MediaType.APPLICATION_JSON.equals(contentType)) {
- LOGGER.debug("Sending Json Body: {} POST to URI {}", body,
requestURI);
+ LOGGER.trace("Sending Json Body: {} POST to URI {}", body,
requestURI);
request.sendJson(new JsonObject(body), res ->
asyncHttpResponseTreatment(res, future, logMessage));
} else {
- LOGGER.debug("Sending Buffer(Body): {} POST to URI {}", body,
requestURI);
+ LOGGER.trace("Sending Buffer(Body): {} POST to URI {}", body,
requestURI);
request.sendBuffer(Buffer.buffer(body), res ->
asyncHttpResponseTreatment(res, future, logMessage));
}
return future;
@@ -253,10 +250,10 @@ class KogitoRuntimeClientImpl extends
KogitoRuntimeCommonClient implements Kogit
.putHeader("Authorization", getAuthHeader())
.putHeader("Content-Type", contentType);
if (MediaType.APPLICATION_JSON.equals(contentType)) {
- LOGGER.debug("Sending Json Body: {} PUT to URI {}", body,
requestURI);
+ LOGGER.info("Sending Json Body: {} PUT to URI {}", body,
requestURI);
request.sendJson(new JsonObject(body), res ->
asyncHttpResponseTreatment(res, future, logMessage));
} else {
- LOGGER.debug("Sending Buffer(Body): {} PUT to URI {}", body,
requestURI);
+ LOGGER.info("Sending Buffer(Body): {} PUT to URI {}", body,
requestURI);
request.sendBuffer(Buffer.buffer(body), res ->
asyncHttpResponseTreatment(res, future, logMessage));
}
return future;
diff --git
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
index 984323837..dd24ab69e 100644
---
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
+++
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
@@ -477,7 +477,7 @@ public abstract class AbstractIndexingServiceIT extends
AbstractIndexingIT {
.body("data.UserTaskInstances[0].lastUpdate",
anything())
.body("data.UserTaskInstances[0].endpoint",
is(event.getSource().toString() + "/" +
event.getData().getProcessInstanceId() + "/" +
event.getData().getUserTaskName() + "/"
- +
event.getData().getUserTaskInstanceId())));
+ +
event.getData().getExternalReferenceId())));
}
}
diff --git
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
index 62fbd1570..28acb2caf 100644
---
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
+++
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
@@ -35,6 +35,7 @@ import org.kie.kogito.index.model.ProcessInstance;
import org.kie.kogito.index.model.UserTaskInstance;
import org.kie.kogito.index.service.DataIndexServiceException;
import org.kie.kogito.index.test.TestUtils;
+import org.kie.kogito.usertask.model.CommentInfo;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -44,6 +45,7 @@ import io.quarkus.security.identity.SecurityIdentity;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
+import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.HttpResponse;
@@ -58,12 +60,10 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.ABORT_PROCESS_INSTANCE_PATH;
-import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.CANCEL_JOB_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.CANCEL_NODE_INSTANCE_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.GET_PROCESS_INSTANCE_DIAGRAM_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.GET_PROCESS_INSTANCE_NODE_DEFINITIONS_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.GET_PROCESS_INSTANCE_SOURCE_PATH;
-import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.RESCHEDULE_JOB_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.RETRIGGER_NODE_INSTANCE_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.RETRY_PROCESS_INSTANCE_PATH;
import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.SKIP_PROCESS_INSTANCE_PATH;
@@ -72,6 +72,7 @@ import static
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.UPDATE_VA
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -401,8 +402,9 @@ public class KogitoRuntimeClientTest {
UserTaskInstance taskInstance =
createUserTaskInstance(PROCESS_INSTANCE_ID, TASK_ID, "InProgress");
client.getUserTaskSchema(SERVICE_URL, taskInstance, "jdoe",
Collections.singletonList("managers"));
- verify(client).sendGetClientRequest(webClientMock, "/travels/" +
PROCESS_INSTANCE_ID + "/TaskName/" + TASK_ID +
"/schema?user=jdoe&group=managers",
- "Get User Task schema for task:TaskName with id: " +
taskInstance.getId(), null);
+ verify(client).sendGetClientRequest(eq(webClientMock),
+ eq("/travels/" + PROCESS_INSTANCE_ID + "/TaskName/" +
taskInstance.getExternalReferenceId() + "/schema?user=jdoe&group=managers"),
+ eq("Get User Task schema for task:TaskName with id: " +
taskInstance.getId()), isNull());
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
verify(httpRequestMock).send(handlerCaptor.capture());
verify(httpRequestMock).putHeader(eq("Authorization"), eq("Bearer " +
AUTHORIZED_TOKEN));
@@ -421,8 +423,8 @@ public class KogitoRuntimeClientTest {
client.updateUserTaskInstance(SERVICE_URL, taskInstance, "jdoe",
Collections.singletonList("managers"), taskInfo);
ArgumentCaptor<JsonObject> jsonCaptor =
ArgumentCaptor.forClass(JsonObject.class);
verify(client).sendPatchClientRequest(eq(webClientMock),
- eq("/management/processes/travels/instances/" +
PROCESS_INSTANCE_ID + "/tasks/" + TASK_ID + "?user=jdoe&group=managers"),
- eq("Update user task instance:" + taskInstance.getName() + "
with id: " + taskInstance.getId()),
+ eq("/management/usertasks/" + TASK_ID +
"?user=jdoe&group=managers"),
+ eq("Update user task instance: " + taskInstance.getName() + "
with id: " + taskInstance.getId()),
jsonCaptor.capture());
assertThat(jsonCaptor.getValue().getString("description")).isEqualTo("NewDescription");
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
@@ -443,10 +445,11 @@ public class KogitoRuntimeClientTest {
client.createUserTaskInstanceComment(SERVICE_URL, taskInstance,
"jdoe", Collections.singletonList("managers"), commentInfo);
verify(client).sendPostWithBodyClientRequest(eq(webClientMock),
- eq("/travels/" + PROCESS_INSTANCE_ID + "/" +
taskInstance.getName() + "/" + TASK_ID + "/comments?user=jdoe&group=managers"),
- eq("Adding comment to UserTask:" + taskInstance.getName() + "
with id: " + taskInstance.getId()), eq(commentInfo), eq("text/plain"));
+ eq("/usertasks/instance/" + TASK_ID +
"/comments?user=jdoe&group=managers"),
+ eq("Adding comment to UserTask:" + taskInstance.getName() + "
with id: " + taskInstance.getId()),
+ eq(Json.encode(new CommentInfo(commentInfo))),
eq("application/json"));
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
- verify(httpRequestMock).sendBuffer(any(), handlerCaptor.capture());
+ verify(httpRequestMock).sendJson(any(), handlerCaptor.capture());
checkResponseHandling(handlerCaptor.getValue());
}
@@ -462,7 +465,7 @@ public class KogitoRuntimeClientTest {
client.createUserTaskInstanceAttachment(SERVICE_URL, taskInstance,
"jdoe", Collections.singletonList("managers"), attachmentName, attachmentUri);
verify(client).sendPostWithBodyClientRequest(eq(webClientMock),
- eq("/travels/" + PROCESS_INSTANCE_ID + "/" +
taskInstance.getName() + "/" + TASK_ID +
"/attachments?user=jdoe&group=managers"),
+ eq("/usertasks/instance/" + TASK_ID +
"/attachments?user=jdoe&group=managers"),
eq("Adding attachment to UserTask:" + taskInstance.getName()
+ " with id: " + taskInstance.getId()),
eq("{ \"name\": \"" + attachmentName + "\", \"uri\": \"" +
attachmentUri + "\" }"), eq("application/json"));
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
@@ -484,12 +487,12 @@ public class KogitoRuntimeClientTest {
client.updateUserTaskInstanceComment(SERVICE_URL, taskInstance,
"jdoe", Collections.singletonList("managers"), commentId, commentInfo);
verify(client).sendPutClientRequest(eq(webClientMock),
- eq("/travels/" + PROCESS_INSTANCE_ID + "/" +
taskInstance.getName() + "/" + TASK_ID + "/comments/" + commentId +
"?user=jdoe&group=managers"),
+ eq("/usertasks/instance/" + TASK_ID + "/comments/" + commentId
+ "?user=jdoe&group=managers"),
eq("Update UserTask: " + taskInstance.getName() + " comment:"
+ commentId + " with taskid: " + taskInstance.getId()),
- eq(commentInfo), eq("text/plain"));
+ eq(Json.encode(new CommentInfo(commentInfo))),
eq("application/json"));
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
- verify(httpRequestMock).sendBuffer(any(), handlerCaptor.capture());
+ verify(httpRequestMock).sendJson(any(), handlerCaptor.capture());
checkResponseHandling(handlerCaptor.getValue());
}
@@ -503,7 +506,7 @@ public class KogitoRuntimeClientTest {
client.deleteUserTaskInstanceComment(SERVICE_URL, taskInstance,
"jdoe", Collections.singletonList("managers"), commentId);
verify(client).sendDeleteClientRequest(eq(webClientMock),
- eq("/travels/" + PROCESS_INSTANCE_ID + "/" +
taskInstance.getName() + "/" + TASK_ID + "/comments/" + commentId +
"?user=jdoe&group=managers"),
+ eq("/usertasks/instance/" + TASK_ID + "/comments/" + commentId
+ "?user=jdoe&group=managers"),
eq("Delete comment : " + commentId + "of Task: " +
taskInstance.getName() + " with taskid: " + taskInstance.getId()));
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
verify(httpRequestMock).send(handlerCaptor.capture());
@@ -524,7 +527,7 @@ public class KogitoRuntimeClientTest {
client.updateUserTaskInstanceAttachment(SERVICE_URL, taskInstance,
"jdoe", Collections.singletonList("managers"),
attachmentId, attachmentName, attachmentContent);
verify(client).sendJSONPutClientRequest(eq(webClientMock),
- eq("/travels/" + PROCESS_INSTANCE_ID + "/" +
taskInstance.getName() + "/" + TASK_ID + "/attachments/" + attachmentId +
"?user=jdoe&group=managers"),
+ eq("/usertasks/instance/" + TASK_ID + "/attachments/" +
attachmentId + "?user=jdoe&group=managers"),
eq("Update UserTask: " + taskInstance.getName() + "
attachment:" + attachmentId +
" with taskid: " + taskInstance.getId() + "with: " +
attachmentName +
" and info:" + attachmentContent),
@@ -546,7 +549,7 @@ public class KogitoRuntimeClientTest {
client.deleteUserTaskInstanceAttachment(SERVICE_URL, taskInstance,
"jdoe", Collections.singletonList("managers"), attachmentId);
verify(client).sendDeleteClientRequest(eq(webClientMock),
- eq("/travels/" + PROCESS_INSTANCE_ID + "/" +
taskInstance.getName() + "/" + TASK_ID + "/attachments/" + attachmentId +
"?user=jdoe&group=managers"),
+ eq("/usertasks/instance/" + TASK_ID + "/attachments/" +
attachmentId + "?user=jdoe&group=managers"),
eq("Delete attachment : " + attachmentId + "of Task: " +
taskInstance.getName() + " with taskid: " + taskInstance.getId()));
ArgumentCaptor<Handler> handlerCaptor =
ArgumentCaptor.forClass(Handler.class);
verify(httpRequestMock).send(handlerCaptor.capture());
diff --git
a/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
b/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
index e6eb7e8cc..8f2849208 100644
---
a/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
+++
b/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
@@ -34,6 +34,7 @@
quarkus.flyway.locations=classpath:kie-flyway/db/data-index/postgresql
quarkus.hibernate-orm.jdbc.timezone=UTC
quarkus.hibernate-orm.database.generation=update
quarkus.hibernate-orm.database.generation.halt-on-error=true
+quarkus.hibernate-orm.physical-naming-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
#Container image
quarkus.container-image.build=${quarkus.build.image:true}
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
index 8572edcaf..b87d73777 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
@@ -28,6 +28,7 @@ public class UserTaskInstance extends UserTaskInstanceMeta {
private ObjectNode inputs;
private ObjectNode outputs;
private String endpoint;
+ private String externalReferenceId;
public String getProcessId() {
return processId;
@@ -94,4 +95,12 @@ public class UserTaskInstance extends UserTaskInstanceMeta {
public void setOutputs(ObjectNode outputs) {
this.outputs = outputs;
}
+
+ public String getExternalReferenceId() {
+ return externalReferenceId;
+ }
+
+ public void setExternalReferenceId(String externalReferenceId) {
+ this.externalReferenceId = externalReferenceId;
+ }
}
diff --git
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
index 8cf9d9fd7..8e813f07e 100644
---
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
+++
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
@@ -58,9 +58,10 @@ public class UserTaskInstanceStateEventMerger implements
UserTaskInstanceEventMe
}
task.setActualOwner(event.getData().getActualOwner());
task.setEndpoint(
- event.getSource() == null ? null :
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(),
event.getData().getUserTaskName(), event.getData().getUserTaskInstanceId()));
+ event.getSource() == null ? null :
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(),
event.getData().getUserTaskName(), event.getData().getExternalReferenceId()));
task.setLastUpdate(toZonedDateTime(event.getData().getEventDate()));
task.setReferenceName(event.getData().getUserTaskReferenceName());
+ task.setExternalReferenceId(event.getData().getExternalReferenceId());
LOGGER.debug("value after merging: {}", task);
return task;
}
diff --git
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
index b3ba2e74f..ff852b572 100644
---
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
+++
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
@@ -57,6 +57,7 @@ public class UserTaskInstanceMarshaller extends
AbstractMarshaller implements Me
protected static final String ENDPOINT = "endpoint";
protected static final String COMMENTS = "comments";
protected static final String ATTACHMENTS = "attachments";
+ protected static final String EXTERNAL_REFERENCE_ID =
"externalReferenceId";
public UserTaskInstanceMarshaller(ObjectMapper mapper) {
super(mapper);
@@ -89,6 +90,7 @@ public class UserTaskInstanceMarshaller extends
AbstractMarshaller implements Me
ut.setEndpoint(reader.readString(ENDPOINT));
ut.setComments(reader.readCollection(COMMENTS, new ArrayList<>(),
Comment.class));
ut.setAttachments(reader.readCollection(ATTACHMENTS, new
ArrayList<>(), Attachment.class));
+ ut.setExternalReferenceId(reader.readString(EXTERNAL_REFERENCE_ID));
return ut;
}
@@ -118,6 +120,7 @@ public class UserTaskInstanceMarshaller extends
AbstractMarshaller implements Me
writer.writeString(ENDPOINT, ut.getEndpoint());
writer.writeCollection(COMMENTS, ut.getComments(), Comment.class);
writer.writeCollection(ATTACHMENTS, ut.getAttachments(),
Attachment.class);
+ writer.writeString(EXTERNAL_REFERENCE_ID, ut.getExternalReferenceId());
}
@Override
diff --git
a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
index 6c19ae9b5..07f98b1ac 100644
---
a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
+++
b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
@@ -47,6 +47,7 @@ import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarsha
import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.DESCRIPTION;
import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.ENDPOINT;
import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.EXCLUDED_USERS;
+import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.EXTERNAL_REFERENCE_ID;
import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.ID;
import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.INPUTS;
import static
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.LAST_UPDATE;
@@ -100,6 +101,7 @@ class UserTaskInstanceMarshallerTest {
TASK.setReferenceName("referenceName");
TASK.setLastUpdate(ZonedDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.MILLIS));
TASK.setEndpoint("endpoint");
+ TASK.setExternalReferenceId("externalReferenceId");
TASK.setComments(List.of(Comment.builder()
.id("attId")
.content("Text comment")
@@ -144,6 +146,7 @@ class UserTaskInstanceMarshallerTest {
when(reader.readString(ENDPOINT)).thenReturn(TASK.getEndpoint());
when(reader.readCollection(eq(COMMENTS), any(),
eq(Comment.class))).thenReturn(TASK.getComments());
when(reader.readCollection(eq(ATTACHMENTS), any(),
eq(Attachment.class))).thenReturn(TASK.getAttachments());
+
when(reader.readString(EXTERNAL_REFERENCE_ID)).thenReturn(TASK.getExternalReferenceId());
UserTaskInstance task = marshaller.readFrom(reader);
@@ -174,6 +177,7 @@ class UserTaskInstanceMarshallerTest {
inOrder.verify(reader).readString(ENDPOINT);
inOrder.verify(reader).readCollection(COMMENTS, new ArrayList<>(),
Comment.class);
inOrder.verify(reader).readCollection(ATTACHMENTS, new ArrayList<>(),
Attachment.class);
+ inOrder.verify(reader).readString(EXTERNAL_REFERENCE_ID);
verifyNoMoreInteractions(reader);
}
@@ -209,6 +213,7 @@ class UserTaskInstanceMarshallerTest {
inOrder.verify(writer).writeString(ENDPOINT, TASK.getEndpoint());
inOrder.verify(writer).writeCollection(COMMENTS, TASK.getComments(),
Comment.class);
inOrder.verify(writer).writeCollection(ATTACHMENTS,
TASK.getAttachments(), Attachment.class);
+ inOrder.verify(writer).writeString(EXTERNAL_REFERENCE_ID,
TASK.getExternalReferenceId());
verifyNoMoreInteractions(writer);
}
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
index 0021a0eb2..314174ed1 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
@@ -91,6 +91,16 @@ public class UserTaskInstanceEntity extends AbstractEntity {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userTask", orphanRemoval
= true, fetch = FetchType.LAZY)
private List<AttachmentEntity> attachments;
+ private String externalReferenceId;
+
+ public String getExternalReferenceId() {
+ return externalReferenceId;
+ }
+
+ public void setExternalReferenceId(String externalReferenceId) {
+ this.externalReferenceId = externalReferenceId;
+ }
+
@Override
public String getId() {
return id;
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
index b991c1a83..8796f3204 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
@@ -167,9 +167,10 @@ public class ProcessInstanceEntityStorage extends
AbstractJPAStorageFetcher<Stri
private NodeInstanceEntity createNode(ProcessInstanceEntity pi,
ProcessInstanceNodeEventBody data) {
NodeInstanceEntity node = new NodeInstanceEntity();
- pi.getNodes().add(node);
node.setProcessInstance(pi);
- return updateNode(node, data);
+ updateNode(node, data);
+ pi.getNodes().add(node);
+ return node;
}
private NodeInstanceEntity updateNode(NodeInstanceEntity nodeInstance,
ProcessInstanceNodeEventBody body) {
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
index cb75b1e31..5204db657 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
@@ -197,9 +197,10 @@ public class UserTaskInstanceEntityStorage extends
AbstractJPAStorageFetcher<Str
}
task.setActualOwner(event.getData().getActualOwner());
task.setEndpoint(
- event.getSource() == null ? null :
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(),
event.getData().getUserTaskName(), event.getData().getUserTaskInstanceId()));
+ event.getSource() == null ? null :
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(),
event.getData().getUserTaskName(), event.getData().getExternalReferenceId()));
task.setLastUpdate(toZonedDateTime(event.getData().getEventDate()));
task.setReferenceName(event.getData().getUserTaskReferenceName());
+ task.setExternalReferenceId(body.getExternalReferenceId());
}
private String getEndpoint(URI source, String pId, String taskName, String
taskId) {
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
index 6d4dd31e2..f9e8b2f7c 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
@@ -71,6 +71,7 @@ public abstract class AbstractUserTaskInstanceEntityMapperIT {
String processId = "testProcessId";
String rootProcessId = "testRootProcessId";
String rootProcessInstanceId = "testRootProcessInstanceId";
+ String externalReferenceId = "testExternalReferenceId";
Map<String, String> object = new HashMap<>();
object.put("test", "testValue");
ObjectNode inputs = jsonMapper.createObjectNode().put("testInput",
"testValue");
@@ -124,6 +125,7 @@ public abstract class
AbstractUserTaskInstanceEntityMapperIT {
userTaskInstance.setOutputs(outputs);
userTaskInstance.setComments(singletonList(comment));
userTaskInstance.setAttachments(singletonList(attachment));
+ userTaskInstance.setExternalReferenceId(externalReferenceId);
userTaskInstanceEntity.setId(testId);
userTaskInstanceEntity.setDescription(description);
@@ -148,6 +150,7 @@ public abstract class
AbstractUserTaskInstanceEntityMapperIT {
userTaskInstanceEntity.setOutputs(outputs);
userTaskInstanceEntity.setComments(singletonList(commentEntity));
userTaskInstanceEntity.setAttachments(singletonList(attachmentEntity));
+ userTaskInstanceEntity.setExternalReferenceId(externalReferenceId);
}
@Test
diff --git
a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.5__add_external_reference_id.sql
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.5__add_external_reference_id.sql
new file mode 100644
index 000000000..918b9369c
--- /dev/null
+++
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.5__add_external_reference_id.sql
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+alter table tasks add external_reference_id character varying(4000)
diff --git
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
index a027ad384..c97c753dc 100644
---
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
+++
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
@@ -76,6 +76,8 @@ public class UserTaskInstanceEntity {
List<AttachmentEntity> attachments;
+ private String externalReferenceId;
+
public String getId() {
return id;
}
@@ -268,6 +270,14 @@ public class UserTaskInstanceEntity {
this.attachments = attachments;
}
+ public void setExternalReferenceId(String externalReferenceId) {
+ this.externalReferenceId = externalReferenceId;
+ }
+
+ public String getExternalReferenceId() {
+ return externalReferenceId;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -435,4 +445,5 @@ public class UserTaskInstanceEntity {
return Objects.hash(id);
}
}
+
}
diff --git
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
index b7479af60..1a8b9add5 100644
---
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
+++
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
@@ -79,6 +79,7 @@ public class UserTaskInstanceEntityMapper implements
MongoEntityMapper<UserTaskI
entity.setEndpoint(instance.getEndpoint());
entity.setComments(Optional.ofNullable(instance.getComments()).map(comments ->
comments.stream().map(this::fromComment).collect(toList())).orElse(null));
entity.setAttachments(Optional.ofNullable(instance.getAttachments()).map(attachments
->
attachments.stream().map(this::fromAttachment).collect(toList())).orElse(null));
+ entity.setExternalReferenceId(instance.getExternalReferenceId());
return entity;
}
@@ -113,6 +114,7 @@ public class UserTaskInstanceEntityMapper implements
MongoEntityMapper<UserTaskI
instance.setEndpoint(entity.getEndpoint());
instance.setComments(Optional.ofNullable(entity.getComments()).map(comments ->
comments.stream().map(this::toComment).collect(toList())).orElse(null));
instance.setAttachments(Optional.ofNullable(entity.getAttachments()).map(attachments
->
attachments.stream().map(this::toAttachment).collect(toList())).orElse(null));
+ instance.setExternalReferenceId(entity.getExternalReferenceId());
return instance;
}
diff --git
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
index 934070438..013ba7a04 100644
---
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
+++
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
@@ -64,6 +64,7 @@ class UserTaskInstanceEntityMapperTest {
String processId = "testProcessId";
String rootProcessId = "testRootProcessId";
String rootProcessInstanceId = "testRootProcessInstanceId";
+ String externalReferenceId = "testExternalReferenceId";
ObjectNode object = MAPPER.createObjectNode();
object.put("test", "testValue");
ObjectNode inputs = object;
@@ -114,6 +115,7 @@ class UserTaskInstanceEntityMapperTest {
userTaskInstance.setOutputs(outputs);
userTaskInstance.setComments(List.of(comment));
userTaskInstance.setAttachments(List.of(attachment));
+ userTaskInstance.setExternalReferenceId(externalReferenceId);
userTaskInstanceEntity = new UserTaskInstanceEntity();
userTaskInstanceEntity.setId(testId);
@@ -139,6 +141,7 @@ class UserTaskInstanceEntityMapperTest {
userTaskInstanceEntity.setOutputs(jsonNodeToDocument(outputs));
userTaskInstanceEntity.setComments(List.of(commentEntity));
userTaskInstanceEntity.setAttachments(List.of(attachmentEntity));
+ userTaskInstanceEntity.setExternalReferenceId(externalReferenceId);
}
@Test
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.5__add_external_reference_id.sql
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.5__add_external_reference_id.sql
new file mode 100644
index 000000000..908ee2b24
--- /dev/null
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.5__add_external_reference_id.sql
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+alter table tasks add external_reference_id varchar(4000);
diff --git
a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
index 18f01a601..5c23eecef 100644
---
a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
+++
b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
@@ -237,6 +237,7 @@ message UserTaskInstance {
repeated Comment comments = 23;
/* @Field(store = Store.YES) */
repeated Attachment attachments = 24;
+ optional string externalReferenceId = 25;
}
/* @Indexed */
@@ -275,6 +276,7 @@ message UserTaskInstanceMeta {
repeated Comment comments = 17;
/* @Field(store = Store.YES) */
repeated Attachment attachments = 18;
+ optional string externalReferenceId = 25;
}
/* @Indexed */
diff --git
a/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
b/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
index 68946a056..600d52824 100644
---
a/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
+++
b/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
@@ -286,6 +286,7 @@ public final class TestUtils {
.actualOwner(actualOwner)
.eventDate(new Date())
.processInstanceId(processInstanceId)
+ .externalReferenceId("testExternalReferenceId")
.build();
UserTaskInstanceStateDataEvent event = new
UserTaskInstanceStateDataEvent(URI.create("http://localhost:8080/" +
processId).toString(), null, null, body.metaData(), body);
event.setKogitoProcessId(processId);
@@ -422,6 +423,7 @@ public final class TestUtils {
task.setPotentialGroups(singleton("potentialGroup"));
task.setComments(List.of(Comment.builder().id("commentId" +
taskId).content("Comment 1").updatedBy("kogito").build()));
task.setAttachments(List.of(Attachment.builder().id("attachmentId" +
taskId).content("http://linltodoc.com/1").name("doc1").updatedBy("kogito").build()));
+ task.setExternalReferenceId("testExternalReferenceId");
return task;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]