This is an automated email from the ASF dual-hosted git repository.
egonzalez 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 2b44f00a2a [incubator-kie-issues-1286] Adhoc functionality missing in
kogito jBPM engine (#3543)
2b44f00a2a is described below
commit 2b44f00a2a6f01506b13188f2bab6f6aa9dc58af
Author: Enrique <[email protected]>
AuthorDate: Thu Jun 13 08:36:32 2024 +0200
[incubator-kie-issues-1286] Adhoc functionality missing in kogito jBPM
engine (#3543)
---
.../org/jbpm/bpmn2/xml/AdHocSubProcessHandler.java | 11 ++-
.../compiler/canonical/DynamicNodeVisitor.java | 23 +++---
.../builtin/JavaConstraintEvaluatorBuilder.java | 48 +++++++++++-
.../canonical/node/DynamicNodeVisitorBuilder.java | 2 +-
.../ruleflow/core/factory/DynamicNodeFactory.java | 8 +-
.../org/jbpm/workflow/core/node/DynamicNode.java | 20 ++---
.../workflow/instance/NodeInstanceContainer.java | 21 ++++--
.../instance/impl/WorkflowProcessInstanceImpl.java | 1 +
.../process/impl/AbstractProcessInstance.java | 19 ++---
.../process/impl/AbstractProcessInstanceTest.java | 2 +-
.../adhoc}/BPMN2-AdHocSubProcessAutoComplete.bpmn2 | 2 +-
...MN2-AdHocSubProcessAutoCompleteExpression.bpmn2 | 2 +-
...N2-AdHocSubProcessEmptyCompleteExpression.bpmn2 | 2 +-
.../adhoc}/BPMN2-AdHocTerminateEndEvent.bpmn2 | 2 +-
.../src/test/java/org/jbpm/bpmn2/ActivityTest.java | 10 ---
.../org/jbpm/bpmn2/StandaloneBPMNProcessTest.java | 87 ++++++++++++++++++----
.../test/resources/cases/CaseWithTwoStages.bpmn2 | 2 +-
.../cases/CaseWithTwoStagesConditions.bpmn2 | 4 +-
.../src/test/resources/cases/EmptyCaseStage.bpmn2 | 4 +-
.../NoStartNodeCaseWithBoundaryTimerStage.bpmn2 | 2 +-
...StartNodeAdhocCaseWithActivationCondition.bpmn2 | 2 +-
...hocCaseWithActivationConditionNoTerminate.bpmn2 | 2 +-
.../completion/StageWithTaskCaseDataBoolean.bpmn2 | 2 +-
.../completion/StageWithTaskCaseDataInteger.bpmn2 | 2 +-
.../completion/StageWithTaskCaseDataString.bpmn2 | 2 +-
25 files changed, 194 insertions(+), 88 deletions(-)
diff --git
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AdHocSubProcessHandler.java
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AdHocSubProcessHandler.java
index 8d11bbc3dc..89a24f9513 100755
---
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AdHocSubProcessHandler.java
+++
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AdHocSubProcessHandler.java
@@ -63,17 +63,26 @@ public class AdHocSubProcessHandler extends
CompositeContextNodeHandler {
if ("false".equals(cancelRemainingInstances)) {
dynamicNode.setCancelRemainingInstances(false);
}
+
+ dynamicNode.setLanguage("http://www.java.com/java");
+
// by default it should not autocomplete as it's adhoc
org.w3c.dom.Node xmlNode = element.getFirstChild();
dynamicNode.setActivationCondition((String)
node.getMetaData().get(CUSTOM_ACTIVATION_CONDITION));
while (xmlNode != null) {
String nodeName = xmlNode.getNodeName();
if (COMPLETION_CONDITION.equals(nodeName)) {
+ Element completeConditionElement = (Element) xmlNode;
+ String dialect =
completeConditionElement.getAttribute("language");
+
String expression = xmlNode.getTextContent();
if (AUTOCOMPLETE_EXPRESSIONS.contains(expression)) {
dynamicNode.setAutoComplete(true);
} else {
dynamicNode.setCompletionCondition(expression);
+ if (!dialect.isBlank()) {
+ dynamicNode.setLanguage(dialect);
+ }
}
}
xmlNode = xmlNode.getNextSibling();
@@ -104,7 +113,7 @@ public class AdHocSubProcessHandler extends
CompositeContextNodeHandler {
visitConnectionsAndAssociations(dynamicNode, xmlDump, metaDataType);
if (dynamicNode.isAutoComplete()) {
- xmlDump.append(" <completionCondition
xsi:type=\"tFormalExpression\">" + AUTOCOMPLETE_COMPLETION_CONDITION +
"</completionCondition>" + EOL);
+ xmlDump.append("<completionCondition
xsi:type=\"tFormalExpression\" language=\"" + dynamicNode.getLanguage() + "\">"
+ AUTOCOMPLETE_COMPLETION_CONDITION + "</completionCondition>" + EOL);
}
endNode("adHocSubProcess", xmlDump);
}
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/DynamicNodeVisitor.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/DynamicNodeVisitor.java
index 6535aa5466..f2bd31f7b1 100644
---
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/DynamicNodeVisitor.java
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/DynamicNodeVisitor.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Stream;
+import org.jbpm.compiler.canonical.builtin.ReturnValueEvaluatorBuilderService;
import org.jbpm.compiler.canonical.node.NodeVisitorBuilderService;
import org.jbpm.process.core.context.variable.VariableScope;
import org.jbpm.ruleflow.core.factory.DynamicNodeFactory;
@@ -35,8 +36,11 @@ import static
org.jbpm.ruleflow.core.factory.DynamicNodeFactory.METHOD_LANGUAGE;
public class DynamicNodeVisitor extends
CompositeContextNodeVisitor<DynamicNode> {
- public DynamicNodeVisitor(NodeVisitorBuilderService nodeVisitorService) {
+ private ReturnValueEvaluatorBuilderService builder;
+
+ public DynamicNodeVisitor(NodeVisitorBuilderService nodeVisitorService,
ClassLoader classLoader) {
super(nodeVisitorService);
+ this.builder =
ReturnValueEvaluatorBuilderService.instance(classLoader);
}
@Override
@@ -56,22 +60,23 @@ public class DynamicNodeVisitor extends
CompositeContextNodeVisitor<DynamicNode>
@Override
public Stream<MethodCallExpr> visitCustomFields(DynamicNode node,
VariableScope variableScope) {
+
Collection<MethodCallExpr> methods = new ArrayList<>();
methods.add(getFactoryMethod(getNodeId(node), METHOD_LANGUAGE,
getOrNullExpr(node.getLanguage())));
- if (node.getActivationCondition() != null &&
!node.getActivationCondition().trim().isEmpty()) {
- methods.add(getActivationConditionStatement(node, variableScope));
+ if (node.getActivationCondition() != null &&
!node.getActivationCondition().isBlank()) {
+ methods.add(getActivationConditionStatement(node));
}
- if (node.getCompletionCondition() != null &&
!node.getCompletionCondition().trim().isEmpty()) {
- methods.add(getCompletionConditionStatement(node, variableScope));
+ if (!node.isAutoComplete() && node.getCompletionCondition() != null &&
!node.getCompletionCondition().isBlank()) {
+ methods.add(getCompletionConditionStatement(node));
}
return methods.stream();
}
- private MethodCallExpr getActivationConditionStatement(DynamicNode node,
VariableScope scope) {
- return getFactoryMethod(getNodeId(node), METHOD_ACTIVATION_EXPRESSION,
createLambdaExpr(node.getActivationCondition(), scope));
+ private MethodCallExpr getActivationConditionStatement(DynamicNode node) {
+ return getFactoryMethod(getNodeId(node), METHOD_ACTIVATION_EXPRESSION,
builder.build(node, node.getLanguage(), node.getActivationCondition(),
Boolean.class, (String) null));
}
- private MethodCallExpr getCompletionConditionStatement(DynamicNode node,
VariableScope scope) {
- return getFactoryMethod(getNodeId(node), METHOD_COMPLETION_EXPRESSION,
createLambdaExpr(node.getCompletionCondition(), scope));
+ private MethodCallExpr getCompletionConditionStatement(DynamicNode node) {
+ return getFactoryMethod(getNodeId(node), METHOD_COMPLETION_EXPRESSION,
builder.build(node, node.getLanguage(), node.getCompletionCondition(),
Boolean.class, (String) null));
}
}
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
index d85f3fe76b..e6695526cc 100644
---
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
@@ -26,12 +26,14 @@ import org.jbpm.process.core.ContextResolver;
import org.jbpm.process.core.context.variable.Variable;
import org.jbpm.process.core.context.variable.VariableScope;
+import com.github.javaparser.ParseProblemException;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.LambdaExpr;
import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.stmt.BlockStmt;
+import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.type.UnknownType;
public class JavaConstraintEvaluatorBuilder implements
ReturnValueEvaluatorBuilder {
@@ -48,7 +50,20 @@ public class JavaConstraintEvaluatorBuilder implements
ReturnValueEvaluatorBuild
new Parameter(new UnknownType(), KCONTEXT_VAR), // (kcontext)
->
actionBody);
- BlockStmt blockStmt = StaticJavaParser.parseBlock("{" + expression +
"}");
+ BlockStmt blockStmt = parseIdentifier(expression);
+
+ if (blockStmt == null) {
+ blockStmt = parseExpression(expression);
+ }
+
+ if (blockStmt == null) {
+ blockStmt = parseStatement(expression);
+ }
+
+ if (blockStmt == null) {
+ blockStmt = StaticJavaParser.parseBlock("{" + expression + "}");
+ }
+
Set<NameExpr> identifiers = new
HashSet<>(blockStmt.findAll(NameExpr.class));
for (NameExpr v : identifiers) {
@@ -57,7 +72,7 @@ public class JavaConstraintEvaluatorBuilder implements
ReturnValueEvaluatorBuild
continue;
}
Variable variable =
variableScope.findVariable(v.getNameAsString());
-
actionBody.addStatement(AbstractNodeVisitor.makeAssignment(variable));
+ actionBody.addStatement(0,
AbstractNodeVisitor.makeAssignment(variable));
}
blockStmt.getStatements().forEach(actionBody::addStatement);
@@ -65,4 +80,33 @@ public class JavaConstraintEvaluatorBuilder implements
ReturnValueEvaluatorBuild
return lambda;
}
+ private BlockStmt parseStatement(String expression) {
+ try {
+ BlockStmt block = new BlockStmt();
+ block.addStatement(StaticJavaParser.parseStatement(expression));
+ return block;
+ } catch (ParseProblemException e) {
+ return null;
+ }
+ }
+
+ private BlockStmt parseExpression(String expression) {
+ try {
+ BlockStmt block = new BlockStmt();
+ block.addStatement(new
ReturnStmt(StaticJavaParser.parseExpression(expression)));
+ return block;
+ } catch (ParseProblemException e) {
+ return null;
+ }
+ }
+
+ private BlockStmt parseIdentifier(String expression) {
+ try {
+ BlockStmt block = new BlockStmt();
+ block.addStatement(new ReturnStmt(new
NameExpr(StaticJavaParser.parseSimpleName(expression.trim()))));
+ return block;
+ } catch (ParseProblemException e) {
+ return null;
+ }
+ }
}
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/node/DynamicNodeVisitorBuilder.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/node/DynamicNodeVisitorBuilder.java
index f463651f74..fdf5f54821 100644
---
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/node/DynamicNodeVisitorBuilder.java
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/node/DynamicNodeVisitorBuilder.java
@@ -32,7 +32,7 @@ public class DynamicNodeVisitorBuilder implements
NodeVisitorBuilder {
@Override
public AbstractNodeVisitor<? extends Node>
visitor(NodeVisitorBuilderService nodeVisitorService, ClassLoader classLoader) {
- return new DynamicNodeVisitor(nodeVisitorService);
+ return new DynamicNodeVisitor(nodeVisitorService, classLoader);
}
}
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/DynamicNodeFactory.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/DynamicNodeFactory.java
index 53acb5bcdc..c956b05198 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/DynamicNodeFactory.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/DynamicNodeFactory.java
@@ -18,13 +18,11 @@
*/
package org.jbpm.ruleflow.core.factory;
-import java.util.function.Predicate;
-
+import org.jbpm.process.instance.impl.ReturnValueEvaluator;
import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory;
import org.jbpm.workflow.core.NodeContainer;
import org.jbpm.workflow.core.node.DynamicNode;
import org.kie.api.definition.process.WorkflowElementIdentifier;
-import org.kie.api.runtime.process.ProcessContext;
public class DynamicNodeFactory<T extends RuleFlowNodeContainerFactory<T, ?>>
extends AbstractCompositeNodeFactory<DynamicNodeFactory<T>, T> {
@@ -45,12 +43,12 @@ public class DynamicNodeFactory<T extends
RuleFlowNodeContainerFactory<T, ?>> ex
return this;
}
- public DynamicNodeFactory<T>
activationExpression(Predicate<ProcessContext> activationExpression) {
+ public DynamicNodeFactory<T> activationExpression(ReturnValueEvaluator
activationExpression) {
getDynamicNode().setActivationExpression(activationExpression);
return this;
}
- public DynamicNodeFactory<T>
completionExpression(Predicate<ProcessContext> completionExpression) {
+ public DynamicNodeFactory<T> completionExpression(ReturnValueEvaluator
completionExpression) {
getDynamicNode().setCompletionExpression(completionExpression);
return this;
}
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
index d09348f1e5..d38584d943 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
@@ -20,12 +20,12 @@ package org.jbpm.workflow.core.node;
import java.util.Arrays;
import java.util.List;
-import java.util.function.Predicate;
import java.util.stream.Collectors;
+import org.jbpm.process.instance.impl.ReturnValueEvaluator;
import org.kie.api.definition.process.Node;
import org.kie.api.definition.process.WorkflowElementIdentifier;
-import org.kie.api.runtime.process.ProcessContext;
+import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
import static org.jbpm.ruleflow.core.Metadata.CUSTOM_AUTO_START;
@@ -42,8 +42,8 @@ public class DynamicNode extends CompositeContextNode {
*/
private String completionCondition;
- private Predicate<ProcessContext> activationPredicate;
- private Predicate<ProcessContext> completionPredicate;
+ private ReturnValueEvaluator activationPredicate;
+ private ReturnValueEvaluator completionPredicate;
private String language;
public DynamicNode() {
@@ -89,22 +89,22 @@ public class DynamicNode extends CompositeContextNode {
this.completionCondition = completionCondition;
}
- public DynamicNode setActivationExpression(Predicate<ProcessContext>
activationPredicate) {
+ public DynamicNode setActivationExpression(ReturnValueEvaluator
activationPredicate) {
this.activationPredicate = activationPredicate;
return this;
}
- public DynamicNode setCompletionExpression(Predicate<ProcessContext>
copmletionPredicate) {
+ public DynamicNode setCompletionExpression(ReturnValueEvaluator
copmletionPredicate) {
this.completionPredicate = copmletionPredicate;
return this;
}
- public boolean canActivate(ProcessContext context) {
- return activationPredicate == null ||
activationPredicate.test(context);
+ public boolean canActivate(KogitoProcessContext context) {
+ return activationPredicate == null || (Boolean)
activationPredicate.evaluate(context);
}
- public boolean canComplete(ProcessContext context) {
- return isAutoComplete() || (completionPredicate != null &&
completionPredicate.test(context));
+ public boolean canComplete(KogitoProcessContext context) {
+ return isAutoComplete() || (completionPredicate != null && (Boolean)
completionPredicate.evaluate(context));
}
public boolean hasCompletionCondition() {
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstanceContainer.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstanceContainer.java
index 3fb400cc16..736c4b2d3a 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstanceContainer.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstanceContainer.java
@@ -20,11 +20,13 @@ package org.jbpm.workflow.instance;
import java.util.Collection;
import java.util.Map;
+import java.util.function.Predicate;
import org.jbpm.workflow.core.node.AsyncEventNode;
import org.kie.api.definition.process.Node;
import org.kie.api.definition.process.NodeContainer;
import org.kie.api.definition.process.WorkflowElementIdentifier;
+import org.kie.kogito.internal.process.runtime.KogitoNode;
import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
import org.kie.kogito.internal.process.runtime.KogitoNodeInstanceContainer;
@@ -61,12 +63,11 @@ public interface NodeInstanceContainer extends
KogitoNodeInstanceContainer {
NodeInstance getNodeInstance(String nodeInstanceId, boolean recursive);
- default NodeInstance getByNodeDefinitionId(final String nodeDefinitionId,
NodeContainer nodeContainer) {
+ default NodeInstance getNodeByPredicate(NodeContainer nodeContainer,
Predicate<KogitoNode> nodeTest) {
for (Node node : nodeContainer.getNodes()) {
-
- if (nodeDefinitionId.equals(node.getUniqueId())) {
+ if (nodeTest.test((KogitoNode) node)) {
if (nodeContainer instanceof Node) {
- Collection<KogitoNodeInstance> nodeInstances =
getKogitoNodeInstances(ni -> ni.getNode().getId() == (((Node)
nodeContainer).getId()), true);
+ Collection<KogitoNodeInstance> nodeInstances =
getKogitoNodeInstances(ni -> ni.getNode().getId().equals(((Node)
nodeContainer).getId()), true);
if (nodeInstances.isEmpty()) {
return ((NodeInstanceContainer) getNodeInstance((Node)
nodeContainer)).getNodeInstance(node);
} else {
@@ -78,15 +79,21 @@ public interface NodeInstanceContainer extends
KogitoNodeInstanceContainer {
}
if (node instanceof NodeContainer) {
- NodeInstance ni = getByNodeDefinitionId(nodeDefinitionId,
((NodeContainer) node));
-
+ NodeInstance ni = getNodeByPredicate(((NodeContainer) node),
nodeTest);
if (ni != null) {
return ni;
}
}
}
+ return null;
+ }
- throw new IllegalArgumentException("Node with definition id " +
nodeDefinitionId + " was not found");
+ default NodeInstance getByNodeDefinitionId(String nodeDefinitionId,
NodeContainer nodeContainer) {
+ NodeInstance nodeInstance = getNodeByPredicate(nodeContainer, ni ->
nodeDefinitionId.equals(ni.getUniqueId()));
+ if (nodeInstance == null) {
+ throw new IllegalArgumentException("Node with definition id " +
nodeDefinitionId + " was not found");
+ }
+ return nodeInstance;
}
default Node resolveAsync(Node node) {
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
index 1646335437..f701582070 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
@@ -1228,4 +1228,5 @@ public abstract class WorkflowProcessInstanceImpl extends
ProcessInstanceImpl im
public final ProcessInstance<?> unwrap() {
return this.kogitoProcessInstance;
}
+
}
diff --git
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
index 9f49340e95..a035be6bf4 100644
---
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
+++
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
@@ -40,7 +40,6 @@ import org.jbpm.ruleflow.core.RuleFlowProcess;
import org.jbpm.workflow.core.Node;
import org.jbpm.workflow.core.WorkflowProcess;
import org.jbpm.workflow.instance.NodeInstance;
-import org.jbpm.workflow.instance.NodeInstanceContainer;
import org.jbpm.workflow.instance.WorkflowProcessInstance;
import org.jbpm.workflow.instance.impl.NodeInstanceImpl;
import org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl;
@@ -441,17 +440,13 @@ public abstract class AbstractProcessInstance<T extends
Model> implements Proces
WorkflowProcessInstance wfpi = processInstance();
RuleFlowProcess rfp = ((RuleFlowProcess) wfpi.getProcess());
- org.kie.api.definition.process.Node node = rfp.getNodesRecursively()
- .stream()
- .filter(ni -> Objects.equals(nodeId, ni.getUniqueId()) ||
Objects.equals(nodeId, ni.getName()) || Objects.equals(nodeId,
ni.getId().toExternalFormat()))
- .findFirst()
- .orElseThrow(() -> new NodeNotFoundException(this.id, nodeId));
-
- org.kie.api.definition.process.Node parentNode =
rfp.getParentNode(node.getId());
-
- NodeInstanceContainer nodeInstanceContainerNode = parentNode == null ?
wfpi : ((NodeInstanceContainer) wfpi.getNodeInstance(parentNode));
-
- nodeInstanceContainerNode.getNodeInstance(node).trigger(null,
Node.CONNECTION_DEFAULT_TYPE);
+ // we avoid create containers incorrectly
+ NodeInstance nodeInstance = wfpi.getNodeByPredicate(rfp,
+ ni -> Objects.equals(nodeId, ni.getName()) ||
Objects.equals(nodeId, ni.getId().toExternalFormat()));
+ if (nodeInstance == null) {
+ throw new NodeNotFoundException(this.id, nodeId);
+ }
+ nodeInstance.trigger(null, Node.CONNECTION_DEFAULT_TYPE);
addToUnitOfWork(pi -> ((MutableProcessInstances<T>)
process.instances()).update(pi.id(), pi));
}
diff --git
a/jbpm/jbpm-flow/src/test/java/org/kie/kogito/process/impl/AbstractProcessInstanceTest.java
b/jbpm/jbpm-flow/src/test/java/org/kie/kogito/process/impl/AbstractProcessInstanceTest.java
index d2b9ec8cf3..cb88221760 100644
---
a/jbpm/jbpm-flow/src/test/java/org/kie/kogito/process/impl/AbstractProcessInstanceTest.java
+++
b/jbpm/jbpm-flow/src/test/java/org/kie/kogito/process/impl/AbstractProcessInstanceTest.java
@@ -120,7 +120,7 @@ public class AbstractProcessInstanceTest {
when(process.getNodesRecursively()).thenReturn(Arrays.asList(node));
NodeInstance nodeInstance = mock(NodeInstance.class);
- when(wpi.getNodeInstance(node)).thenReturn(nodeInstance);
+ when(wpi.getNodeByPredicate(any(), any())).thenReturn(nodeInstance);
return nodeInstance;
}
diff --git
a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.bpmn2
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessAutoComplete.bpmn2
similarity index 95%
rename from
jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.bpmn2
rename to
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessAutoComplete.bpmn2
index 3c942c209a..b2dd1c612b 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.bpmn2
+++
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessAutoComplete.bpmn2
@@ -30,7 +30,7 @@
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools">
- <process processType="Private" isExecutable="true" id="AdHocSubProcess"
name="AdHoc SubProcess" >
+ <process processType="Private" isExecutable="true"
id="AdHocSubProcessAutoComplete" name="AdHoc SubProcess"
tns:packageName="org.jbpm.bpmn2.adhoc" >
<!-- nodes -->
<startEvent id="_1" name="StartProcess" />
diff --git
a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessAutoCompleteExpression.bpmn2
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessAutoCompleteExpression.bpmn2
similarity index 97%
rename from
jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessAutoCompleteExpression.bpmn2
rename to
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessAutoCompleteExpression.bpmn2
index 205c19e6d5..06ebccda42 100755
---
a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessAutoCompleteExpression.bpmn2
+++
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessAutoCompleteExpression.bpmn2
@@ -31,7 +31,7 @@
xmlns:tns="http://www.jboss.org/drools">
<itemDefinition id="_testItem" structureRef="Integer" />
- <process processType="Private" isExecutable="true" id="AdHocSubProcess"
name="AdHoc SubProcess" >
+ <process processType="Private" isExecutable="true"
id="AdHocSubProcessAutoCompleteExpression" name="AdHoc SubProcess"
tns:packageName="org.jbpm.bpmn2.adhoc" >
<!-- process variables -->
<property id="counter" itemSubjectRef="_testItem"/>
<!-- nodes -->
diff --git
a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2
similarity index 97%
rename from
jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2
rename to
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2
index 533b6c68e5..6c078136ee 100755
---
a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2
+++
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2
@@ -31,7 +31,7 @@
xmlns:tns="http://www.jboss.org/drools">
<itemDefinition id="_testItem" structureRef="Integer" />
- <process processType="Private" isExecutable="true" id="AdHocSubProcess"
name="AdHoc SubProcess" >
+ <process processType="Private" isExecutable="true"
id="AdHocSubProcessEmptyCompleteExpression" name="AdHoc SubProcess"
tns:packageName="org.jbpm.bpmn2.adhoc">
<!-- process variables -->
<property id="counter" itemSubjectRef="_testItem"/>
<!-- nodes -->
diff --git
a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocTerminateEndEvent.bpmn2
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocTerminateEndEvent.bpmn2
similarity index 98%
rename from
jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocTerminateEndEvent.bpmn2
rename to
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocTerminateEndEvent.bpmn2
index 151b557c71..319d62e905 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-AdHocTerminateEndEvent.bpmn2
+++
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/adhoc/BPMN2-AdHocTerminateEndEvent.bpmn2
@@ -20,7 +20,7 @@
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.omg.org/bpmn20"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:bpsim="http://www.bpsim.org/schemas/1.0"
xmlns:color="http://www.omg.org/spec/BPMN/non-normative/color"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:drools="http://www.jboss.org/drools" id="_3hd3Ef_IEeWMZ [...]
<bpmn2:itemDefinition id="_testItem" structureRef="Boolean" />
- <bpmn2:process id="AdHocWithTerminateEnd" drools:packageName="org.jbpm"
drools:version="1.0" name="AdHocWithTerminateEnd" isExecutable="true">
+ <bpmn2:process id="AdHocTerminateEndEvent"
drools:packageName="org.jbpm.bpmn2.adhoc" drools:version="1.0"
name="AdHocWithTerminateEnd" isExecutable="true">
<bpmn2:property id="complete" itemSubjectRef="_testItem"/>
<bpmn2:startEvent id="processStartEvent" drools:selectable="true"
color:background-color="#9acd32" color:border-color="#000000"
color:color="#000000" name="">
<bpmn2:extensionElements>
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
index 84904b83d1..bec42d0825 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
@@ -1332,16 +1332,6 @@ public class ActivityTest extends JbpmBpmn2TestCase {
}
}
- @Test
- public void testAdHocSubProcessEmptyCompleteExpression() throws Exception {
- try {
-
createKogitoProcessRuntime("BPMN2-AdHocSubProcessEmptyCompleteExpression.bpmn2");
- fail("Process should be invalid, there should be build errors");
- } catch (RuntimeException e) {
- // there should be build errors
- }
- }
-
@Test
public void testSubProcessWithTypeVariable() throws Exception {
kruntime =
createKogitoProcessRuntime("org/jbpm/bpmn2/subprocess/BPMN2-SubProcessWithTypeVariable.bpmn2");
diff --git
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
index d83fe47a3a..5a127d95c4 100755
---
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
+++
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
@@ -24,12 +24,20 @@ import java.io.StringReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilderFactory;
+import org.jbpm.bpmn2.adhoc.AdHocSubProcessAutoCompleteExpressionModel;
+import org.jbpm.bpmn2.adhoc.AdHocSubProcessAutoCompleteExpressionProcess;
+import org.jbpm.bpmn2.adhoc.AdHocSubProcessAutoCompleteModel;
+import org.jbpm.bpmn2.adhoc.AdHocSubProcessAutoCompleteProcess;
+import org.jbpm.bpmn2.adhoc.AdHocSubProcessEmptyCompleteExpressionProcess;
+import org.jbpm.bpmn2.adhoc.AdHocTerminateEndEventModel;
+import org.jbpm.bpmn2.adhoc.AdHocTerminateEndEventProcess;
import org.jbpm.bpmn2.handler.ReceiveTaskHandler;
import org.jbpm.bpmn2.handler.SendTaskHandler;
import org.jbpm.bpmn2.handler.ServiceTaskHandler;
@@ -42,12 +50,14 @@ import
org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler;
import org.jbpm.process.instance.impl.humantask.InternalHumanTaskWorkItem;
import org.jbpm.test.util.NodeLeftCountDownProcessEventListener;
import org.jbpm.test.util.ProcessCompletedCountDownProcessEventListener;
+import org.jbpm.test.utils.ProcessTestHelper;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.kie.api.event.process.ProcessStartedEvent;
import org.kie.api.io.Resource;
import org.kie.internal.io.ResourceFactory;
+import org.kie.kogito.Application;
import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
import org.kie.kogito.internal.process.runtime.KogitoProcessRuntime;
@@ -56,6 +66,7 @@ import
org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
import org.w3c.dom.Document;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
public class StandaloneBPMNProcessTest extends JbpmBpmn2TestCase {
@@ -506,24 +517,70 @@ public class StandaloneBPMNProcessTest extends
JbpmBpmn2TestCase {
}
@Test
- @Disabled("Process does not complete.")
public void testAdHocSubProcessAutoComplete() throws Exception {
- kruntime =
createKogitoProcessRuntime("BPMN2-AdHocSubProcessAutoComplete.bpmn2");
+ // this autocomplete when we detect
+ // getActivityInstanceAttribute("numberOfActiveInstances") == 0
+ Application app = ProcessTestHelper.newApplication();
+ org.kie.kogito.process.Process<AdHocSubProcessAutoCompleteModel>
definition = AdHocSubProcessAutoCompleteProcess.newProcess(app);
- TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
- kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human
Task", workItemHandler);
- KogitoProcessInstance processInstance =
kruntime.startProcess("AdHocSubProcess");
-
assertThat(processInstance.getState()).isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
+
org.kie.kogito.process.ProcessInstance<AdHocSubProcessAutoCompleteModel>
instance = definition.createInstance(definition.createModel());
+ instance.start();
+
assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
- KogitoWorkItem workItem = workItemHandler.getWorkItem();
- assertThat(workItem).isNull();
- kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human
Task", workItemHandler);
- kruntime.getKieSession().fireAllRules();
- workItem = workItemHandler.getWorkItem();
- assertThat(workItem).withFailMessage("KogitoWorkItem should not be
null.").isNotNull();
- kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human
Task", workItemHandler);
-
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(),
null);
- assertProcessInstanceCompleted(processInstance.getStringId(),
kruntime);
+ // adhoc we need to trigger the human task
+ instance.triggerNode("_2-1");
+ ProcessTestHelper.completeWorkItem(instance, "john",
Collections.emptyMap());
+
+
assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
+ }
+
+ @Test
+ public void testAdHocSubProcessAutoCompleteExpression() throws Exception {
+ // this autocomplete when we detect
+ // getActivityInstanceAttribute("numberOfActiveInstances") == 0
+ Application app = ProcessTestHelper.newApplication();
+
org.kie.kogito.process.Process<AdHocSubProcessAutoCompleteExpressionModel>
definition = AdHocSubProcessAutoCompleteExpressionProcess.newProcess(app);
+ AdHocSubProcessAutoCompleteExpressionModel model =
definition.createModel();
+ model.setCounter(3);
+
org.kie.kogito.process.ProcessInstance<AdHocSubProcessAutoCompleteExpressionModel>
instance = definition.createInstance(model);
+ instance.start();
+
assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
+
+ // adhoc we need to trigger the human task
+ instance.triggerNode("_2-1");
+ ProcessTestHelper.completeWorkItem(instance, "john",
Collections.singletonMap("testHT", 0));
+
+
assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
+ }
+
+ @Test
+ public void testAdHocTerminateEndEvent() throws Exception {
+ // this autocomplete when we detect
+ // terminate end event within adhoc process the adhoc should finish
+ Application app = ProcessTestHelper.newApplication();
+ org.kie.kogito.process.Process<AdHocTerminateEndEventModel> definition
= AdHocTerminateEndEventProcess.newProcess(app);
+ AdHocTerminateEndEventModel model = definition.createModel();
+ model.setComplete(false);
+ org.kie.kogito.process.ProcessInstance<AdHocTerminateEndEventModel>
instance = definition.createInstance(model);
+ instance.start();
+
assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
+
+ // adhoc we need to trigger the human task
+ instance.triggerNode("_560E157E-3173-4CFD-9CC6-26676D8B0A02");
+ ProcessTestHelper.completeWorkItem(instance, "john",
Collections.emptyMap());
+
+
assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
+ }
+
+ @Test
+ public void testAdHocSubProcessEmptyCompleteExpression() throws Exception {
+ try {
+ Application app = ProcessTestHelper.newApplication();
+ AdHocSubProcessEmptyCompleteExpressionProcess.newProcess(app);
+ fail("Process should be invalid, there should be build errors");
+ } catch (RuntimeException e) {
+ // there should be build errors
+ }
}
@Test
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStages.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStages.bpmn2
index e67cca2bf4..d854e1173d 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStages.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStages.bpmn2
@@ -85,7 +85,7 @@
</bpmn2:resourceAssignmentExpression>
</bpmn2:potentialOwner>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_Vpzp0u1BEeal0opAuGgvLw"
language="http://www.jboss.org/drools/rule"><![CDATA[caseFile_customData !=
null]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_Vpzp0u1BEeal0opAuGgvLw"
language="http://www.java.com/java"><![CDATA[caseFile_customData !=
null]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:adHocSubProcess id="_1BB26695-2446-48FF-B1E8-102236021CAB"
drools:selectable="true" color:background-color="#fafad2"
color:border-color="#000000" color:color="#000000" name="Stage Two"
ordering="Sequential">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStagesConditions.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStagesConditions.bpmn2
index df17ff046c..b6dfe0b1e9 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStagesConditions.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/CaseWithTwoStagesConditions.bpmn2
@@ -92,7 +92,7 @@
</bpmn2:resourceAssignmentExpression>
</bpmn2:potentialOwner>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="__T-3Q-4EEeal0opAuGgvLw"
language="http://www.jboss.org/drools/rule"><![CDATA[caseFile_customData.equals("none")]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="__T-3Q-4EEeal0opAuGgvLw"
language="http://www.java.com/java"><![CDATA[caseFile_customData.equals("none")]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:adHocSubProcess id="_1BB26695-2446-48FF-B1E8-102236021CAB"
drools:selectable="true" color:background-color="#fafad2"
color:border-color="#000000" color:color="#000000" name="Stage Two"
ordering="Sequential">
<bpmn2:extensionElements>
@@ -148,7 +148,7 @@
</bpmn2:resourceAssignmentExpression>
</bpmn2:potentialOwner>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="__T-3Vu4EEeal0opAuGgvLw"
language="http://www.jboss.org/drools/rule"><![CDATA[caseFile_customData.equals("none")]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="__T-3Vu4EEeal0opAuGgvLw"
language="http://www.java.com/java"><![CDATA[caseFile_customData.equals("none")]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:sequenceFlow id="_4B6721A9-3253-43AB-821C-7EC0298E7409"
drools:selectable="true" color:background-color="#000000"
color:border-color="#000000" color:color="#000000"
sourceRef="_97793062-93A6-4CC8-9DB8-43F30BC001E9"
targetRef="_51298678-656D-434C-A1D1-912CA47417AE"/>
<bpmn2:sequenceFlow id="_0F304A8D-0D85-4F48-8CC0-AD7E4BCA6833"
drools:selectable="true" color:background-color="#000000"
color:border-color="#000000" color:color="#000000"
sourceRef="_51298678-656D-434C-A1D1-912CA47417AE"
targetRef="_1BB26695-2446-48FF-B1E8-102236021CAB"/>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/EmptyCaseStage.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/EmptyCaseStage.bpmn2
index 6ae7c39e11..0f518be645 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/EmptyCaseStage.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/EmptyCaseStage.bpmn2
@@ -26,7 +26,7 @@
<drools:metaValue><![CDATA[CASE]]></drools:metaValue>
</drools:metaData>
</bpmn2:extensionElements>
- <bpmn2:property id="continue" itemSubjectRef="_continueItem"/>
+ <bpmn2:property id="shouldContinue" itemSubjectRef="_continueItem"/>
<bpmn2:adHocSubProcess id="_421CEBE9-39CE-4729-9742-19092560F745"
drools:selectable="true" color:background-color="#fafad2"
color:border-color="#000000" color:color="#000000" name=""
ordering="Sequential">
<bpmn2:extensionElements>
<drools:metaData name="elementname">
@@ -39,7 +39,7 @@
<bpmn2:inputSet id="_JaoAglAwEeekOsAiqAUZKw"/>
<bpmn2:outputSet id="_JaoAg1AwEeekOsAiqAUZKw"/>
</bpmn2:ioSpecification>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_JaoAhFAwEeekOsAiqAUZKw"
language="http://www.jboss.org/drools/rule"><![CDATA[v$continue]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_JaoAhFAwEeekOsAiqAUZKw"
language="http://www.java.com/java"><![CDATA[shouldContinue]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:startEvent id="_CFF602B7-06FA-4BAD-907D-003FACBC5357"
drools:selectable="true" color:background-color="#9acd32"
color:border-color="#000000" color:color="#000000" name="">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/NoStartNodeCaseWithBoundaryTimerStage.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/NoStartNodeCaseWithBoundaryTimerStage.bpmn2
index bb758b2ff3..3c5f3a3eed 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/NoStartNodeCaseWithBoundaryTimerStage.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/NoStartNodeCaseWithBoundaryTimerStage.bpmn2
@@ -146,7 +146,7 @@ System.out.println("timer on stage
1");</bpmn2:script>
</bpmn2:assignment>
</bpmn2:dataInputAssociation>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_pGbIkjuFEeqlirl1r42RDw"
language="http://www.jboss.org/drools/rule">caseFile_stage1_finished</bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_pGbIkjuFEeqlirl1r42RDw"
language="http://www.java.com/java">caseFile_stage1_finished</bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:boundaryEvent id="_9BA107AB-9119-489E-873F-319C80A3D872"
drools:selectable="true" drools:boundaryca="false"
drools:dockerinfo="147.0^144.0|" color:background-color="#f5deb3"
color:border-color="#a0522d" color:color="#000000" name="boundaryEvent"
attachedToRef="_C962DC6C-D200-459A-81B3-DC6AF084EFEE" cancelActivity="false">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationCondition.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationCondition.bpmn2
index 647155ba38..0366fd805c 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationCondition.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationCondition.bpmn2
@@ -134,7 +134,7 @@
</bpmn2:potentialOwner>
</bpmn2:userTask>
<bpmn2:sequenceFlow id="_E5F867A9-66A2-4547-BBD0-1C9016701461"
drools:selectable="true" color:background-color="#000000"
color:border-color="#000000" color:color="#000000"
sourceRef="_E31E7C8E-2AD1-4C96-9D5D-A1452E7453E0"
targetRef="_9DAB7DE8-EE33-45DB-983C-FA65D9558D6D"/>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_al78q2U5Eeavbo3IsNuQ1g"
language="http://www.jboss.org/drools/rule"><![CDATA[Boolean.parseBoolean((String)kcontext.getVariable("readyToComplete"))]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_al78q2U5Eeavbo3IsNuQ1g"
language="http://www.java.com/java"><![CDATA[Boolean.parseBoolean((String)kcontext.getVariable("readyToComplete"))]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:endEvent id="_5654F923-EC6D-4D65-8855-0FDF860934B8"
drools:selectable="true" color:background-color="#ff6347"
color:border-color="#000000" color:color="#000000" name="">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationConditionNoTerminate.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationConditionNoTerminate.bpmn2
index 38e5852d79..4f34d60e67 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationConditionNoTerminate.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/activation/NoStartNodeAdhocCaseWithActivationConditionNoTerminate.bpmn2
@@ -118,7 +118,7 @@
</bpmn2:potentialOwner>
</bpmn2:userTask>
<bpmn2:sequenceFlow id="_E5F867A9-66A2-4547-BBD0-1C9016701461"
drools:selectable="true" color:background-color="#000000"
color:border-color="#000000" color:color="#000000"
sourceRef="_E31E7C8E-2AD1-4C96-9D5D-A1452E7453E0"
targetRef="_9DAB7DE8-EE33-45DB-983C-FA65D9558D6D"/>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_al78q2U5Eeavbo3IsNuQ1g"
language="http://www.jboss.org/drools/rule"><![CDATA[Boolean.parseBoolean((String)kcontext.getVariable("readyToComplete"))]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_al78q2U5Eeavbo3IsNuQ1g"
language="http://www.java.com/java"><![CDATA[Boolean.parseBoolean((String)kcontext.getVariable("readyToComplete"))]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:endEvent id="_5654F923-EC6D-4D65-8855-0FDF860934B8"
drools:selectable="true" color:background-color="#ff6347"
color:border-color="#000000" color:color="#000000" name="end">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataBoolean.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataBoolean.bpmn2
index 6547c40853..eaca3ade59 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataBoolean.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataBoolean.bpmn2
@@ -75,7 +75,7 @@
</bpmn2:resourceAssignmentExpression>
</bpmn2:potentialOwner>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_WpO30URnEeeSxP1_nretag"
language="http://www.jboss.org/drools/rule"><![CDATA[(Boolean)kcontext.getVariable("continue")]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_WpO30URnEeeSxP1_nretag"
language="http://www.java.com/java"><![CDATA[(Boolean)kcontext.getVariable("continue")]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:startEvent id="_E043B6D5-4CE0-418A-A39A-F506F223801C"
drools:selectable="true" color:background-color="#9acd32"
color:border-color="#000000" color:color="#000000" name="">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataInteger.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataInteger.bpmn2
index 4aab998362..b931814480 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataInteger.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataInteger.bpmn2
@@ -75,7 +75,7 @@
</bpmn2:resourceAssignmentExpression>
</bpmn2:potentialOwner>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_WpO30URnEeeSxP1_nretag"
language="http://www.jboss.org/drools/rule"><![CDATA[(Integer)kcontext.getVariable("continue")
== 1]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_WpO30URnEeeSxP1_nretag"
language="http://www.java.com/java"><![CDATA[(Integer)kcontext.getVariable("continue")
== 1]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:startEvent id="_E043B6D5-4CE0-418A-A39A-F506F223801C"
drools:selectable="true" color:background-color="#9acd32"
color:border-color="#000000" color:color="#000000" name="">
<bpmn2:extensionElements>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataString.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataString.bpmn2
index 89aae6b656..d6502a51f1 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataString.bpmn2
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/cases/stage/completion/StageWithTaskCaseDataString.bpmn2
@@ -75,7 +75,7 @@
</bpmn2:resourceAssignmentExpression>
</bpmn2:potentialOwner>
</bpmn2:userTask>
- <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_WpO30URnEeeSxP1_nretag"
language="http://www.jboss.org/drools/rule"><![CDATA[kcontext.getVariable("continue").equals("continue")]]></bpmn2:completionCondition>
+ <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression"
id="_WpO30URnEeeSxP1_nretag"
language="http://www.java.com/java"><![CDATA[kcontext.getVariable("continue").equals("continue")]]></bpmn2:completionCondition>
</bpmn2:adHocSubProcess>
<bpmn2:startEvent id="_E043B6D5-4CE0-418A-A39A-F506F223801C"
drools:selectable="true" color:background-color="#9acd32"
color:border-color="#000000" color:color="#000000" name="">
<bpmn2:extensionElements>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]