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 534f7dc1cc [incubator-kie-issues-1146] Add support for transformations
in input/output in activities (#3494)
534f7dc1cc is described below
commit 534f7dc1ccc8f33ea2e0344cb245f8b671d5d28a
Author: Enrique <[email protected]>
AuthorDate: Tue May 28 10:41:46 2024 +0200
[incubator-kie-issues-1146] Add support for transformations in input/output
in activities (#3494)
---
.../org/jbpm/bpmn2/xml/AbstractNodeHandler.java | 5 +-
.../compiler/canonical/AbstractNodeVisitor.java | 10 ++--
.../transformation/DataTransformerCompiler.java | 39 +++++++++++++
.../DataTransformerCompilerRegistry.java} | 47 +++++++++-------
.../DefaultDataTransformerCompiler.java | 57 +++++++++++++++++++
.../JavaDataTransformerCompiler.java | 65 ++++++++++++++++++++++
....builder.transformation.DataTransformerCompiler | 2 +
.../process/core/impl/DataTransformerRegistry.java | 2 +
.../core/transformation/JavaDataTransformer.java | 39 +++++++++++++
.../jbpm/workflow/core/impl/DataDefinition.java | 15 ++++-
.../jbpm/workflow/core/node/Transformation.java | 16 +-----
...oundarySignalEventOnTaskWithTransformation.bpmn | 25 +--------
.../java/org/jbpm/bpmn2/IntermediateEventTest.java | 40 ++++++-------
jbpm/jbpm-tools/jbpm-tools-maven-plugin/pom.xml | 5 ++
...oundarySignalEventOnTaskWithTransformation.bpmn | 2 +-
15 files changed, 286 insertions(+), 83 deletions(-)
diff --git
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
index 93d771f0ca..7a16ef7380 100755
--- a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
+++ b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
@@ -409,7 +409,7 @@ public abstract class AbstractNodeHandler extends
BaseAbstractHandler implements
return null;
}
Variable variable = var.get();
- return new DataDefinition(variable.getId(), variable.getName(),
variable.getType().getStringType());
+ return new DataDefinition(variable.getId(), variable.getName(),
variable);
}
protected ItemDefinition getStructureRef(Parser parser, String id) {
@@ -630,10 +630,9 @@ public abstract class AbstractNodeHandler extends
BaseAbstractHandler implements
}
private DataDefinition toDataExpression(String expression) {
- DataDefinition dataSpec = new
DataDefinition(UUID.randomUUID().toString(), "EXPRESSION (" + expression + ")",
null);
+ DataDefinition dataSpec = new
DataDefinition(UUID.randomUUID().toString(), "EXPRESSION (" + expression + ")",
(String) null);
dataSpec.setExpression(expression);
return dataSpec;
-
}
private boolean isExpr(String mvelExpression) {
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
index e3429dcdbb..27595fe2e7 100644
---
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
@@ -25,6 +25,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.jbpm.process.builder.action.ActionCompilerRegistry;
+import org.jbpm.process.builder.transformation.DataTransformerCompilerRegistry;
import org.jbpm.process.core.ContextContainer;
import org.jbpm.process.core.context.variable.Mappable;
import org.jbpm.process.core.context.variable.Variable;
@@ -69,6 +70,7 @@ import com.github.javaparser.ast.type.UnknownType;
import com.github.javaparser.ast.type.WildcardType;
import static com.github.javaparser.StaticJavaParser.parseClassOrInterfaceType;
+import static java.util.Collections.singletonList;
import static org.drools.util.StringUtils.ucFirst;
import static org.jbpm.ruleflow.core.Metadata.CUSTOM_AUTO_START;
import static org.jbpm.ruleflow.core.Metadata.HIDDEN;
@@ -230,7 +232,7 @@ public abstract class AbstractNodeVisitor<T extends Node>
extends AbstractVisito
DataDefinition targetExpr = dataAssociation.getTarget();
Transformation transformation = dataAssociation.getTransformation();
List<Assignment> assignments = dataAssociation.getAssignments();
- return toDataAssociation(toDataDef(sourceExpr), toDataDef(targetExpr),
toAssignmentExpr(assignments), toTransformation(transformation));
+ return toDataAssociation(toDataDef(sourceExpr), toDataDef(targetExpr),
toAssignmentExpr(assignments), toTransformation(sourceExpr,
singletonList(targetExpr), transformation));
}
private Expression toAssignmentExpr(List<Assignment> assignments) {
@@ -250,15 +252,15 @@ public abstract class AbstractNodeVisitor<T extends Node>
extends AbstractVisito
return new MethodCallExpr(null, "java.util.Arrays.asList",
NodeList.nodeList(expressions));
}
- protected Expression toTransformation(Transformation transformation) {
+ protected Expression toTransformation(List<DataDefinition> inputs,
List<DataDefinition> outputs, Transformation transformation) {
if (transformation == null) {
return new NullLiteralExpr();
}
Expression lang = new StringLiteralExpr(transformation.getLanguage());
Expression expression = new
StringLiteralExpr(transformation.getExpression());
- Expression source = new StringLiteralExpr(transformation.getSource());
+ Expression compiledExpression =
DataTransformerCompilerRegistry.instance().find(transformation.getLanguage()).compile(inputs,
outputs, transformation);
ClassOrInterfaceType clazz = new ClassOrInterfaceType(null,
"org.jbpm.workflow.core.node.Transformation");
- return new ObjectCreationExpr(null, clazz, NodeList.nodeList(lang,
expression, source));
+ return new ObjectCreationExpr(null, clazz, NodeList.nodeList(lang,
expression, compiledExpression));
}
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompiler.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompiler.java
new file mode 100644
index 0000000000..0e85a0b0b0
--- /dev/null
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompiler.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jbpm.process.builder.transformation;
+
+import java.util.List;
+
+import org.jbpm.workflow.core.impl.DataDefinition;
+import org.jbpm.workflow.core.node.Transformation;
+
+import com.github.javaparser.ast.expr.Expression;
+
+public interface DataTransformerCompiler {
+
+ default String[] dialects() {
+ return new String[0];
+ }
+
+ default boolean accept(String dialect) {
+ return List.of(dialects()).contains(dialect);
+ }
+
+ Expression compile(List<DataDefinition> inputs, List<DataDefinition>
outputs, Transformation source);
+}
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompilerRegistry.java
similarity index 55%
copy from
jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
copy to
jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompilerRegistry.java
index 97f4349bbe..54f506da76 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompilerRegistry.java
@@ -16,13 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.jbpm.process.core.impl;
+package org.jbpm.process.builder.transformation;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ServiceLoader;
-import org.jbpm.process.core.transformation.MVELDataTransformer;
-import org.kie.api.runtime.process.DataTransformer;
+import org.jbpm.util.JbpmClassLoaderUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,28 +36,37 @@ import org.slf4j.LoggerFactory;
* otherwise they need to be registered manually with <code>register</code>
method.
*
*/
-public class DataTransformerRegistry {
+public class DataTransformerCompilerRegistry {
- private static final Logger logger =
LoggerFactory.getLogger(DataTransformerRegistry.class);
- private static final DataTransformerRegistry INSTANCE = new
DataTransformerRegistry();
+ private static final Logger logger =
LoggerFactory.getLogger(DataTransformerCompilerRegistry.class);
- private Map<String, DataTransformer> registry;
+ private static DataTransformerCompilerRegistry INSTANCE;
- protected DataTransformerRegistry() {
- this.registry = new ConcurrentHashMap<>();
- this.registry.put("http://www.mvel.org/2.0", new
MVELDataTransformer());
- }
+ private List<DataTransformerCompiler> registry;
- public static DataTransformerRegistry get() {
+ public static DataTransformerCompilerRegistry instance() {
+ if (INSTANCE == null) {
+ INSTANCE = new DataTransformerCompilerRegistry();
+ }
return INSTANCE;
}
- public synchronized void register(String language, DataTransformer
transformer) {
- this.registry.put(language, transformer);
- logger.debug("Manual registration of scripting language {} with
instance {}", language, transformer);
+ protected DataTransformerCompilerRegistry() {
+ this.registry = new ArrayList<>();
+ ServiceLoader.load(DataTransformerCompiler.class,
JbpmClassLoaderUtil.findClassLoader()).forEach(registry::add);
+ }
+
+ public void register(DataTransformerCompiler transformer) {
+ this.registry.add(transformer);
+ logger.debug("Manual registration of scripting language {} with
instance {}", transformer.dialects(), transformer);
}
- public DataTransformer find(String language) {
- return this.registry.get(language);
+ public DataTransformerCompiler find(String language) {
+ for (DataTransformerCompiler transformer : registry) {
+ if (transformer.accept(language)) {
+ return transformer;
+ }
+ }
+ throw new IllegalArgumentException("transformer not support for
dialect " + language);
}
}
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DefaultDataTransformerCompiler.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DefaultDataTransformerCompiler.java
new file mode 100644
index 0000000000..377076b346
--- /dev/null
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DefaultDataTransformerCompiler.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jbpm.process.builder.transformation;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.jbpm.process.core.impl.DataTransformerRegistry;
+import org.jbpm.workflow.core.impl.DataDefinition;
+import org.jbpm.workflow.core.node.Transformation;
+import org.kie.kogito.internal.utils.ConversionUtils;
+
+import com.github.javaparser.ast.NodeList;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.expr.FieldAccessExpr;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.expr.StringLiteralExpr;
+
+public class DefaultDataTransformerCompiler implements DataTransformerCompiler
{
+
+ @Override
+ public String[] dialects() {
+ return new String[] { "http://www.mvel.org/2.0" };
+ }
+
+ @Override
+ public Expression compile(List<DataDefinition> inputs,
List<DataDefinition> outputs, Transformation transformation) {
+ Expression expr = null;
+ expr = new FieldAccessExpr(new
NameExpr(DataTransformerRegistry.class.getPackageName()),
DataTransformerRegistry.class.getSimpleName());
+ expr = new MethodCallExpr(expr, "get");
+ expr = new MethodCallExpr(expr, "find", NodeList.nodeList(new
StringLiteralExpr(transformation.getLanguage())));
+
+ Expression emptyCollection = new MethodCallExpr(new
FieldAccessExpr(new NameExpr(Collections.class.getPackageName()),
Collections.class.getSimpleName()), "emptyMap");
+
+ expr = new MethodCallExpr(expr, "compile", NodeList.<Expression>
nodeList(
+ new
StringLiteralExpr(ConversionUtils.sanitizeString(transformation.getExpression())),
emptyCollection));
+ return expr;
+ }
+
+}
diff --git
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/JavaDataTransformerCompiler.java
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/JavaDataTransformerCompiler.java
new file mode 100644
index 0000000000..d2dc13c052
--- /dev/null
+++
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/JavaDataTransformerCompiler.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jbpm.process.builder.transformation;
+
+import java.util.List;
+import java.util.Map;
+
+import org.jbpm.workflow.core.impl.DataDefinition;
+import org.jbpm.workflow.core.node.Transformation;
+
+import com.github.javaparser.StaticJavaParser;
+import com.github.javaparser.ast.NodeList;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.expr.AssignExpr;
+import com.github.javaparser.ast.expr.CastExpr;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.expr.LambdaExpr;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.expr.StringLiteralExpr;
+import com.github.javaparser.ast.expr.VariableDeclarationExpr;
+import com.github.javaparser.ast.stmt.BlockStmt;
+import com.github.javaparser.ast.type.ClassOrInterfaceType;
+
+public class JavaDataTransformerCompiler implements DataTransformerCompiler {
+
+ @Override
+ public String[] dialects() {
+ return new String[] { "http://www.java.com/java" };
+ }
+
+ @Override
+ public Expression compile(List<DataDefinition> inputs,
List<DataDefinition> outputs, Transformation transformation) {
+ // build lambda function
+ BlockStmt body = StaticJavaParser.parseBlock("{" +
transformation.getExpression() + "}");
+ for (DataDefinition input : inputs) {
+ ClassOrInterfaceType type =
StaticJavaParser.parseClassOrInterfaceType(input.getType());
+ VariableDeclarationExpr target = new VariableDeclarationExpr(type,
input.getLabel());
+ Expression source = new CastExpr(type, new MethodCallExpr(new
NameExpr("parameters"), "get", NodeList.nodeList(new
StringLiteralExpr(input.getLabel()))));
+ AssignExpr assignment = new AssignExpr(target, source,
AssignExpr.Operator.ASSIGN);
+ body.addStatement(0, assignment);
+ }
+
+ Expression lambda = new LambdaExpr(NodeList.nodeList(new
Parameter(StaticJavaParser.parseClassOrInterfaceType(Map.class.getName()),
"parameters")), body, true);
+ ClassOrInterfaceType type =
StaticJavaParser.parseClassOrInterfaceType("java.util.function.Function<java.util.Map,
Object>");
+ return new CastExpr(type, lambda);
+ }
+
+}
diff --git
a/jbpm/jbpm-flow-builder/src/main/resources/META-INF/services/org.jbpm.process.builder.transformation.DataTransformerCompiler
b/jbpm/jbpm-flow-builder/src/main/resources/META-INF/services/org.jbpm.process.builder.transformation.DataTransformerCompiler
new file mode 100644
index 0000000000..598412f611
--- /dev/null
+++
b/jbpm/jbpm-flow-builder/src/main/resources/META-INF/services/org.jbpm.process.builder.transformation.DataTransformerCompiler
@@ -0,0 +1,2 @@
+org.jbpm.process.builder.transformation.DefaultDataTransformerCompiler
+org.jbpm.process.builder.transformation.JavaDataTransformerCompiler
\ No newline at end of file
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
index 97f4349bbe..5cd596786e 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
@@ -21,6 +21,7 @@ package org.jbpm.process.core.impl;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import org.jbpm.process.core.transformation.JavaDataTransformer;
import org.jbpm.process.core.transformation.MVELDataTransformer;
import org.kie.api.runtime.process.DataTransformer;
import org.slf4j.Logger;
@@ -46,6 +47,7 @@ public class DataTransformerRegistry {
protected DataTransformerRegistry() {
this.registry = new ConcurrentHashMap<>();
this.registry.put("http://www.mvel.org/2.0", new
MVELDataTransformer());
+ this.registry.put("http://www.java.com/java", new
JavaDataTransformer());
}
public static DataTransformerRegistry get() {
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/JavaDataTransformer.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/JavaDataTransformer.java
new file mode 100644
index 0000000000..daefaf43cc
--- /dev/null
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/JavaDataTransformer.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jbpm.process.core.transformation;
+
+import java.util.Map;
+import java.util.function.Function;
+
+import org.kie.api.runtime.process.DataTransformer;
+
+public class JavaDataTransformer implements DataTransformer {
+
+ @Override
+ public Object compile(String expression, Map<String, Object> parameters) {
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object transform(Object expression, Map<String, Object> parameters)
{
+ return ((Function<Map<String, Object>, Object>)
expression).apply(parameters);
+ }
+
+}
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataDefinition.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataDefinition.java
index e36b7a940d..0b96a2a73c 100644
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataDefinition.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataDefinition.java
@@ -21,6 +21,8 @@ package org.jbpm.workflow.core.impl;
import java.io.Serializable;
import java.util.UUID;
+import org.jbpm.process.core.context.variable.Variable;
+
public class DataDefinition implements Serializable {
private static final long serialVersionUID = -1819075545956349183L;
@@ -30,6 +32,8 @@ public class DataDefinition implements Serializable {
private String type;
private String expression;
+ private Variable variable;
+
public DataDefinition(String expression) {
this.id = UUID.randomUUID().toString();
this.label = "EXPRESSION - (" + expression + ")";
@@ -48,6 +52,12 @@ public class DataDefinition implements Serializable {
this(id, label, type, null);
}
+ public DataDefinition(String id, String label, Variable variable) {
+ this.id = id;
+ this.label = label != null && !label.isEmpty() ? label : id;
+ this.variable = variable;
+ }
+
public String getId() {
return id;
}
@@ -65,6 +75,9 @@ public class DataDefinition implements Serializable {
}
public String getType() {
+ if (variable != null) {
+ return variable.getType().getStringType();
+ }
return type;
}
@@ -128,7 +141,7 @@ public class DataDefinition implements Serializable {
if (type == null) {
if (other.type != null)
return false;
- } else if (!type.equals(other.type))
+ } else if (!getType().equals(other.getType()))
return false;
return true;
}
diff --git
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
index d49b3a30f8..97533ec90a 100755
---
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
+++
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
@@ -24,20 +24,18 @@ public class Transformation implements Serializable {
private static final long serialVersionUID = 1641905060375832661L;
- private String source;
private String language;
private String expression;
private Object compiledExpression;
public Transformation(String lang, String expression) {
- this.language = lang;
- this.expression = expression;
+ this(lang, expression, null);
}
- public Transformation(String lang, String expression, String source) {
+ public Transformation(String lang, String expression, Object
compiledExpression) {
this.language = lang;
this.expression = expression;
- this.source = source;
+ this.compiledExpression = compiledExpression;
}
public String getLanguage() {
@@ -64,12 +62,4 @@ public class Transformation implements Serializable {
this.compiledExpression = compliedExpression;
}
- public String getSource() {
- return source;
- }
-
- public void setSource(String source) {
- this.source = source;
- }
-
}
diff --git
a/jbpm/jbpm-tests/src/test/resources/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/activity/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
similarity index 89%
copy from
jbpm/jbpm-tests/src/test/resources/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
copy to
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/activity/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
index 8c88dc39ad..abf5d076e7 100755
---
a/jbpm/jbpm-tests/src/test/resources/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
+++
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/activity/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
@@ -1,26 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
<definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
id="Definition" expressionLanguage="http://www.mvel.org/2.0"
typeLanguage="http://www.java.com/javaTypes">
<itemDefinition id="_xItem" structureRef="String" />
- <process id="BoundarySignalOnTask" tns:packageName="defaultPackage"
name="BoundarySignalOnTask" isExecutable="true" processType="Private">
+ <process id="BoundarySignalEventOnTaskWithTransformation"
tns:packageName="org.jbpm.bpmn2.activity" name="BoundarySignalOnTask"
isExecutable="true" processType="Private">
<property id="x" itemSubjectRef="_xItem"/>
<startEvent id="_1" name="StartProcess">
<outgoing>SequenceFlow_1</outgoing>
@@ -80,11 +61,11 @@
</userTask>
<boundaryEvent id="BoundaryEvent_2" name="Boundary event"
attachedToRef="UserTask_1" cancelActivity="false">
<outgoing>SequenceFlow_5</outgoing>
- <dataOutput id="_4_Output" name="param"/>
+ <dataOutput id="_4_Output" name="param" itemSubjectRef="_xItem"/>
<dataOutputAssociation id="DataOutputAssociation_1">
<sourceRef>_4_Output</sourceRef>
<targetRef>x</targetRef>
- <transformation
language="http://www.java.com/java">param.toUpperCase();</transformation>
+ <transformation language="http://www.java.com/java">return
param.toUpperCase();</transformation>
</dataOutputAssociation>
<outputSet id="OutputSet_1">
<dataOutputRefs>_4_Output</dataOutputRefs>
diff --git
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
index 4d4a724253..f5d2dd0822 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
@@ -28,8 +28,12 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import
org.jbpm.bpmn2.activity.BoundarySignalEventOnTaskWithTransformationModel;
+import
org.jbpm.bpmn2.activity.BoundarySignalEventOnTaskWithTransformationProcess;
import org.jbpm.bpmn2.handler.ReceiveTaskHandler;
import org.jbpm.bpmn2.handler.SendTaskHandler;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventSignalModel;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventSignalProcess;
import org.jbpm.bpmn2.objects.Person;
import org.jbpm.bpmn2.objects.TestWorkItemHandler;
import org.jbpm.bpmn2.test.RequirePersistence;
@@ -39,6 +43,7 @@ import
org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler;
import org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler;
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.kie.api.command.ExecutableCommand;
@@ -47,6 +52,7 @@ import org.kie.api.event.process.ProcessNodeLeftEvent;
import org.kie.api.event.process.ProcessNodeTriggeredEvent;
import org.kie.api.event.process.ProcessStartedEvent;
import org.kie.api.runtime.rule.FactHandle;
+import org.kie.kogito.Application;
import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
import org.kie.kogito.internal.process.event.KogitoProcessEventListener;
import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
@@ -58,6 +64,7 @@ import
org.kie.kogito.internal.process.runtime.KogitoWorkItemManager;
import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
import org.kie.kogito.process.EventDescription;
import org.kie.kogito.process.NamedDataType;
+import org.kie.kogito.process.ProcessInstance;
import org.kie.kogito.process.workitems.InternalKogitoWorkItem;
import static org.assertj.core.api.Assertions.assertThat;
@@ -1794,27 +1801,20 @@ public class IntermediateEventTest extends
JbpmBpmn2TestCase {
}
@Test
- @Disabled("Transfomer has been disabled")
public void testSignalBoundaryEventWithTransformation() throws Exception {
- kruntime = createKogitoProcessRuntime(
- "BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn",
- "BPMN2-IntermediateThrowEventSignal.bpmn2");
-
- TestWorkItemHandler handler = new TestWorkItemHandler();
- kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human
Task",
- handler);
-
- Map<String, Object> params = new HashMap<>();
- params.put("x", "john");
- KogitoProcessInstance processInstance =
kruntime.startProcess("BoundarySignalOnTask");
-
- KogitoProcessInstance processInstance2 =
kruntime.startProcess("SignalIntermediateEvent", params);
- assertProcessInstanceFinished(processInstance2, kruntime);
-
- assertProcessInstanceFinished(processInstance, kruntime);
-
- String var = getProcessVarValue(processInstance, "x");
- assertThat(var).isEqualTo("JOHN");
+ Application application = ProcessTestHelper.newApplication();
+
org.kie.kogito.process.Process<BoundarySignalEventOnTaskWithTransformationModel>
processBoundary =
BoundarySignalEventOnTaskWithTransformationProcess.newProcess(application);
+ org.kie.kogito.process.Process<IntermediateThrowEventSignalModel>
processIntermediate =
IntermediateThrowEventSignalProcess.newProcess(application);
+
+ ProcessInstance<BoundarySignalEventOnTaskWithTransformationModel>
instanceBoundary =
processBoundary.createInstance(processBoundary.createModel());
+ instanceBoundary.start();
+ IntermediateThrowEventSignalModel modelIntermediate =
processIntermediate.createModel();
+ modelIntermediate.setX("john");
+ ProcessInstance<IntermediateThrowEventSignalModel>
instanceIntermediate = processIntermediate.createInstance(modelIntermediate);
+ instanceIntermediate.start();
+
assertThat(instanceIntermediate).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+
assertThat(instanceBoundary).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED);
+ assertThat(instanceBoundary.variables().getX()).isEqualTo("JOHN");
}
@Test
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/pom.xml
b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/pom.xml
index 3a159e4032..39420a95e3 100644
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/pom.xml
+++ b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/pom.xml
@@ -96,6 +96,11 @@
<artifactId>google-collections</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git
a/jbpm/jbpm-tests/src/test/resources/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
similarity index 99%
rename from
jbpm/jbpm-tests/src/test/resources/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
rename to
jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
index 8c88dc39ad..d6eb0a8cb4 100755
---
a/jbpm/jbpm-tests/src/test/resources/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
+++
b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
@@ -80,7 +80,7 @@
</userTask>
<boundaryEvent id="BoundaryEvent_2" name="Boundary event"
attachedToRef="UserTask_1" cancelActivity="false">
<outgoing>SequenceFlow_5</outgoing>
- <dataOutput id="_4_Output" name="param"/>
+ <dataOutput id="_4_Output" name="param" itemSubjectRef="_xItem"/>
<dataOutputAssociation id="DataOutputAssociation_1">
<sourceRef>_4_Output</sourceRef>
<targetRef>x</targetRef>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]