Skip to content

Commit

Permalink
Merge branch 'main' of github.com:flowable/flowable-engine
Browse files Browse the repository at this point in the history
  • Loading branch information
tijsrademakers committed Oct 4, 2024
2 parents 23d6692 + b3495bb commit 0c95ab1
Show file tree
Hide file tree
Showing 78 changed files with 2,536 additions and 123 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,9 @@ public interface BpmnXMLConstants {
public static final String ATTRIBUTE_TASK_SERVICE_STORE_RESULT_AS_TRANSIENT = "storeResultVariableAsTransient";

public static final String ATTRIBUTE_TASK_EXTERNAL_WORKER_TOPIC = "topic";
public static final String ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES = "doNotIncludeVariables";
public static final String ELEMENT_EXTERNAL_WORKER_IN_PARAMETER = "externalWorkerInParameter";
public static final String ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER = "externalWorkerOutParameter";

public static final String ATTRIBUTE_TASK_HTTP_PARALLEL_IN_SAME_TRANSACTION = "parallelInSameTransaction";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import org.flowable.bpmn.converter.child.BaseChildElementParser;
import org.flowable.bpmn.converter.child.EventInParameterParser;
import org.flowable.bpmn.converter.child.EventOutParameterParser;
import org.flowable.bpmn.converter.child.ExternalWorkerInParameterParser;
import org.flowable.bpmn.converter.child.ExternalWorkerOutParameterParser;
import org.flowable.bpmn.converter.child.InParameterParser;
import org.flowable.bpmn.converter.child.OutParameterParser;
import org.flowable.bpmn.converter.export.FieldExtensionExport;
Expand All @@ -51,7 +53,8 @@ public class ServiceTaskXMLConverter extends BaseBpmnXMLConverter {

protected Map<String, BaseChildElementParser> caseServiceChildParserMap = new HashMap<>();
protected Map<String, BaseChildElementParser> sendEventServiceChildParserMap = new HashMap<>();

protected Map<String, BaseChildElementParser> externalWorkerTaskChildParserMap = new HashMap<>();

protected static final List<ExtensionAttribute> defaultServiceTaskAttributes = Arrays.asList(
new ExtensionAttribute(ATTRIBUTE_TYPE),
new ExtensionAttribute(ATTRIBUTE_TASK_SERVICE_CLASS),
Expand Down Expand Up @@ -89,6 +92,12 @@ public ServiceTaskXMLConverter() {
sendEventServiceChildParserMap.put(eventInParameterParser.getElementName(), eventInParameterParser);
EventOutParameterParser eventOutParameterParser = new EventOutParameterParser();
sendEventServiceChildParserMap.put(eventOutParameterParser.getElementName(), eventOutParameterParser);

// External Worker
ExternalWorkerInParameterParser externalWorkerInParameterParser = new ExternalWorkerInParameterParser();
externalWorkerTaskChildParserMap.put(externalWorkerInParameterParser.getElementName(), externalWorkerInParameterParser);
ExternalWorkerOutParameterParser externalWorkerOutParameterParser = new ExternalWorkerOutParameterParser();
externalWorkerTaskChildParserMap.put(externalWorkerOutParameterParser.getElementName(), externalWorkerOutParameterParser);
}

@Override
Expand Down Expand Up @@ -248,6 +257,10 @@ protected void writeExternalTaskAdditionalAttributes(ExternalWorkerServiceTask e
if (StringUtils.isNotEmpty(externalWorkerTask.getSkipExpression())) {
writeQualifiedAttribute(ATTRIBUTE_TASK_SERVICE_SKIP_EXPRESSION, externalWorkerTask.getSkipExpression(), xtw);
}

if (externalWorkerTask.isDoNotIncludeVariables()) {
writeQualifiedAttribute(ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES, String.valueOf(externalWorkerTask.isDoNotIncludeVariables()), xtw);
}
}


Expand Down Expand Up @@ -303,7 +316,8 @@ protected boolean writeExtensionChildElements(BaseElement element, boolean didWr

} else if (element instanceof SendEventServiceTask) {
return writeSendServiceExtensionChildElements(element, didWriteExtensionStartElement, xtw);

} else if (element instanceof ExternalWorkerServiceTask) {
return writeExternalWorkerTaskExtensionChildElements(element, didWriteExtensionStartElement, xtw);
} else {
return writeServiceTaskExtensionChildElements((ServiceTask) element, didWriteExtensionStartElement, xtw);
}
Expand Down Expand Up @@ -360,6 +374,14 @@ protected boolean writeSendServiceExtensionChildElements(BaseElement element, bo
return didWriteExtensionStartElement;
}

protected boolean writeExternalWorkerTaskExtensionChildElements(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception {
ExternalWorkerServiceTask externalWorkerTask = (ExternalWorkerServiceTask) element;
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_EXTERNAL_WORKER_IN_PARAMETER, externalWorkerTask.getInParameters(), didWriteExtensionStartElement, xtw);
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER, externalWorkerTask.getOutParameters(), didWriteExtensionStartElement, xtw);

return didWriteExtensionStartElement;
}

protected boolean writeCaseServiceTaskExtensionChildElements(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception {
CaseServiceTask caseServiceTask = (CaseServiceTask) element;
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_IN_PARAMETERS, caseServiceTask.getInParameters(), didWriteExtensionStartElement, xtw);
Expand Down Expand Up @@ -432,8 +454,11 @@ protected void convertSendEventServiceTaskXMLProperties(SendEventServiceTask sen

protected void convertExternalWorkerTaskXMLProperties(ExternalWorkerServiceTask externalWorkerServiceTask, BpmnModel bpmnModel, XMLStreamReader xtr) throws Exception {
externalWorkerServiceTask.setTopic(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_TASK_EXTERNAL_WORKER_TOPIC, xtr));
externalWorkerServiceTask.setDoNotIncludeVariables(
Boolean.parseBoolean(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES, xtr))
);

parseChildElements(getXMLElementName(), externalWorkerServiceTask, bpmnModel, xtr);
parseChildElements(getXMLElementName(), externalWorkerServiceTask, externalWorkerTaskChildParserMap, bpmnModel, xtr);
}

protected void convertHttpServiceTaskXMLProperties(HttpServiceTask httpServiceTask, BpmnModel bpmnModel, XMLStreamReader xtr) throws Exception {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/* Licensed 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.flowable.bpmn.converter.child;

import javax.xml.stream.XMLStreamReader;

import org.flowable.bpmn.converter.util.BpmnXMLUtil;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
import org.flowable.bpmn.model.IOParameter;

/**
* @author Valentin Zickner
*/
public class ExternalWorkerInParameterParser extends BaseChildElementParser {

@Override
public String getElementName() {
return ELEMENT_EXTERNAL_WORKER_IN_PARAMETER;
}

@Override
public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {
IOParameter parameter = BpmnXMLUtil.parseInIOParameter(xtr);
if (parameter != null) {
((ExternalWorkerServiceTask) parentElement).getInParameters().add(parameter);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/* Licensed 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.flowable.bpmn.converter.child;

import javax.xml.stream.XMLStreamReader;

import org.flowable.bpmn.converter.util.BpmnXMLUtil;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
import org.flowable.bpmn.model.IOParameter;

/**
* @author Valentin Zickner
*/
public class ExternalWorkerOutParameterParser extends BaseChildElementParser {

@Override
public String getElementName() {
return ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER;
}

@Override
public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {
IOParameter parameter = BpmnXMLUtil.parseOutIOParameter(xtr);
((ExternalWorkerServiceTask) parentElement).getOutParameters().add(parameter);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,14 @@
</annotation>
</attribute>

<attribute name="doNotIncludeVariables" type="boolean">
<annotation>
<documentation>
Mark an external worker task to explicit not include the variables.
</documentation>
</annotation>
</attribute>

<element name="field">
<annotation>
<documentation>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.IOParameter;
import org.flowable.editor.language.xml.util.BpmnXmlConverterTest;

class ExternalWorkerServiceTaskConverterTest {
Expand All @@ -32,5 +33,15 @@ void validateModel(BpmnModel model) {
assertThat(externalWorkerServiceTask.getTopic()).isEqualTo("topic");
assertThat(externalWorkerServiceTask.getSkipExpression()).isEqualTo("skipExpression");
assertThat(externalWorkerServiceTask.isExclusive()).isTrue();

assertThat(externalWorkerServiceTask.getInParameters()).hasSize(1);
IOParameter inParameter = externalWorkerServiceTask.getInParameters().get(0);
assertThat(inParameter.getSource()).isEqualTo("description");
assertThat(inParameter.getTarget()).isEqualTo("theDescription");
assertThat(externalWorkerServiceTask.getOutParameters()).hasSize(1);
IOParameter outParameter = externalWorkerServiceTask.getOutParameters().get(0);
assertThat(outParameter.getSource()).isEqualTo("theResult");
assertThat(outParameter.getTarget()).isEqualTo("result");

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
<sequenceFlow sourceRef="start" targetRef="externalWorkerServiceTask"/>
<serviceTask id="externalWorkerServiceTask" flowable:type="external-worker" name="External worker task" flowable:skipExpression="skipExpression"
flowable:topic="topic">
<extensionElements>
<flowable:externalWorkerInParameter source="description" target="theDescription"/>
<flowable:externalWorkerOutParameter source="theResult" target="result"/>
</extensionElements>
</serviceTask>
<sequenceFlow sourceRef="externalWorkerServiceTask" targetRef="end"/>
<endEvent id="end"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,18 @@
*/
package org.flowable.bpmn.model;

import java.util.ArrayList;
import java.util.List;

/**
* @author Filip Hrisafov
*/
public class ExternalWorkerServiceTask extends ServiceTask {
public class ExternalWorkerServiceTask extends ServiceTask implements HasOutParameters, HasInParameters {

protected String topic;
protected boolean doNotIncludeVariables = false;
protected List<IOParameter> inParameters = new ArrayList<>();
protected List<IOParameter> outParameters = new ArrayList<>();

public String getTopic() {
return topic;
Expand All @@ -27,6 +33,44 @@ public void setTopic(String topic) {
this.topic = topic;
}

public boolean isDoNotIncludeVariables() {
return doNotIncludeVariables;
}

public void setDoNotIncludeVariables(boolean doNotIncludeVariables) {
this.doNotIncludeVariables = doNotIncludeVariables;
}

@Override
public List<IOParameter> getInParameters() {
return inParameters;
}

@Override
public void setInParameters(List<IOParameter> inParameters) {
this.inParameters = inParameters;
}

@Override
public void addInParameter(IOParameter inParameter) {
this.inParameters.add(inParameter);
}

@Override
public List<IOParameter> getOutParameters() {
return outParameters;
}

@Override
public void setOutParameters(List<IOParameter> outParameters) {
this.outParameters = outParameters;
}

@Override
public void addOutParameter(IOParameter outParameter) {
this.outParameters.add(outParameter);
}

@Override
public ExternalWorkerServiceTask clone() {
ExternalWorkerServiceTask clone = new ExternalWorkerServiceTask();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
package org.flowable.cmmn.api.history;

import java.util.Date;
import java.util.Map;

/**
* @author Dennis Federico
Expand Down Expand Up @@ -88,4 +89,6 @@ public interface HistoricPlanItemInstance {

/** Sets an optional localized name for the plan item */
void setLocalizedName(String localizedName);

Map<String, Object> getPlanItemInstanceLocalVariables();
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ public interface HistoricPlanItemInstanceQuery extends Query<HistoricPlanItemIns
*/
HistoricPlanItemInstanceQuery withLocalizationFallback();

HistoricPlanItemInstanceQuery includeLocalVariables();

HistoricPlanItemInstanceQuery orderByCreateTime();
HistoricPlanItemInstanceQuery orderByEndedTime();
HistoricPlanItemInstanceQuery orderByLastAvailableTime();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
package org.flowable.cmmn.api.runtime;

import java.util.Date;
import java.util.Map;

/**
* @author Joram Barrez
Expand Down Expand Up @@ -58,7 +59,7 @@ default Date getStartTime() {
String getFormKey();
String getExtraValue();
String getTenantId();

Map<String, Object> getPlanItemInstanceLocalVariables();

/** Sets an optional localized name for the plan item */
void setLocalizedName(String localizedName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,12 @@ public interface PlanItemInstanceQuery extends Query<PlanItemInstanceQuery, Plan
*/
PlanItemInstanceQuery caseVariableNotExists(String name);

/**
*
* Include local plan item instance variables in the query result
*/
PlanItemInstanceQuery includeLocalVariables();

/**
* Localize plan item name to specified locale.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ public interface CmmnXmlConstants {
String ATTRIBUTE_STORE_RESULT_AS_TRANSIENT = "storeResultVariableAsTransient";

String ATTRIBUTE_EXTERNAL_WORKER_TOPIC = "topic";
String ATTRIBUTE_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES = "doNotIncludeVariables";
String ELEMENT_EXTERNAL_WORKER_IN_PARAMETER = "externalWorkerInParameter";
String ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER = "externalWorkerOutParameter";

String ATTRIBUTE_IS_AUTO_COMPLETE = "autoComplete";
String ATTRIBUTE_AUTO_COMPLETE_CONDITION = "autoCompleteCondition";
Expand Down Expand Up @@ -157,6 +160,7 @@ public interface CmmnXmlConstants {
String ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION = "sourceExpression";
String ATTRIBUTE_IOPARAMETER_TARGET = "target";
String ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION = "targetExpression";
String ATTRIBUTE_IOPARAMETER_TRANSIENT = "transient";

String ELEMENT_TIMER_EXPRESSION = "timerExpression";
String ELEMENT_PLAN_ITEM_START_TRIGGER = "planItemStartTrigger";
Expand Down
Loading

0 comments on commit 0c95ab1

Please sign in to comment.