Skip to content

Commit 0c95ab1

Browse files
Merge branch 'main' of github.com:flowable/flowable-engine
2 parents 23d6692 + b3495bb commit 0c95ab1

78 files changed

Lines changed: 2536 additions & 123 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/constants/BpmnXMLConstants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ public interface BpmnXMLConstants {
217217
public static final String ATTRIBUTE_TASK_SERVICE_STORE_RESULT_AS_TRANSIENT = "storeResultVariableAsTransient";
218218

219219
public static final String ATTRIBUTE_TASK_EXTERNAL_WORKER_TOPIC = "topic";
220+
public static final String ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES = "doNotIncludeVariables";
221+
public static final String ELEMENT_EXTERNAL_WORKER_IN_PARAMETER = "externalWorkerInParameter";
222+
public static final String ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER = "externalWorkerOutParameter";
220223

221224
public static final String ATTRIBUTE_TASK_HTTP_PARALLEL_IN_SAME_TRANSACTION = "parallelInSameTransaction";
222225

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/ServiceTaskXMLConverter.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.flowable.bpmn.converter.child.BaseChildElementParser;
2626
import org.flowable.bpmn.converter.child.EventInParameterParser;
2727
import org.flowable.bpmn.converter.child.EventOutParameterParser;
28+
import org.flowable.bpmn.converter.child.ExternalWorkerInParameterParser;
29+
import org.flowable.bpmn.converter.child.ExternalWorkerOutParameterParser;
2830
import org.flowable.bpmn.converter.child.InParameterParser;
2931
import org.flowable.bpmn.converter.child.OutParameterParser;
3032
import org.flowable.bpmn.converter.export.FieldExtensionExport;
@@ -51,7 +53,8 @@ public class ServiceTaskXMLConverter extends BaseBpmnXMLConverter {
5153

5254
protected Map<String, BaseChildElementParser> caseServiceChildParserMap = new HashMap<>();
5355
protected Map<String, BaseChildElementParser> sendEventServiceChildParserMap = new HashMap<>();
54-
56+
protected Map<String, BaseChildElementParser> externalWorkerTaskChildParserMap = new HashMap<>();
57+
5558
protected static final List<ExtensionAttribute> defaultServiceTaskAttributes = Arrays.asList(
5659
new ExtensionAttribute(ATTRIBUTE_TYPE),
5760
new ExtensionAttribute(ATTRIBUTE_TASK_SERVICE_CLASS),
@@ -89,6 +92,12 @@ public ServiceTaskXMLConverter() {
8992
sendEventServiceChildParserMap.put(eventInParameterParser.getElementName(), eventInParameterParser);
9093
EventOutParameterParser eventOutParameterParser = new EventOutParameterParser();
9194
sendEventServiceChildParserMap.put(eventOutParameterParser.getElementName(), eventOutParameterParser);
95+
96+
// External Worker
97+
ExternalWorkerInParameterParser externalWorkerInParameterParser = new ExternalWorkerInParameterParser();
98+
externalWorkerTaskChildParserMap.put(externalWorkerInParameterParser.getElementName(), externalWorkerInParameterParser);
99+
ExternalWorkerOutParameterParser externalWorkerOutParameterParser = new ExternalWorkerOutParameterParser();
100+
externalWorkerTaskChildParserMap.put(externalWorkerOutParameterParser.getElementName(), externalWorkerOutParameterParser);
92101
}
93102

94103
@Override
@@ -248,6 +257,10 @@ protected void writeExternalTaskAdditionalAttributes(ExternalWorkerServiceTask e
248257
if (StringUtils.isNotEmpty(externalWorkerTask.getSkipExpression())) {
249258
writeQualifiedAttribute(ATTRIBUTE_TASK_SERVICE_SKIP_EXPRESSION, externalWorkerTask.getSkipExpression(), xtw);
250259
}
260+
261+
if (externalWorkerTask.isDoNotIncludeVariables()) {
262+
writeQualifiedAttribute(ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES, String.valueOf(externalWorkerTask.isDoNotIncludeVariables()), xtw);
263+
}
251264
}
252265

253266

@@ -303,7 +316,8 @@ protected boolean writeExtensionChildElements(BaseElement element, boolean didWr
303316

304317
} else if (element instanceof SendEventServiceTask) {
305318
return writeSendServiceExtensionChildElements(element, didWriteExtensionStartElement, xtw);
306-
319+
} else if (element instanceof ExternalWorkerServiceTask) {
320+
return writeExternalWorkerTaskExtensionChildElements(element, didWriteExtensionStartElement, xtw);
307321
} else {
308322
return writeServiceTaskExtensionChildElements((ServiceTask) element, didWriteExtensionStartElement, xtw);
309323
}
@@ -360,6 +374,14 @@ protected boolean writeSendServiceExtensionChildElements(BaseElement element, bo
360374
return didWriteExtensionStartElement;
361375
}
362376

377+
protected boolean writeExternalWorkerTaskExtensionChildElements(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception {
378+
ExternalWorkerServiceTask externalWorkerTask = (ExternalWorkerServiceTask) element;
379+
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_EXTERNAL_WORKER_IN_PARAMETER, externalWorkerTask.getInParameters(), didWriteExtensionStartElement, xtw);
380+
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER, externalWorkerTask.getOutParameters(), didWriteExtensionStartElement, xtw);
381+
382+
return didWriteExtensionStartElement;
383+
}
384+
363385
protected boolean writeCaseServiceTaskExtensionChildElements(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception {
364386
CaseServiceTask caseServiceTask = (CaseServiceTask) element;
365387
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_IN_PARAMETERS, caseServiceTask.getInParameters(), didWriteExtensionStartElement, xtw);
@@ -432,8 +454,11 @@ protected void convertSendEventServiceTaskXMLProperties(SendEventServiceTask sen
432454

433455
protected void convertExternalWorkerTaskXMLProperties(ExternalWorkerServiceTask externalWorkerServiceTask, BpmnModel bpmnModel, XMLStreamReader xtr) throws Exception {
434456
externalWorkerServiceTask.setTopic(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_TASK_EXTERNAL_WORKER_TOPIC, xtr));
457+
externalWorkerServiceTask.setDoNotIncludeVariables(
458+
Boolean.parseBoolean(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES, xtr))
459+
);
435460

436-
parseChildElements(getXMLElementName(), externalWorkerServiceTask, bpmnModel, xtr);
461+
parseChildElements(getXMLElementName(), externalWorkerServiceTask, externalWorkerTaskChildParserMap, bpmnModel, xtr);
437462
}
438463

439464
protected void convertHttpServiceTaskXMLProperties(HttpServiceTask httpServiceTask, BpmnModel bpmnModel, XMLStreamReader xtr) throws Exception {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* Licensed under the Apache License, Version 2.0 (the "License");
2+
* you may not use this file except in compliance with the License.
3+
* You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
package org.flowable.bpmn.converter.child;
14+
15+
import javax.xml.stream.XMLStreamReader;
16+
17+
import org.flowable.bpmn.converter.util.BpmnXMLUtil;
18+
import org.flowable.bpmn.model.BaseElement;
19+
import org.flowable.bpmn.model.BpmnModel;
20+
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
21+
import org.flowable.bpmn.model.IOParameter;
22+
23+
/**
24+
* @author Valentin Zickner
25+
*/
26+
public class ExternalWorkerInParameterParser extends BaseChildElementParser {
27+
28+
@Override
29+
public String getElementName() {
30+
return ELEMENT_EXTERNAL_WORKER_IN_PARAMETER;
31+
}
32+
33+
@Override
34+
public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {
35+
IOParameter parameter = BpmnXMLUtil.parseInIOParameter(xtr);
36+
if (parameter != null) {
37+
((ExternalWorkerServiceTask) parentElement).getInParameters().add(parameter);
38+
}
39+
}
40+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/* Licensed under the Apache License, Version 2.0 (the "License");
2+
* you may not use this file except in compliance with the License.
3+
* You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
package org.flowable.bpmn.converter.child;
14+
15+
import javax.xml.stream.XMLStreamReader;
16+
17+
import org.flowable.bpmn.converter.util.BpmnXMLUtil;
18+
import org.flowable.bpmn.model.BaseElement;
19+
import org.flowable.bpmn.model.BpmnModel;
20+
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
21+
import org.flowable.bpmn.model.IOParameter;
22+
23+
/**
24+
* @author Valentin Zickner
25+
*/
26+
public class ExternalWorkerOutParameterParser extends BaseChildElementParser {
27+
28+
@Override
29+
public String getElementName() {
30+
return ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER;
31+
}
32+
33+
@Override
34+
public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {
35+
IOParameter parameter = BpmnXMLUtil.parseOutIOParameter(xtr);
36+
((ExternalWorkerServiceTask) parentElement).getOutParameters().add(parameter);
37+
}
38+
}

modules/flowable-bpmn-converter/src/main/resources/org/flowable/impl/bpmn/parser/flowable-bpmn-extensions.xsd

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,14 @@
386386
</annotation>
387387
</attribute>
388388

389+
<attribute name="doNotIncludeVariables" type="boolean">
390+
<annotation>
391+
<documentation>
392+
Mark an external worker task to explicit not include the variables.
393+
</documentation>
394+
</annotation>
395+
</attribute>
396+
389397
<element name="field">
390398
<annotation>
391399
<documentation>

modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/ExternalWorkerServiceTaskConverterTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.flowable.bpmn.model.BpmnModel;
1818
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
1919
import org.flowable.bpmn.model.FlowElement;
20+
import org.flowable.bpmn.model.IOParameter;
2021
import org.flowable.editor.language.xml.util.BpmnXmlConverterTest;
2122

2223
class ExternalWorkerServiceTaskConverterTest {
@@ -32,5 +33,15 @@ void validateModel(BpmnModel model) {
3233
assertThat(externalWorkerServiceTask.getTopic()).isEqualTo("topic");
3334
assertThat(externalWorkerServiceTask.getSkipExpression()).isEqualTo("skipExpression");
3435
assertThat(externalWorkerServiceTask.isExclusive()).isTrue();
36+
37+
assertThat(externalWorkerServiceTask.getInParameters()).hasSize(1);
38+
IOParameter inParameter = externalWorkerServiceTask.getInParameters().get(0);
39+
assertThat(inParameter.getSource()).isEqualTo("description");
40+
assertThat(inParameter.getTarget()).isEqualTo("theDescription");
41+
assertThat(externalWorkerServiceTask.getOutParameters()).hasSize(1);
42+
IOParameter outParameter = externalWorkerServiceTask.getOutParameters().get(0);
43+
assertThat(outParameter.getSource()).isEqualTo("theResult");
44+
assertThat(outParameter.getTarget()).isEqualTo("result");
45+
3546
}
3647
}

modules/flowable-bpmn-converter/src/test/resources/externalWorkerServiceTask.bpmn

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
<sequenceFlow sourceRef="start" targetRef="externalWorkerServiceTask"/>
88
<serviceTask id="externalWorkerServiceTask" flowable:type="external-worker" name="External worker task" flowable:skipExpression="skipExpression"
99
flowable:topic="topic">
10+
<extensionElements>
11+
<flowable:externalWorkerInParameter source="description" target="theDescription"/>
12+
<flowable:externalWorkerOutParameter source="theResult" target="result"/>
13+
</extensionElements>
1014
</serviceTask>
1115
<sequenceFlow sourceRef="externalWorkerServiceTask" targetRef="end"/>
1216
<endEvent id="end"/>

modules/flowable-bpmn-model/src/main/java/org/flowable/bpmn/model/ExternalWorkerServiceTask.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@
1212
*/
1313
package org.flowable.bpmn.model;
1414

15+
import java.util.ArrayList;
16+
import java.util.List;
17+
1518
/**
1619
* @author Filip Hrisafov
1720
*/
18-
public class ExternalWorkerServiceTask extends ServiceTask {
21+
public class ExternalWorkerServiceTask extends ServiceTask implements HasOutParameters, HasInParameters {
1922

2023
protected String topic;
24+
protected boolean doNotIncludeVariables = false;
25+
protected List<IOParameter> inParameters = new ArrayList<>();
26+
protected List<IOParameter> outParameters = new ArrayList<>();
2127

2228
public String getTopic() {
2329
return topic;
@@ -27,6 +33,44 @@ public void setTopic(String topic) {
2733
this.topic = topic;
2834
}
2935

36+
public boolean isDoNotIncludeVariables() {
37+
return doNotIncludeVariables;
38+
}
39+
40+
public void setDoNotIncludeVariables(boolean doNotIncludeVariables) {
41+
this.doNotIncludeVariables = doNotIncludeVariables;
42+
}
43+
44+
@Override
45+
public List<IOParameter> getInParameters() {
46+
return inParameters;
47+
}
48+
49+
@Override
50+
public void setInParameters(List<IOParameter> inParameters) {
51+
this.inParameters = inParameters;
52+
}
53+
54+
@Override
55+
public void addInParameter(IOParameter inParameter) {
56+
this.inParameters.add(inParameter);
57+
}
58+
59+
@Override
60+
public List<IOParameter> getOutParameters() {
61+
return outParameters;
62+
}
63+
64+
@Override
65+
public void setOutParameters(List<IOParameter> outParameters) {
66+
this.outParameters = outParameters;
67+
}
68+
69+
@Override
70+
public void addOutParameter(IOParameter outParameter) {
71+
this.outParameters.add(outParameter);
72+
}
73+
3074
@Override
3175
public ExternalWorkerServiceTask clone() {
3276
ExternalWorkerServiceTask clone = new ExternalWorkerServiceTask();

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/history/HistoricPlanItemInstance.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.flowable.cmmn.api.history;
1414

1515
import java.util.Date;
16+
import java.util.Map;
1617

1718
/**
1819
* @author Dennis Federico
@@ -88,4 +89,6 @@ public interface HistoricPlanItemInstance {
8889

8990
/** Sets an optional localized name for the plan item */
9091
void setLocalizedName(String localizedName);
92+
93+
Map<String, Object> getPlanItemInstanceLocalVariables();
9194
}

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/history/HistoricPlanItemInstanceQuery.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ public interface HistoricPlanItemInstanceQuery extends Query<HistoricPlanItemIns
8585
*/
8686
HistoricPlanItemInstanceQuery withLocalizationFallback();
8787

88+
HistoricPlanItemInstanceQuery includeLocalVariables();
89+
8890
HistoricPlanItemInstanceQuery orderByCreateTime();
8991
HistoricPlanItemInstanceQuery orderByEndedTime();
9092
HistoricPlanItemInstanceQuery orderByLastAvailableTime();

0 commit comments

Comments
 (0)