private void mergeUserTaskInstance()

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;
    }