in taverna-workflowmodel-api/src/main/java/org/apache/taverna/workflowmodel/utils/Tools.java [229:277]
public static Edit<?> getCreateAndConnectDatalinkEdit(Dataflow dataflow,
EventForwardingOutputPort source, EventHandlingInputPort sink,
Edits edits) {
Edit<?> edit = null;
Datalink incomingLink = sink.getIncomingLink();
if (incomingLink == null) {
Datalink datalink = edits.createDatalink(source, sink);
edit = edits.getConnectDatalinkEdit(datalink);
} else {
List<Edit<?>> editList = new ArrayList<>();
Merge merge = null;
int counter = 0; // counter for merge input port names
if (incomingLink.getSource() instanceof MergeOutputPort)
merge = ((MergeOutputPort) incomingLink.getSource()).getMerge();
else {
merge = edits.createMerge(dataflow);
editList.add(edits.getAddMergeEdit(dataflow, merge));
editList.add(edits.getDisconnectDatalinkEdit(incomingLink));
MergeInputPort mergeInputPort = edits.createMergeInputPort(
merge,
getUniqueMergeInputPortName(merge,
incomingLink.getSource().getName() + "To"
+ merge.getLocalName() + "_input",
counter++), incomingLink.getSink().getDepth());
editList.add(edits.getAddMergeInputPortEdit(merge,
mergeInputPort));
Datalink datalink = edits.createDatalink(
incomingLink.getSource(), mergeInputPort);
editList.add(edits.getConnectDatalinkEdit(datalink));
datalink = edits.createDatalink(merge.getOutputPort(),
incomingLink.getSink());
editList.add(edits.getConnectDatalinkEdit(datalink));
}
MergeInputPort mergeInputPort = edits.createMergeInputPort(
merge,
getUniqueMergeInputPortName(merge, source.getName() + "To"
+ merge.getLocalName() + "_input", counter),
sink.getDepth());
editList.add(edits.getAddMergeInputPortEdit(merge, mergeInputPort));
Datalink datalink = edits.createDatalink(source, mergeInputPort);
editList.add(edits.getConnectDatalinkEdit(datalink));
edit = new CompoundEdit(editList);
}
return edit;
}