/** * Integrate parallel gateways into the main data flow before and after the call * activity * * @param callActivity * CallActivity * @param graph * Current Graph * @param parallelGateway1 * First parallel gateway (BpmnElement) * @param parallelGateway2 * Second parallel gateway (BpmnElement) */ private void connectParallelGatewaysWithMainDataFlow(final CallActivity callActivity, final IGraph graph, final BpmnElement parallelGateway1, final BpmnElement parallelGateway2) { // read incoming and outgoing sequence flows of the call activity final SequenceFlow incomingSequenceFlow = callActivity.getIncoming().iterator().next(); final SequenceFlow outgoingSequenceFlow = callActivity.getOutgoing().iterator().next(); // remove edges graph.removeEdge(elementMap.get(incomingSequenceFlow.getId()), elementMap.get(callActivity.getId())); graph.removeEdge(elementMap.get(callActivity.getId()), elementMap.get(outgoingSequenceFlow.getId())); // link parallel gateways with the existing data flow graph.addEdge(elementMap.get(incomingSequenceFlow.getId()), parallelGateway1, 100); graph.addEdge(parallelGateway2, elementMap.get(outgoingSequenceFlow.getId()), 100); graph.addEdge(parallelGateway1, elementMap.get(callActivity.getId()), 100); graph.addEdge(elementMap.get(callActivity.getId()), parallelGateway2, 100); }
final Collection<BoundaryEvent> boundaryEvents, final Collection<SubProcess> subProcesses) { for (final SequenceFlow flow : flows) { final BpmnElement flowElement = elementMap.get(flow.getId()); final BpmnElement srcElement = elementMap.get(flow.getSource().getId()); final BpmnElement destElement = elementMap.get(flow.getTarget().getId()); final Collection<SequenceFlow> incomingFlows = subProcess.getIncoming(); for (final SequenceFlow incomingFlow : incomingFlows) { final BpmnElement srcElement = elementMap.get(incomingFlow.getId()); for (final StartEvent startEvent : startEvents) { final BpmnElement dstElement = elementMap.get(startEvent.getId()); final BpmnElement srcElement = elementMap.get(endEvent.getId()); for (final SequenceFlow outgoingFlow : outgoingFlows) { final BpmnElement dstElement = elementMap.get(outgoingFlow.getId()); graph.addEdge(srcElement, dstElement, 100); graph.removeEdge(subprocessElement, dstElement);