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 c822a66a9b [Fix_#3451] Fixing start event state filtering (#3542)
c822a66a9b is described below
commit c822a66a9bae463f46e5f44968e98dbaaa0d90fa
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Tue Jun 4 12:51:55 2024 +0200
[Fix_#3451] Fixing start event state filtering (#3542)
* [Fix_#3451] Fixing start event state filtering
* [Fix_#3451] Add IT test
---
.../workflow/parser/handlers/EventHandler.java | 3 +-
.../workflow/parser/handlers/StateHandler.java | 12 +++++--
.../src/main/resources/application.properties | 6 ++++
.../src/main/resources/greetCustomer.sw.json | 41 ++++++++++++++++++++++
.../kie/kogito/quarkus/workflows/EventFlowIT.java | 22 ++++++++++++
5 files changed, 80 insertions(+), 4 deletions(-)
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
index 9ccecb22a7..6c95879a01 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
@@ -30,7 +30,6 @@ import org.jbpm.ruleflow.core.factory.StartNodeFactory;
import org.jbpm.workflow.core.node.Join;
import org.jbpm.workflow.core.node.Split;
import org.kie.kogito.serverless.workflow.parser.ParserContext;
-import org.kie.kogito.serverless.workflow.parser.ServerlessWorkflowParser;
import io.serverlessworkflow.api.Workflow;
import io.serverlessworkflow.api.events.OnEvents;
@@ -65,7 +64,7 @@ public class EventHandler extends
CompositeContextNodeHandler<EventState> {
private MakeNodeResult processOnEvent(RuleFlowNodeContainerFactory<?, ?>
factory, OnEvents onEvent) {
MakeNodeResult result = joinNodes(factory,
- onEvent.getEventRefs(), (fact, onEventRef) ->
filterAndMergeNode(fact, onEvent.getEventDataFilter(), isStartState ?
ServerlessWorkflowParser.DEFAULT_WORKFLOW_VAR : getVarName(),
+ onEvent.getEventRefs(), (fact, onEventRef) ->
filterAndMergeNode(fact, onEvent.getEventDataFilter(), getVarName(),
(f, inputVar, outputVar) -> buildEventNode(f,
onEventRef, inputVar, outputVar)));
CompositeContextNodeFactory<?> embeddedSubProcess =
handleActions(makeCompositeNode(factory), onEvent.getActions());
connect(result.getOutgoingNode(), embeddedSubProcess);
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
index 63610ad6b7..5c9caf6f45 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
@@ -50,6 +50,7 @@ import org.kie.kogito.internal.utils.KogitoTags;
import org.kie.kogito.serverless.workflow.SWFConstants;
import org.kie.kogito.serverless.workflow.parser.ParserContext;
import org.kie.kogito.serverless.workflow.parser.ServerlessWorkflowParser;
+import org.kie.kogito.serverless.workflow.parser.VariableInfo;
import org.kie.kogito.serverless.workflow.suppliers.CollectorActionSupplier;
import org.kie.kogito.serverless.workflow.suppliers.CompensationActionSupplier;
import
org.kie.kogito.serverless.workflow.suppliers.ErrorExpressionActionSupplier;
@@ -424,7 +425,8 @@ public abstract class StateHandler<S extends State> {
toExpr = eventFilter.getToStateData();
useData = eventFilter.isUseData();
}
- return filterAndMergeNode(embeddedSubProcess, varName, null, dataExpr,
toExpr, useData, true, nodeSupplier);
+ return filterAndMergeNode(embeddedSubProcess, isStartState ? new
VariableInfo(DEFAULT_WORKFLOW_VAR, varName) : new VariableInfo(varName,
varName), null, dataExpr, toExpr, useData, true,
+ nodeSupplier);
}
protected boolean isTempVariable(String varName) {
@@ -434,7 +436,13 @@ public abstract class StateHandler<S extends State> {
protected final MakeNodeResult
filterAndMergeNode(RuleFlowNodeContainerFactory<?, ?> embeddedSubProcess,
String actionVarName, String fromStateExpr, String resultExpr, String
toStateExpr,
boolean useData,
boolean shouldMerge, FilterableNodeSupplier nodeSupplier) {
+ return filterAndMergeNode(embeddedSubProcess, new
VariableInfo(actionVarName, actionVarName), fromStateExpr, resultExpr,
toStateExpr, useData, shouldMerge, nodeSupplier);
+ }
+ protected final MakeNodeResult
filterAndMergeNode(RuleFlowNodeContainerFactory<?, ?> embeddedSubProcess,
VariableInfo variableInfo, String fromStateExpr, String resultExpr, String
toStateExpr,
+ boolean useData,
+ boolean shouldMerge, FilterableNodeSupplier nodeSupplier) {
+ String actionVarName = variableInfo.getOutputVar();
if (isTempVariable(actionVarName)) {
embeddedSubProcess.variable(actionVarName, new
ObjectDataType(JsonNode.class.getCanonicalName()),
Map.of(KogitoTags.VARIABLE_TAGS, KogitoTags.INTERNAL_TAG));
}
@@ -451,7 +459,7 @@ public abstract class StateHandler<S extends State> {
if (useData && resultExpr != null) {
currentNode = connect(currentNode,
embeddedSubProcess.actionNode(parserContext.newId()).action(ExpressionActionSupplier.of(workflow,
resultExpr)
- .withVarNames(actionVarName, actionVarName).build()));
+ .withVarNames(variableInfo.getInputVar(),
actionVarName).build()));
}
if (useData) {
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties
index bff2cf96b0..8b83e2da2f 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/application.properties
@@ -64,6 +64,12 @@ mp.messaging.incoming.never.path=/never
mp.messaging.incoming.eventTimeout1.connector=quarkus-http
mp.messaging.incoming.eventTimeout1.path=/eventTimeout1
+mp.messaging.incoming.eventTimeout1.connector=quarkus-http
+mp.messaging.incoming.eventTimeout1.path=/eventTimeout1
+
+mp.messaging.incoming.customer-arrival-type.connector=quarkus-http
+mp.messaging.incoming.customer-arrival-type.path=/eventWithToStateFilter
+
mp.messaging.incoming.eventTimeout2.connector=quarkus-http
mp.messaging.incoming.eventTimeout2.path=/eventTimeout2
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/greetCustomer.sw.json
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/greetCustomer.sw.json
new file mode 100644
index 0000000000..a3f5f1492b
--- /dev/null
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/greetCustomer.sw.json
@@ -0,0 +1,41 @@
+{
+"id": "GreetCustomer",
+"name": "Greet Customers when they arrive",
+"version": "1.0",
+"specVersion": "0.8",
+"start": "WaitForCustomerToArrive",
+"states":[
+{
+"name": "WaitForCustomerToArrive",
+"type": "event",
+"onEvents": [{
+"eventRefs": ["CustomerArrivesEvent"],
+"eventDataFilter": {
+"data": "${ .customer }",
+"toStateData": "${ .customerInfo }"
+},
+"actions":[
+{
+"functionRef": {
+"refName": "greetingFunction",
+"arguments": {
+"message": "${ .customerInfo.name } "
+}
+}
+}
+]
+}],
+"end": true
+}
+],
+"events": [{
+"name": "CustomerArrivesEvent",
+"type": "customer-arrival-type",
+"source": "customer-arrival-event-source"
+}],
+"functions": [{
+"name": "greetingFunction",
+ "type": "custom",
+ "operation": "sysout"
+}]
+}
\ No newline at end of file
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/EventFlowIT.java
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/EventFlowIT.java
index 91ede4a21f..bd96c50117 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/EventFlowIT.java
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/EventFlowIT.java
@@ -19,9 +19,13 @@
package org.kie.kogito.quarkus.workflows;
import java.io.IOException;
+import java.net.URI;
import java.time.Duration;
+import java.time.OffsetDateTime;
+import java.util.Collections;
import java.util.Map;
import java.util.Optional;
+import java.util.UUID;
import org.awaitility.core.ConditionTimeoutException;
import org.junit.jupiter.api.BeforeAll;
@@ -32,6 +36,7 @@ import
org.kie.kogito.workflows.services.JavaSerializationMarshaller;
import com.fasterxml.jackson.databind.ObjectMapper;
+import io.cloudevents.core.builder.CloudEventBuilder;
import io.cloudevents.jackson.JsonFormat;
import io.quarkus.test.junit.QuarkusIntegrationTest;
import io.restassured.RestAssured;
@@ -56,6 +61,23 @@ class EventFlowIT {
defaultMarshaller = new ByteArrayCloudEventMarshaller(mapper);
}
+ @Test
+ void testStartingEventWithToStateFilter() {
+ given()
+ .contentType(ContentType.JSON)
+ .when()
+ .body(CloudEventBuilder.v1()
+ .withId(UUID.randomUUID().toString())
+
.withSource(URI.create("customer-arrival-event-source"))
+ .withType("customer-arrival-type")
+ .withTime(OffsetDateTime.now())
+
.withData(defaultMarshaller.cloudEventDataFactory().apply(Collections.singletonMap("customer",
Map.of("name", "pepe")))).build())
+ .post("/eventWithToStateFilter")
+ .then()
+ .statusCode(202);
+
+ }
+
@Test
void testNotStartingEvent() throws IOException {
doIt("nonStartEvent", Optional.of("manolo"), "move");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]