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]