
com.effektif.workflow.api.activities.SubProcess Maven / Gradle / Ivy
/*
* Copyright 2014 Effektif GmbH.
*
* 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 com.effektif.workflow.api.activities;
import com.effektif.workflow.api.bpmn.BpmnElement;
import com.effektif.workflow.api.bpmn.BpmnReader;
import com.effektif.workflow.api.bpmn.BpmnWriter;
import com.effektif.workflow.api.bpmn.XmlElement;
import com.effektif.workflow.api.json.TypeName;
import com.effektif.workflow.api.model.WorkflowId;
import com.effektif.workflow.api.types.DataType;
import com.effektif.workflow.api.workflow.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Invokes another workflow and ends when the other workflow instance completes.
*
* @see Call Activity
* @author Tom Baeyens
*/
@TypeName("subProcess")
@BpmnElement("callActivity")
public class SubProcess extends AbstractBindableActivity {
protected WorkflowId subWorkflowId;
protected Binding subWorkflowSourceId;
/**
* Maps sub-workflow variable IDs to parent workflow bindings, e.g. variable expressions.
*/
protected Map subWorkflowInputs;
@Override
public void readBpmn(BpmnReader r) {
subWorkflowId = r.readIdAttributeEffektif("subWorkflowId", WorkflowId.class);
subWorkflowSourceId(r.readStringAttributeEffektif("subWorkflowSourceId"));
super.readBpmn(r);
r.startExtensionElements();
// Read sub-workflow inputs.
for (XmlElement inputElement : r.readElementsEffektif("subWorkflowInput")) {
if (subWorkflowInputs == null) {
subWorkflowInputs = new HashMap<>();
}
r.startElement(inputElement);
String variableId = r.readStringAttributeEffektif("variableId");
List> singleBinding = r.readBindings("binding");
if (singleBinding != null && !singleBinding.isEmpty()) {
subWorkflowInputs.put(variableId, singleBinding.get(0));
}
r.endElement();
}
r.endExtensionElements();
}
@Override
public void writeBpmn(BpmnWriter w) {
super.writeBpmn(w);
w.writeIdAttributeEffektif("subWorkflowId", subWorkflowId);
if (subWorkflowSourceId != null) {
w.writeStringAttributeEffektif("subWorkflowSourceId", subWorkflowSourceId.getValue());
}
if (subWorkflowInputs != null) {
w.startExtensionElements();
for (Map.Entry input : subWorkflowInputs.entrySet()) {
if (input.getKey() != null && input.getValue() != null) {
w.startElementEffektif("subWorkflowInput");
w.writeStringAttributeEffektif("variableId", input.getKey());
w.writeBinding("binding", input.getValue());
w.endElement();
}
}
w.endExtensionElements();
}
}
@Override
public SubProcess id(String id) {
super.id(id);
return this;
}
public SubProcess subWorkflowId(WorkflowId subWorkflowId) {
this.subWorkflowId = subWorkflowId;
return this;
}
public SubProcess subWorkflowSourceId(String id) {
setSubWorkflowSourceId(id);
return this;
}
public WorkflowId getSubWorkflowId() {
return subWorkflowId;
}
public String getSubWorkflowSourceId() {
return subWorkflowSourceId == null ? null : subWorkflowSourceId.getValue();
}
public void setSubWorkflowId(WorkflowId id) {
this.subWorkflowId = id;
}
public void setSubWorkflowSourceId(String id) {
this.subWorkflowSourceId = new Binding().value(id);
}
public Map getSubWorkflowInputs() {
return subWorkflowInputs;
}
public void setSubWorkflowInputs(Map subWorkflowInputs) {
this.subWorkflowInputs = subWorkflowInputs;
}
@Override
public SubProcess inputExpression(String subWorkflowVariableId, String expression) {
if (subWorkflowInputs == null) {
subWorkflowInputs = new HashMap<>();
}
subWorkflowInputs.put(subWorkflowVariableId, new Binding().expression(expression));
return this;
}
@Override
public SubProcess inputValue(String subWorkflowVariableId, Object value) {
if (subWorkflowInputs == null) {
subWorkflowInputs = new HashMap<>();
}
subWorkflowInputs.put(subWorkflowVariableId, new Binding().value(value));
return this;
}
@Override
public SubProcess output(String subWorkflowKey, String variableId) {
super.output(subWorkflowKey, variableId);
return this;
}
/**
* @see Multi-instance tasks
*/
@Override
public SubProcess multiInstance(MultiInstance multiInstance) {
super.multiInstance(multiInstance);
return this;
}
@Override
public SubProcess transitionTo(String toActivityId) {
super.transitionTo(toActivityId);
return this;
}
@Override
public SubProcess transitionTo(Transition transition) {
super.transitionTo(transition);
return this;
}
@Override
public SubProcess activity(Activity activity) {
super.activity(activity);
return this;
}
@Override
public SubProcess transition(Transition transition) {
super.transition(transition);
return this;
}
@Override
public SubProcess variable(Variable variable) {
super.variable(variable);
return this;
}
@Override
public SubProcess timer(Timer timer) {
super.timer(timer);
return this;
}
@Override
public SubProcess property(String key, Object value) {
super.property(key, value);
return this;
}
@Override
public SubProcess transitionToNext() {
super.transitionToNext();
return this;
}
@Override
public SubProcess activity(String id, Activity activity) {
super.activity(id, activity);
return this;
}
@Override
public SubProcess transition(String id, Transition transition) {
super.transition(id, transition);
return this;
}
@Override
public SubProcess variable(String id, DataType type) {
super.variable(id, type);
return this;
}
@Override
public SubProcess name(String name) {
super.name(name);
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy