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(&quot;timer on stage 
1&quot;);</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]

Reply via email to