This is an automated email from the ASF dual-hosted git repository.

fjtiradosarti pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new af492cfae8 [Fix #3809] Allowing additional properties on user input 
(#3810)
af492cfae8 is described below

commit af492cfae867916e89c970c7e11b1f4bde439595
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Tue Dec 10 11:00:47 2024 +0100

    [Fix #3809] Allowing additional properties on user input (#3810)
---
 .../serverless/workflow/models/JsonNodeModel.java   |  9 +++++++++
 .../workflow/models/JsonNodeModelInput.java         | 21 +++++++++++++--------
 .../kogito/quarkus/workflows/ExpressionRestIT.java  |  2 +-
 3 files changed, 23 insertions(+), 9 deletions(-)

diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
index cd8bdb78eb..0897cc7729 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
@@ -50,7 +50,15 @@ public class JsonNodeModel implements Model, MapInput, 
MapInputId, MapOutput, Ma
         this(null, workflowdata);
     }
 
+    public JsonNodeModel(Object workflowdata, Map<String, Object> 
additionalProperties) {
+        this(null, workflowdata, additionalProperties);
+    }
+
     public JsonNodeModel(String id, Object workflowdata) {
+        this(id, workflowdata, Collections.emptyMap());
+    }
+
+    public JsonNodeModel(String id, Object workflowdata, Map<String, Object> 
additionalProperties) {
         this.id = id;
         if (workflowdata instanceof JsonNode) {
             this.workflowdata = (JsonNode) workflowdata;
@@ -59,6 +67,7 @@ public class JsonNodeModel implements Model, MapInput, 
MapInputId, MapOutput, Ma
             this.workflowdata = workflowdata == null ? 
mapper.createObjectNode() : mapper.convertValue(workflowdata, JsonNode.class);
         }
         this.input = this.workflowdata.deepCopy();
+        this.additionalProperties = additionalProperties == null ? 
Collections.emptyMap() : additionalProperties;
     }
 
     public String getId() {
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
index 98adedb04f..d53aa9ea77 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
@@ -18,20 +18,23 @@
  */
 package org.kie.kogito.serverless.workflow.models;
 
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 import org.kie.kogito.MapInput;
 import org.kie.kogito.MapInputId;
 import org.kie.kogito.MapOutput;
 import org.kie.kogito.MappableToModel;
 import org.kie.kogito.Model;
-import org.kie.kogito.jackson.utils.ObjectMapperFactory;
 
 import com.fasterxml.jackson.annotation.JsonAnySetter;
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class JsonNodeModelInput implements Model, MapInput, MapInputId, 
MapOutput, MappableToModel<JsonNodeModel> {
 
     private Object workflowdata;
+    private Map<String, Object> additionalProperties;
 
     public Object getWorkflowdata() {
         return workflowdata;
@@ -39,16 +42,18 @@ public class JsonNodeModelInput implements Model, MapInput, 
MapInputId, MapOutpu
 
     @JsonAnySetter
     public void setData(String key, JsonNode value) {
-        if (workflowdata == null) {
-            workflowdata = 
ObjectMapperFactory.listenerAware().createObjectNode();
-        }
-        if (workflowdata instanceof ObjectNode) {
-            ((ObjectNode) workflowdata).set(key, value);
+        if (additionalProperties == null) {
+            additionalProperties = new LinkedHashMap<>();
         }
+        additionalProperties.put(key, value);
     }
 
     @Override
     public JsonNodeModel toModel() {
-        return new JsonNodeModel(workflowdata);
+        if (workflowdata == null) {
+            workflowdata = additionalProperties;
+            additionalProperties = Collections.emptyMap();
+        }
+        return new JsonNodeModel(workflowdata, additionalProperties);
     }
 }
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
index d6d4122929..5f0b44234a 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
@@ -38,7 +38,7 @@ class ExpressionRestIT {
                 .contentType(ContentType.JSON)
                 .accept(ContentType.JSON)
                 .header("pepe", "pepa")
-                .body("{\"workflowdata\":{\"numbers\":[{\"x\":2, \"y\": 
1},{\"x\":4, \"y\": 3}]}}").when()
+                .body("{\"workflowdata\":{\"numbers\":[{\"x\":2, \"y\": 
1},{\"x\":4, \"y\": 3}]}, \"randomAdditionalProperty\":\"Im ignored in runtimes 
but will be visible on data index\"}").when()
                 .post("/expression")
                 .then()
                 .statusCode(201)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to