Skip to content

Commit 98fb104

Browse files
Add target and source type support to in and out parameters for call activity, sub case task and process task
1 parent bff3569 commit 98fb104

25 files changed

Lines changed: 1153 additions & 30 deletions

File tree

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/child/InParameterParser.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, Bp
6161

6262
parameter.setTarget(target);
6363

64+
String targetType = xtr.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_TARGET_TYPE);
65+
if (StringUtils.isNotEmpty(targetType)) {
66+
parameter.setTargetType(targetType);
67+
}
68+
6469
String transientValue = xtr.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_TRANSIENT);
6570
if ("true".equalsIgnoreCase(transientValue)) {
6671
parameter.setTransient(true);

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/child/OutParameterParser.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ public class OutParameterParser extends BaseChildElementParser {
3030

3131
public static final List<ExtensionAttribute> defaultOutParameterAttributes = Arrays.asList(
3232
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_SOURCE),
33+
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_TYPE),
3334
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION),
3435
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_TRANSIENT),
35-
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_TARGET)
36+
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_TARGET),
37+
new ExtensionAttribute(ATTRIBUTE_IOPARAMETER_TARGET_TYPE)
3638
);
3739

3840
@Override
@@ -56,6 +58,11 @@ public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, Bp
5658

5759
parameter.setTarget(target);
5860

61+
String sourceType = xtr.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_SOURCE_TYPE);
62+
if (StringUtils.isNotEmpty(sourceType)) {
63+
parameter.setSourceType(sourceType);
64+
}
65+
5966
String transientValue = xtr.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_TRANSIENT);
6067
if ("true".equalsIgnoreCase(transientValue)) {
6168
parameter.setTransient(true);

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,15 @@ public static IOParameter parseInIOParameter(XMLStreamReader xtr) {
251251
String attributeName = xtr.getAttributeLocalName(i);
252252
if (ATTRIBUTE_IOPARAMETER_SOURCE.equals(attributeName) || ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION.equals(attributeName) ||
253253
ATTRIBUTE_IOPARAMETER_TARGET.equals(attributeName)) {
254-
254+
255255
continue;
256256
}
257-
257+
258+
if (ATTRIBUTE_IOPARAMETER_TARGET_TYPE.equals(attributeName)) {
259+
parameter.setTargetType(xtr.getAttributeValue(i));
260+
continue;
261+
}
262+
258263
ExtensionAttribute extensionAttribute = new ExtensionAttribute();
259264
extensionAttribute.setName(attributeName);
260265
extensionAttribute.setValue(xtr.getAttributeValue(i));
@@ -267,10 +272,10 @@ public static IOParameter parseInIOParameter(XMLStreamReader xtr) {
267272
parameter.addAttribute(extensionAttribute);
268273
}
269274
}
270-
275+
271276
return parameter;
272277
}
273-
278+
274279
public static IOParameter parseOutIOParameter(XMLStreamReader xtr) {
275280
IOParameter parameter = null;
276281
String source = xtr.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_SOURCE);
@@ -297,10 +302,15 @@ public static IOParameter parseOutIOParameter(XMLStreamReader xtr) {
297302
String attributeName = xtr.getAttributeLocalName(i);
298303
if (ATTRIBUTE_IOPARAMETER_SOURCE.equals(attributeName) || ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION.equals(attributeName) ||
299304
ATTRIBUTE_IOPARAMETER_TARGET.equals(attributeName) || ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION.equals(attributeName)) {
300-
305+
301306
continue;
302307
}
303-
308+
309+
if (ATTRIBUTE_IOPARAMETER_SOURCE_TYPE.equals(attributeName)) {
310+
parameter.setSourceType(xtr.getAttributeValue(i));
311+
continue;
312+
}
313+
304314
ExtensionAttribute extensionAttribute = new ExtensionAttribute();
305315
extensionAttribute.setName(attributeName);
306316
extensionAttribute.setValue(xtr.getAttributeValue(i));
@@ -456,8 +466,8 @@ public static boolean writeIOParameters(String elementName, List<IOParameter> pa
456466
writeDefaultAttribute(ATTRIBUTE_IOPARAMETER_SOURCE, ioParameter.getSource(), xtw);
457467
}
458468

459-
if (StringUtils.isNotEmpty(ioParameter.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_SOURCE_TYPE))) {
460-
writeDefaultAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_TYPE, ioParameter.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_SOURCE_TYPE), xtw);
469+
if (StringUtils.isNotEmpty(ioParameter.getSourceType())) {
470+
writeDefaultAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_TYPE, ioParameter.getSourceType(), xtw);
461471
}
462472

463473
if (StringUtils.isNotEmpty(ioParameter.getTargetExpression())) {
@@ -467,8 +477,8 @@ public static boolean writeIOParameters(String elementName, List<IOParameter> pa
467477
writeDefaultAttribute(ATTRIBUTE_IOPARAMETER_TARGET, ioParameter.getTarget(), xtw);
468478
}
469479

470-
if (StringUtils.isNotEmpty(ioParameter.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_TARGET_TYPE))) {
471-
writeDefaultAttribute(ATTRIBUTE_IOPARAMETER_TARGET_TYPE, ioParameter.getAttributeValue(null, ATTRIBUTE_IOPARAMETER_TARGET_TYPE), xtw);
480+
if (StringUtils.isNotEmpty(ioParameter.getTargetType())) {
481+
writeDefaultAttribute(ATTRIBUTE_IOPARAMETER_TARGET_TYPE, ioParameter.getTargetType(), xtw);
472482
}
473483

474484
if (ioParameter.isTransient()) {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ void validateModel(BpmnModel model) {
4040

4141
List<IOParameter> parameters = callActivity.getInParameters();
4242
assertThat(parameters)
43-
.extracting(IOParameter::getSource, IOParameter::getTarget, IOParameter::getSourceExpression)
43+
.extracting(IOParameter::getSource, IOParameter::getTarget, IOParameter::getSourceExpression, IOParameter::getTargetType)
4444
.containsExactly(
45-
tuple("test", "test", null),
46-
tuple(null, "test", "${test}")
45+
tuple("test", "test", null, "string"),
46+
tuple(null, "test", "${test}", null)
4747
);
4848

4949
parameters = callActivity.getOutParameters();
5050
assertThat(parameters)
51-
.extracting(IOParameter::getSource, IOParameter::getTarget)
51+
.extracting(IOParameter::getSource, IOParameter::getTarget, IOParameter::getSourceType)
5252
.containsExactly(
53-
tuple("test", "test")
53+
tuple("test", "test", "integer")
5454
);
5555

5656
List<MapExceptionEntry> mapExceptions = callActivity.getMapExceptions();

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ void validateModel(BpmnModel model) {
4545
tuple("${myVariable}", "customerId"),
4646
tuple("anotherProperty", "anotherCustomerId")
4747
);
48-
assertThat(sendEventServiceTask.getEventInParameters().get(2).getAttributeValue(null, "targetType")).isEqualTo("string");
48+
assertThat(sendEventServiceTask.getEventInParameters().get(2).getTargetType()).isEqualTo("string");
4949
assertThat(sendEventServiceTask.getEventOutParameters())
5050
.extracting(IOParameter::getSource, IOParameter::getTarget)
5151
.containsExactly(
5252
tuple("headerProperty", "headerVariable"),
5353
tuple("eventProperty", "newVariable")
5454
);
55-
assertThat(sendEventServiceTask.getEventOutParameters().get(1).getAttributeValue(null, "sourceType")).isEqualTo("integer");
55+
assertThat(sendEventServiceTask.getEventOutParameters().get(1).getSourceType()).isEqualTo("integer");
5656

5757
List<ExtensionElement> correlationParameters = flowElement.getExtensionElements()
5858
.get(ELEMENT_TRIGGER_EVENT_CORRELATION_PARAMETER);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
<process id="process" name="process1" isExecutable="true">
77
<callActivity id="callactivity" name="Call activity" calledElement="processId" flowable:fallbackToDefaultTenant="true">
88
<extensionElements>
9-
<flowable:in source="test" target="test"></flowable:in>
9+
<flowable:in source="test" target="test" targetType="string"></flowable:in>
1010
<flowable:in sourceExpression="${test}" target="test"></flowable:in>
11-
<flowable:out source="test" target="test"></flowable:out>
11+
<flowable:out source="test" target="test" sourceType="integer"></flowable:out>
1212
<flowable:mapException errorCode="myErrorCode" rootCause="org.flowable.Exception">org.flowable.Something</flowable:mapException>
1313
</extensionElements>
1414
</callActivity>

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ public class IOParameter extends BaseElement {
1919

2020
protected String source;
2121
protected String sourceExpression;
22+
protected String sourceType;
2223
protected String target;
2324
protected String targetExpression;
25+
protected String targetType;
2426
protected boolean isTransient;
2527

2628
public String getSource() {
@@ -47,6 +49,14 @@ public void setSourceExpression(String sourceExpression) {
4749
this.sourceExpression = sourceExpression;
4850
}
4951

52+
public String getSourceType() {
53+
return sourceType;
54+
}
55+
56+
public void setSourceType(String sourceType) {
57+
this.sourceType = sourceType;
58+
}
59+
5060
public String getTargetExpression() {
5161
return targetExpression;
5262
}
@@ -55,6 +65,14 @@ public void setTargetExpression(String targetExpression) {
5565
this.targetExpression = targetExpression;
5666
}
5767

68+
public String getTargetType() {
69+
return targetType;
70+
}
71+
72+
public void setTargetType(String targetType) {
73+
this.targetType = targetType;
74+
}
75+
5876
public boolean isTransient() {
5977
return isTransient;
6078
}
@@ -74,8 +92,10 @@ public void setValues(IOParameter otherElement) {
7492
super.setValues(otherElement);
7593
setSource(otherElement.getSource());
7694
setSourceExpression(otherElement.getSourceExpression());
95+
setSourceType(otherElement.getSourceType());
7796
setTarget(otherElement.getTarget());
7897
setTargetExpression(otherElement.getTargetExpression());
98+
setTargetType(otherElement.getTargetType());
7999
setTransient(otherElement.isTransient());
80100
}
81101
}

modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/CmmnXmlConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,10 @@ public interface CmmnXmlConstants {
158158

159159
String ATTRIBUTE_IOPARAMETER_SOURCE = "source";
160160
String ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION = "sourceExpression";
161+
String ATTRIBUTE_IOPARAMETER_SOURCE_TYPE = "sourceType";
161162
String ATTRIBUTE_IOPARAMETER_TARGET = "target";
162163
String ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION = "targetExpression";
164+
String ATTRIBUTE_IOPARAMETER_TARGET_TYPE = "targetType";
163165
String ATTRIBUTE_IOPARAMETER_TRANSIENT = "transient";
164166

165167
String ELEMENT_TIMER_EXPRESSION = "timerExpression";

modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/ExtensionElementsXMLConverter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,10 @@ protected void readOutputParameter(XMLStreamReader xtr, ConversionHelper convers
327327
protected IOParameter readIoParameter(XMLStreamReader xtr) {
328328
String source = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE);
329329
String sourceExpression = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION);
330+
String sourceType = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE_TYPE);
330331
String target = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET);
331332
String targetExpression = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION);
333+
String targetType = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET_TYPE);
332334
String isTransient = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TRANSIENT);
333335

334336
IOParameter parameter = new IOParameter();
@@ -339,12 +341,20 @@ protected IOParameter readIoParameter(XMLStreamReader xtr) {
339341
parameter.setSource(source);
340342
}
341343

344+
if (StringUtils.isNotEmpty(sourceType)) {
345+
parameter.setSourceType(sourceType);
346+
}
347+
342348
if (StringUtils.isNotEmpty(targetExpression)) {
343349
parameter.setTargetExpression(targetExpression);
344350
} else {
345351
parameter.setTarget(target);
346352
}
347353

354+
if (StringUtils.isNotEmpty(targetType)) {
355+
parameter.setTargetType(targetType);
356+
}
357+
348358
if (StringUtils.isNotEmpty(isTransient)) {
349359
parameter.setTransient(Boolean.parseBoolean(isTransient));
350360
}

modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/util/CmmnXmlUtil.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,12 +345,18 @@ public static boolean writeIOParameters(String elementName, List<IOParameter> pa
345345
if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) {
346346
xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION, ioParameter.getSourceExpression());
347347
}
348+
if (StringUtils.isNotEmpty(ioParameter.getSourceType())) {
349+
xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_TYPE, ioParameter.getSourceType());
350+
}
348351
if (StringUtils.isNotEmpty(ioParameter.getTarget())) {
349352
xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_TARGET, ioParameter.getTarget());
350353
}
351354
if (StringUtils.isNotEmpty(ioParameter.getTargetExpression())) {
352355
xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION, ioParameter.getTargetExpression());
353356
}
357+
if (StringUtils.isNotEmpty(ioParameter.getTargetType())) {
358+
xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_TARGET_TYPE, ioParameter.getTargetType());
359+
}
354360

355361
xtw.writeEndElement();
356362
}

0 commit comments

Comments
 (0)