12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import inherits from 'inherits';
- import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
- import { is } from '../../../util/ModelUtil';
- export default function EventBasedGatewayBehavior(eventBus, modeling) {
- CommandInterceptor.call(this, eventBus);
- /**
- * Remove existing sequence flows of event-based target before connecting
- * from event-based gateway.
- */
- this.preExecuted('connection.create', function(event) {
- var context = event.context,
- source = context.source,
- target = context.target,
- existingIncomingConnections = target.incoming.slice();
- if (context.hints && context.hints.createElementsBehavior === false) {
- return;
- }
- if (
- is(source, 'bpmn:EventBasedGateway') &&
- target.incoming.length
- ) {
- existingIncomingConnections.filter(isSequenceFlow)
- .forEach(function(sequenceFlow) {
- modeling.removeConnection(sequenceFlow);
- });
- }
- });
- /**
- * After replacing shape with event-based gateway, remove incoming sequence
- * flows of event-based targets which do not belong to event-based gateway
- * source.
- */
- this.preExecuted('shape.replace', function(event) {
- var newShape = event.context.newShape,
- newShapeTargets,
- newShapeTargetsIncomingSequenceFlows;
- if (!is(newShape, 'bpmn:EventBasedGateway')) {
- return;
- }
- newShapeTargets = newShape.outgoing.filter(isSequenceFlow)
- .map(function(sequenceFlow) {
- return sequenceFlow.target;
- });
- newShapeTargetsIncomingSequenceFlows = newShapeTargets.reduce(function(sequenceFlows, target) {
- var incomingSequenceFlows = target.incoming.filter(isSequenceFlow);
- return sequenceFlows.concat(incomingSequenceFlows);
- }, []);
- newShapeTargetsIncomingSequenceFlows.forEach(function(sequenceFlow) {
- if (sequenceFlow.source !== newShape) {
- modeling.removeConnection(sequenceFlow);
- }
- });
- });
- }
- EventBasedGatewayBehavior.$inject = [
- 'eventBus',
- 'modeling'
- ];
- inherits(EventBasedGatewayBehavior, CommandInterceptor);
- // helpers //////////////////////
- function isSequenceFlow(connection) {
- return is(connection, 'bpmn:SequenceFlow');
- }
|