bpmn-js/lib/features/modeling/behavior/MoveStartEventBehavior.js
2015-08-21 13:46:21 +02:00

58 lines
1.5 KiB
JavaScript

'use strict';
var inherits = require('inherits');
var CommandInterceptor = require('diagram-js/lib/command/CommandInterceptor');
var forEach = require('lodash/collection/forEach');
var isEventSubProcess = require('../../../util/DiUtil').isEventSubProcess;
/**
* Defines the behavior when a start event is moved
*/
function MoveStartEventBehavior(eventBus, bpmnReplace, bpmnRules, elementRegistry, selection) {
CommandInterceptor.call(this, eventBus);
this.postExecuted([ 'elements.move' ], function(event) {
var context = event.context,
target = context.newParent,
elements = [];
forEach(context.closure.topLevel, function(topLevelElements) {
if (isEventSubProcess(topLevelElements)) {
elements = elements.concat(topLevelElements.children);
} else {
elements = elements.concat(topLevelElements);
}
});
var canReplace = bpmnRules.canReplace(elements, target);
forEach(canReplace.replace, function(replacements) {
var newElement = {
type: replacements.newElementType
};
var oldElement = elementRegistry.get(replacements.oldElementId);
var idx = elements.indexOf(oldElement);
elements[idx] = bpmnReplace.replaceElement(oldElement, newElement, { select: false });
});
if (canReplace.replace) {
selection.select(elements);
}
});
}
MoveStartEventBehavior.$inject = [ 'eventBus', 'bpmnReplace', 'bpmnRules', 'elementRegistry', 'selection' ];
inherits(MoveStartEventBehavior, CommandInterceptor);
module.exports = MoveStartEventBehavior;