123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- import {
- getBusinessObject,
- is
- } from '../../util/ModelUtil';
- import ModelCloneHelper from '../../util/model/ModelCloneHelper';
- import {
- getProperties,
- IGNORED_PROPERTIES
- } from '../../util/model/ModelCloneUtils';
- import {
- filter,
- forEach
- } from 'min-dash';
- function setProperties(descriptor, data, properties) {
- forEach(properties, function(property) {
- if (data[property] !== undefined) {
- descriptor[property] = data[property];
- }
- });
- }
- function removeProperties(element, properties) {
- forEach(properties, function(prop) {
- if (element[prop]) {
- delete element[prop];
- }
- });
- }
- export default function BpmnCopyPaste(
- bpmnFactory, eventBus, copyPaste,
- clipboard, canvas, bpmnRules) {
- var helper = new ModelCloneHelper(eventBus, bpmnFactory);
- copyPaste.registerDescriptor(function(element, descriptor) {
- var businessObject = descriptor.oldBusinessObject = getBusinessObject(element);
- var colors = {};
- descriptor.type = element.type;
- setProperties(descriptor, businessObject.di, [ 'isExpanded' ]);
- setProperties(colors, businessObject.di, [ 'fill', 'stroke' ]);
- descriptor.colors = colors;
- if (element.type === 'label') {
- return descriptor;
- }
- setProperties(descriptor, businessObject, [
- 'processRef',
- 'triggeredByEvent'
- ]);
- if (businessObject.default) {
- descriptor.default = businessObject.default.id;
- }
- return descriptor;
- });
- eventBus.on('element.paste', function(context) {
- var descriptor = context.descriptor,
- createdElements = context.createdElements,
- parent = descriptor.parent,
- rootElement = canvas.getRootElement(),
- oldBusinessObject = descriptor.oldBusinessObject,
- newBusinessObject,
- source,
- target,
- canConnect;
- newBusinessObject = bpmnFactory.create(oldBusinessObject.$type);
- var properties = getProperties(oldBusinessObject.$descriptor);
- properties = filter(properties, function(property) {
- return IGNORED_PROPERTIES.indexOf(property.replace(/bpmn:/, '')) === -1;
- });
- descriptor.businessObject = helper.clone(oldBusinessObject, newBusinessObject, properties);
- if (descriptor.type === 'label') {
- return;
- }
- if (is(parent, 'bpmn:Process')) {
- descriptor.parent = is(rootElement, 'bpmn:Collaboration') ? rootElement : parent;
- }
- if (descriptor.type === 'bpmn:DataOutputAssociation' ||
- descriptor.type === 'bpmn:DataInputAssociation' ||
- descriptor.type === 'bpmn:MessageFlow') {
- descriptor.parent = rootElement;
- }
- if (is(parent, 'bpmn:Lane')) {
- descriptor.parent = parent.parent;
- }
- // make sure that the correct type of connection is created
- if (descriptor.waypoints) {
- source = createdElements[descriptor.source];
- target = createdElements[descriptor.target];
- if (source && target) {
- source = source.element;
- target = target.element;
- }
- canConnect = bpmnRules.canConnect(source, target);
- if (canConnect) {
- descriptor.type = canConnect.type;
- }
- }
- // remove the id or else we cannot paste multiple times
- delete newBusinessObject.id;
- // assign an ID
- bpmnFactory._ensureId(newBusinessObject);
- if (descriptor.type === 'bpmn:Participant' && descriptor.processRef) {
- descriptor.processRef = newBusinessObject.processRef = bpmnFactory.create('bpmn:Process');
- }
- setProperties(newBusinessObject, descriptor, [
- 'isExpanded',
- 'triggeredByEvent'
- ]);
- removeProperties(descriptor, [
- 'triggeredByEvent'
- ]);
- });
- }
- BpmnCopyPaste.$inject = [
- 'bpmnFactory',
- 'eventBus',
- 'copyPaste',
- 'clipboard',
- 'canvas',
- 'bpmnRules'
- ];
|