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 a5c4af196e Fix #3307 (#3309)
a5c4af196e is described below

commit a5c4af196eaf2f9cacff4ff465cb0144e1ed3587
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Tue Dec 5 17:40:25 2023 +0100

    Fix #3307 (#3309)
    
    * Fix #3307 - Easier string interpolation
    
    As proposed in the issue description, remove the need for initial
    quoutes in case of string interpolation
    
    * Alternative implementation using optional
---
 .../java/org/kie/kogito/expr/jq/JqExpression.java  | 29 +++++++++++++++++++++-
 .../StaticFluentWorkflowApplicationTest.java       | 14 +++++++++--
 2 files changed, 40 insertions(+), 3 deletions(-)

diff --git 
a/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
 
b/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
index d18b7f39ee..9438aca822 100644
--- 
a/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
+++ 
b/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Supplier;
 
@@ -46,6 +47,7 @@ import net.thisptr.jackson.jq.Version;
 import net.thisptr.jackson.jq.exception.JsonQueryException;
 import net.thisptr.jackson.jq.internal.javacc.ExpressionParser;
 import net.thisptr.jackson.jq.internal.tree.FunctionCall;
+import net.thisptr.jackson.jq.internal.tree.StringInterpolation;
 import net.thisptr.jackson.jq.internal.tree.binaryop.BinaryOperatorExpression;
 
 public class JqExpression implements Expression {
@@ -76,13 +78,38 @@ public class JqExpression implements Expression {
         this.expr = expr;
         this.scope = scope;
         try {
-            this.internalExpr = ExpressionParser.compile(expr, version);
+            this.internalExpr = compile(version);
             checkFunctionCall(internalExpr);
         } catch (JsonQueryException ex) {
             validationError = ex;
         }
     }
 
+    private net.thisptr.jackson.jq.Expression compile(Version version) throws 
JsonQueryException {
+        net.thisptr.jackson.jq.Expression expression;
+        try {
+            expression = ExpressionParser.compile(expr, version);
+        } catch (JsonQueryException ex) {
+            expression = handleStringInterpolation(version).orElseThrow(() -> 
ex);
+        }
+        checkFunctionCall(expression);
+        return expression;
+    }
+
+    private Optional<net.thisptr.jackson.jq.Expression> 
handleStringInterpolation(Version version) {
+        if (!expr.startsWith("\"")) {
+            try {
+                net.thisptr.jackson.jq.Expression expression = 
ExpressionParser.compile("\"" + expr + "\"", version);
+                if (expression instanceof StringInterpolation) {
+                    return Optional.of(expression);
+                }
+            } catch (JsonQueryException ex) {
+                // ignoring it
+            }
+        }
+        return Optional.empty();
+    }
+
     private interface TypedOutput extends Output {
         Object getResult();
     }
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
index c187dc6f82..d96afcd2c9 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-core/src/test/java/org/kie/kogito/serverless/workflow/executor/StaticFluentWorkflowApplicationTest.java
@@ -189,11 +189,21 @@ public class StaticFluentWorkflowApplicationTest {
 
     @Test
     void testInterpolation() {
+        interpolation("\"My name is \\(.name) and my surname is 
\\(.surname)\"");
+    }
+
+    @Test
+    void testAbreviatedInterpolation() {
+        interpolation("My name is \\(.name) and my surname is \\(.surname)");
+    }
+
+    private void interpolation(String text) {
         final String INTERPOLATION = "interpolation";
         try (StaticWorkflowApplication application = 
StaticWorkflowApplication.create()) {
-            Workflow workflow = 
workflow("PlayingWithExpression").function(expr(INTERPOLATION, "\"My name is 
\\(.name)\""))
+            Workflow workflow = 
workflow("PlayingWithExpression").function(expr(INTERPOLATION, text))
                     
.start(operation().action(call(INTERPOLATION))).end().build();
-            assertThat(application.execute(workflow, 
Collections.singletonMap("name", 
"Javierito")).getWorkflowdata().get("response").asText()).isEqualTo("My name is 
Javierito");
+            assertThat(application.execute(workflow, Map.of("name", 
"Javierito", "surname", "unknown")).getWorkflowdata().get("response").asText())
+                    .isEqualTo("My name is Javierito and my surname is 
unknown");
         }
     }
 


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

Reply via email to