You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
import inherits from 'inherits-browser'; |
|
|
|
import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor'; |
|
|
|
import { is } from '../../../util/ModelUtil'; |
|
|
|
import { |
|
filter, |
|
forEach |
|
} from 'min-dash'; |
|
|
|
|
|
/** |
|
* BPMN specific boundary event behavior |
|
*/ |
|
export default function BoundaryEventBehavior(eventBus, modeling) { |
|
|
|
CommandInterceptor.call(this, eventBus); |
|
|
|
function getBoundaryEvents(element) { |
|
return filter(element.attachers, function(attacher) { |
|
return is(attacher, 'bpmn:BoundaryEvent'); |
|
}); |
|
} |
|
|
|
// remove after connecting to event-based gateway |
|
this.postExecute('connection.create', function(event) { |
|
var source = event.context.source, |
|
target = event.context.target, |
|
boundaryEvents = getBoundaryEvents(target); |
|
|
|
if ( |
|
is(source, 'bpmn:EventBasedGateway') && |
|
is(target, 'bpmn:ReceiveTask') && |
|
boundaryEvents.length > 0 |
|
) { |
|
modeling.removeElements(boundaryEvents); |
|
} |
|
|
|
}); |
|
|
|
// remove after replacing connected gateway with event-based gateway |
|
this.postExecute('connection.reconnect', function(event) { |
|
var oldSource = event.context.oldSource, |
|
newSource = event.context.newSource; |
|
|
|
if (is(oldSource, 'bpmn:Gateway') && |
|
is(newSource, 'bpmn:EventBasedGateway')) { |
|
forEach(newSource.outgoing, function(connection) { |
|
var target = connection.target, |
|
attachedboundaryEvents = getBoundaryEvents(target); |
|
|
|
if (is(target, 'bpmn:ReceiveTask') && |
|
attachedboundaryEvents.length > 0) { |
|
modeling.removeElements(attachedboundaryEvents); |
|
} |
|
}); |
|
} |
|
}); |
|
|
|
} |
|
|
|
BoundaryEventBehavior.$inject = [ |
|
'eventBus', |
|
'modeling' |
|
]; |
|
|
|
inherits(BoundaryEventBehavior, CommandInterceptor); |