update
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
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'
|
||||
];
|
||||
@@ -0,0 +1,11 @@
|
||||
import CopyPasteModule from 'diagram-js/lib/features/copy-paste';
|
||||
|
||||
import BpmnCopyPaste from './BpmnCopyPaste';
|
||||
|
||||
export default {
|
||||
__depends__: [
|
||||
CopyPasteModule
|
||||
],
|
||||
__init__: [ 'bpmnCopyPaste' ],
|
||||
bpmnCopyPaste: [ 'type', BpmnCopyPaste ]
|
||||
};
|
||||
Reference in New Issue
Block a user