in data-index/data-index-common/src/main/java/org/kie/kogito/index/service/IndexingService.java [191:229]
private void mergeUserTaskInstance(ObjectNode newModel, ObjectNode updateData) {
if (!updateData.has(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE)) {
return;
}
if (!newModel.has(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE)) {
newModel.set(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE, updateData.get(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE));
return;
}
newModel.set(LAST_UPDATE, updateData.get(LAST_UPDATE));
ArrayNode currentUserTaskModel = (ArrayNode) newModel.get(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE);
ArrayNode updateUserTasks = (ArrayNode) updateData.get(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE);
ArrayNode newArrayNode = getObjectMapper().createArrayNode();
newArrayNode.addAll(currentUserTaskModel);
for (int i = 0; i < updateUserTasks.size(); i++) {
String indexId = updateUserTasks.get(i).get(ID).asText();
boolean found = false;
for (int j = 0; j < currentUserTaskModel.size(); j++) {
String currentIndexId = currentUserTaskModel.get(j).get(ID).asText();
if (indexId.equals(currentIndexId)) {
ObjectNode currentNode = (ObjectNode) newArrayNode.get(j);
ObjectNode updateNode = ((ObjectNode) updateUserTasks.get(i));
copyFieldsExcept(currentNode, updateNode, "comments", "attachments");
mergeFieldArray("comments", currentNode, updateNode);
mergeFieldArray("attachments", currentNode, updateNode);
found = true;
break;
}
}
if (!found) {
newArrayNode.add(updateUserTasks.get(i));
}
}
newModel.set(USER_TASK_INSTANCES_DOMAIN_ATTRIBUTE, newArrayNode);
return;
}