chore: adjust features to new DI structure
Related to https://github.com/bpmn-io/bpmn-js/issues/1472
This commit is contained in:
parent
1daac19ab5
commit
6a5e1e9f7d
|
@ -197,7 +197,7 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
|
|||
}
|
||||
|
||||
|
||||
if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(businessObject)) {
|
||||
if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(element)) {
|
||||
|
||||
var childLanes = getChildLanes(element);
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import {
|
||||
getBusinessObject,
|
||||
getDi,
|
||||
is
|
||||
} from '../../util/ModelUtil';
|
||||
|
||||
|
@ -45,23 +46,13 @@ export default function BpmnCopyPaste(bpmnFactory, eventBus, moddleCopy) {
|
|||
element = context.element;
|
||||
|
||||
var businessObject = descriptor.oldBusinessObject = getBusinessObject(element);
|
||||
var di = descriptor.oldDi = getDi(element);
|
||||
|
||||
descriptor.type = element.type;
|
||||
|
||||
copyProperties(businessObject, descriptor, 'name');
|
||||
|
||||
descriptor.di = {};
|
||||
|
||||
// colors will be set to DI
|
||||
copyProperties(businessObject.di, descriptor.di, [
|
||||
'fill',
|
||||
'stroke',
|
||||
'background-color',
|
||||
'border-color',
|
||||
'color'
|
||||
]);
|
||||
|
||||
copyProperties(businessObject.di, descriptor, 'isExpanded');
|
||||
copyProperties(di, descriptor, 'isExpanded');
|
||||
|
||||
if (isLabel(descriptor)) {
|
||||
return descriptor;
|
||||
|
@ -135,11 +126,13 @@ export default function BpmnCopyPaste(bpmnFactory, eventBus, moddleCopy) {
|
|||
var cache = context.cache,
|
||||
descriptor = context.descriptor,
|
||||
oldBusinessObject = descriptor.oldBusinessObject,
|
||||
newBusinessObject;
|
||||
oldDi = descriptor.oldDi,
|
||||
newBusinessObject, newDi;
|
||||
|
||||
// do NOT copy business object if external label
|
||||
if (isLabel(descriptor)) {
|
||||
descriptor.businessObject = getBusinessObject(cache[ descriptor.labelTarget ]);
|
||||
descriptor.di = getDi(cache[ descriptor.labelTarget ]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -151,6 +144,13 @@ export default function BpmnCopyPaste(bpmnFactory, eventBus, moddleCopy) {
|
|||
newBusinessObject
|
||||
);
|
||||
|
||||
newDi = bpmnFactory.create(oldDi.$type);
|
||||
|
||||
descriptor.di = moddleCopy.copyElement(
|
||||
oldDi,
|
||||
newDi
|
||||
);
|
||||
|
||||
// resolve references e.g. default sequence flow
|
||||
resolveReferences(descriptor, cache);
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { getDi } from '../../draw/BpmnRenderUtil';
|
||||
import { getBusinessObject } from '../../util/ModelUtil';
|
||||
|
||||
import {
|
||||
filter,
|
||||
|
@ -17,7 +16,7 @@ export default function BpmnDiOrdering(eventBus, canvas) {
|
|||
|
||||
function orderDi() {
|
||||
var root = canvas.getRootElement(),
|
||||
rootDi = getBusinessObject(root).di,
|
||||
rootDi = getDi(root),
|
||||
elements,
|
||||
diElements;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import {
|
|||
} from 'tiny-svg';
|
||||
|
||||
import {
|
||||
getBusinessObject,
|
||||
getDi,
|
||||
is
|
||||
} from '../../util/ModelUtil';
|
||||
|
||||
|
@ -132,7 +132,7 @@ LabelEditingPreview.$inject = [
|
|||
// helpers ///////////////////
|
||||
|
||||
function getStrokeColor(element, defaultColor) {
|
||||
var bo = getBusinessObject(element);
|
||||
var di = getDi(element);
|
||||
|
||||
return bo.di.get('stroke') || defaultColor || 'black';
|
||||
return di.get('stroke') || defaultColor || 'black';
|
||||
}
|
|
@ -67,7 +67,8 @@ export default function UpdateLabelHandler(modeling, textRenderer) {
|
|||
|
||||
modeling.createLabel(element, labelCenter, {
|
||||
id: businessObject.id + '_label',
|
||||
businessObject: businessObject
|
||||
businessObject: businessObject,
|
||||
di: element.di
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import {
|
|||
|
||||
import {
|
||||
getBusinessObject,
|
||||
getDi,
|
||||
is
|
||||
} from '../../util/ModelUtil';
|
||||
|
||||
|
@ -307,8 +308,9 @@ BpmnUpdater.prototype.updateParent = function(element, oldParent) {
|
|||
var parentShape = element.parent;
|
||||
|
||||
var businessObject = element.businessObject,
|
||||
di = getDi(element),
|
||||
parentBusinessObject = parentShape && parentShape.businessObject,
|
||||
parentDi = parentBusinessObject && parentBusinessObject.di;
|
||||
parentDi = getDi(parentShape);
|
||||
|
||||
if (is(element, 'bpmn:FlowNode')) {
|
||||
this.updateFlowNodeRefs(businessObject, parentBusinessObject, oldParent && oldParent.businessObject);
|
||||
|
@ -336,13 +338,13 @@ BpmnUpdater.prototype.updateParent = function(element, oldParent) {
|
|||
this.updateSemanticParent(businessObject.dataObjectRef, parentBusinessObject);
|
||||
}
|
||||
|
||||
this.updateDiParent(businessObject.di, parentDi);
|
||||
this.updateDiParent(di, parentDi);
|
||||
};
|
||||
|
||||
|
||||
BpmnUpdater.prototype.updateBounds = function(shape) {
|
||||
|
||||
var di = shape.businessObject.di;
|
||||
var di = getDi(shape);
|
||||
|
||||
var target = (shape instanceof Label) ? this._getLabel(di) : di;
|
||||
|
||||
|
@ -382,14 +384,17 @@ BpmnUpdater.prototype.updateFlowNodeRefs = function(businessObject, newContainme
|
|||
|
||||
|
||||
// update existing sourceElement and targetElement di information
|
||||
BpmnUpdater.prototype.updateDiConnection = function(di, newSource, newTarget) {
|
||||
BpmnUpdater.prototype.updateDiConnection = function(connection, newSource, newTarget) {
|
||||
var connectionDi = getDi(connection),
|
||||
newSourceDi = getDi(newSource),
|
||||
newTargetDi = getDi(newTarget);
|
||||
|
||||
if (di.sourceElement && di.sourceElement.bpmnElement !== newSource) {
|
||||
di.sourceElement = newSource && newSource.di;
|
||||
if (connectionDi.sourceElement && connectionDi.sourceElement.bpmnElement !== getBusinessObject(newSource)) {
|
||||
connectionDi.sourceElement = newSource && newSourceDi;
|
||||
}
|
||||
|
||||
if (di.targetElement && di.targetElement.bpmnElement !== newTarget) {
|
||||
di.targetElement = newTarget && newTarget.di;
|
||||
if (connectionDi.targetElement && connectionDi.targetElement.bpmnElement !== getBusinessObject(newTarget)) {
|
||||
connectionDi.targetElement = newTarget && newTargetDi;
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -405,6 +410,11 @@ BpmnUpdater.prototype.updateDiParent = function(di, parentDi) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Cover the case where di.$parent === undefined and parentDi === null
|
||||
if (!parentDi && !di.$parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
var planeElements = (parentDi || di.$parent).get('planeElement');
|
||||
|
||||
if (parentDi) {
|
||||
|
@ -614,69 +624,72 @@ BpmnUpdater.prototype.updateSemanticParent = function(businessObject, newParent,
|
|||
|
||||
|
||||
BpmnUpdater.prototype.updateConnectionWaypoints = function(connection) {
|
||||
connection.businessObject.di.set('waypoint', this._bpmnFactory.createDiWaypoints(connection.waypoints));
|
||||
var di = getDi(connection);
|
||||
|
||||
di.set('waypoint', this._bpmnFactory.createDiWaypoints(connection.waypoints));
|
||||
};
|
||||
|
||||
|
||||
BpmnUpdater.prototype.updateConnection = function(context) {
|
||||
|
||||
var connection = context.connection,
|
||||
businessObject = getBusinessObject(connection),
|
||||
newSource = getBusinessObject(connection.source),
|
||||
newTarget = getBusinessObject(connection.target),
|
||||
newSource = connection.source,
|
||||
newSourceBo = getBusinessObject(newSource),
|
||||
newTarget = connection.target,
|
||||
newTargetBo = getBusinessObject(connection.target),
|
||||
visualParent;
|
||||
|
||||
if (!is(businessObject, 'bpmn:DataAssociation')) {
|
||||
|
||||
var inverseSet = is(businessObject, 'bpmn:SequenceFlow');
|
||||
|
||||
if (businessObject.sourceRef !== newSource) {
|
||||
if (businessObject.sourceRef !== newSourceBo) {
|
||||
if (inverseSet) {
|
||||
collectionRemove(businessObject.sourceRef && businessObject.sourceRef.get('outgoing'), businessObject);
|
||||
|
||||
if (newSource && newSource.get('outgoing')) {
|
||||
newSource.get('outgoing').push(businessObject);
|
||||
if (newSourceBo && newSourceBo.get('outgoing')) {
|
||||
newSourceBo.get('outgoing').push(businessObject);
|
||||
}
|
||||
}
|
||||
|
||||
businessObject.sourceRef = newSource;
|
||||
businessObject.sourceRef = newSourceBo;
|
||||
}
|
||||
|
||||
if (businessObject.targetRef !== newTarget) {
|
||||
if (businessObject.targetRef !== newTargetBo) {
|
||||
if (inverseSet) {
|
||||
collectionRemove(businessObject.targetRef && businessObject.targetRef.get('incoming'), businessObject);
|
||||
|
||||
if (newTarget && newTarget.get('incoming')) {
|
||||
newTarget.get('incoming').push(businessObject);
|
||||
if (newTargetBo && newTargetBo.get('incoming')) {
|
||||
newTargetBo.get('incoming').push(businessObject);
|
||||
}
|
||||
}
|
||||
|
||||
businessObject.targetRef = newTarget;
|
||||
businessObject.targetRef = newTargetBo;
|
||||
}
|
||||
} else
|
||||
|
||||
if (is(businessObject, 'bpmn:DataInputAssociation')) {
|
||||
|
||||
// handle obnoxious isMsome sourceRef
|
||||
businessObject.get('sourceRef')[0] = newSource;
|
||||
businessObject.get('sourceRef')[0] = newSourceBo;
|
||||
|
||||
visualParent = context.parent || context.newParent || newTarget;
|
||||
visualParent = context.parent || context.newParent || newTargetBo;
|
||||
|
||||
this.updateSemanticParent(businessObject, newTarget, visualParent);
|
||||
this.updateSemanticParent(businessObject, newTargetBo, visualParent);
|
||||
} else
|
||||
|
||||
if (is(businessObject, 'bpmn:DataOutputAssociation')) {
|
||||
visualParent = context.parent || context.newParent || newSource;
|
||||
visualParent = context.parent || context.newParent || newSourceBo;
|
||||
|
||||
this.updateSemanticParent(businessObject, newSource, visualParent);
|
||||
this.updateSemanticParent(businessObject, newSourceBo, visualParent);
|
||||
|
||||
// targetRef = new target
|
||||
businessObject.targetRef = newTarget;
|
||||
businessObject.targetRef = newTargetBo;
|
||||
}
|
||||
|
||||
this.updateConnectionWaypoints(connection);
|
||||
|
||||
this.updateDiConnection(businessObject.di, newSource, newTarget);
|
||||
this.updateDiConnection(connection, newSource, newTarget);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -46,7 +46,8 @@ ElementFactory.prototype.create = function(elementType, attrs) {
|
|||
// we assume their businessObjects have already been created
|
||||
// and wired via attrs
|
||||
if (elementType === 'label') {
|
||||
return this.baseCreate(elementType, assign({ type: 'label' }, DEFAULT_LABEL_SIZE, attrs));
|
||||
var di = attrs.di || this._bpmnFactory.createDiLabel();
|
||||
return this.baseCreate(elementType, assign({ type: 'label', di: di }, DEFAULT_LABEL_SIZE, attrs));
|
||||
}
|
||||
|
||||
return this.createBpmnElement(elementType, attrs);
|
||||
|
@ -58,7 +59,8 @@ ElementFactory.prototype.createBpmnElement = function(elementType, attrs) {
|
|||
|
||||
attrs = attrs || {};
|
||||
|
||||
var businessObject = attrs.businessObject;
|
||||
var businessObject = attrs.businessObject,
|
||||
di = attrs.di;
|
||||
|
||||
if (!businessObject) {
|
||||
if (!attrs.type) {
|
||||
|
@ -68,18 +70,18 @@ ElementFactory.prototype.createBpmnElement = function(elementType, attrs) {
|
|||
businessObject = this._bpmnFactory.create(attrs.type);
|
||||
}
|
||||
|
||||
if (!businessObject.di) {
|
||||
if (!di) {
|
||||
if (elementType === 'root') {
|
||||
businessObject.di = this._bpmnFactory.createDiPlane(businessObject, [], {
|
||||
di = this._bpmnFactory.createDiPlane(businessObject, [], {
|
||||
id: businessObject.id + '_di'
|
||||
});
|
||||
} else
|
||||
if (elementType === 'connection') {
|
||||
businessObject.di = this._bpmnFactory.createDiEdge(businessObject, [], {
|
||||
di = this._bpmnFactory.createDiEdge(businessObject, [], {
|
||||
id: businessObject.id + '_di'
|
||||
});
|
||||
} else {
|
||||
businessObject.di = this._bpmnFactory.createDiShape(businessObject, {}, {
|
||||
di = this._bpmnFactory.createDiShape(businessObject, {}, {
|
||||
id: businessObject.id + '_di'
|
||||
});
|
||||
}
|
||||
|
@ -91,12 +93,6 @@ ElementFactory.prototype.createBpmnElement = function(elementType, attrs) {
|
|||
}, attrs);
|
||||
}
|
||||
|
||||
if (attrs.di) {
|
||||
assign(businessObject.di, attrs.di);
|
||||
|
||||
delete attrs.di;
|
||||
}
|
||||
|
||||
applyAttributes(businessObject, attrs, [
|
||||
'processRef',
|
||||
'isInterrupting',
|
||||
|
@ -105,11 +101,11 @@ ElementFactory.prototype.createBpmnElement = function(elementType, attrs) {
|
|||
]);
|
||||
|
||||
if (attrs.isExpanded) {
|
||||
applyAttribute(businessObject.di, attrs, 'isExpanded');
|
||||
applyAttribute(di, attrs, 'isExpanded');
|
||||
}
|
||||
|
||||
if (is(businessObject, 'bpmn:ExclusiveGateway')) {
|
||||
businessObject.di.isMarkerVisible = true;
|
||||
di.isMarkerVisible = true;
|
||||
}
|
||||
|
||||
var eventDefinitions,
|
||||
|
@ -135,6 +131,7 @@ ElementFactory.prototype.createBpmnElement = function(elementType, attrs) {
|
|||
|
||||
attrs = assign({
|
||||
businessObject: businessObject,
|
||||
di: di,
|
||||
id: businessObject.id
|
||||
}, size, attrs);
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
|
|||
|
||||
import {
|
||||
getBusinessObject,
|
||||
getDi,
|
||||
is
|
||||
} from '../../../util/ModelUtil';
|
||||
|
||||
|
@ -45,8 +46,9 @@ export default function DataStoreBehavior(
|
|||
|
||||
commandStack.execute('dataStore.updateContainment', {
|
||||
dataStoreBo: dataStoreBo,
|
||||
dataStoreDi: getDi(dataStore),
|
||||
newSemanticParent: newDataStoreParentBo.processRef || newDataStoreParentBo,
|
||||
newDiParent: newDataStoreParentBo.di
|
||||
newDiParent: getDi(newDataStoreParent)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,8 @@ import inherits from 'inherits';
|
|||
import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
|
||||
|
||||
import {
|
||||
getBusinessObject
|
||||
getBusinessObject,
|
||||
getDi
|
||||
} from '../../../util/ModelUtil';
|
||||
|
||||
import {
|
||||
|
@ -26,12 +27,14 @@ export default function IsHorizontalFix(eventBus) {
|
|||
];
|
||||
|
||||
this.executed([ 'shape.move', 'shape.create', 'shape.resize' ], function(event) {
|
||||
var bo = getBusinessObject(event.context.shape);
|
||||
var shape = event.context.shape,
|
||||
bo = getBusinessObject(shape),
|
||||
di = getDi(shape);
|
||||
|
||||
if (isAny(bo, elementTypesToUpdate) && !bo.di.get('isHorizontal')) {
|
||||
if (isAny(bo, elementTypesToUpdate) && !di.get('isHorizontal')) {
|
||||
|
||||
// set attribute directly to avoid modeling#updateProperty side effects
|
||||
bo.di.set('isHorizontal', true);
|
||||
di.set('isHorizontal', true);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -6,7 +6,8 @@ import inherits from 'inherits';
|
|||
|
||||
import {
|
||||
is,
|
||||
getBusinessObject
|
||||
getBusinessObject,
|
||||
getDi
|
||||
} from '../../../util/ModelUtil';
|
||||
|
||||
import {
|
||||
|
@ -153,27 +154,27 @@ export default function LabelBehavior(
|
|||
|
||||
var context = event.context,
|
||||
element = context.shape,
|
||||
businessObject,
|
||||
labelTarget = context.labelTarget,
|
||||
di;
|
||||
|
||||
// we want to trigger on real labels only
|
||||
if (!element.labelTarget) {
|
||||
if (!labelTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
// we want to trigger on BPMN elements only
|
||||
if (!is(element.labelTarget || element, 'bpmn:BaseElement')) {
|
||||
if (!is(labelTarget, 'bpmn:BaseElement')) {
|
||||
return;
|
||||
}
|
||||
|
||||
businessObject = element.businessObject,
|
||||
di = businessObject.di;
|
||||
|
||||
di = getDi(labelTarget);
|
||||
|
||||
if (!di.label) {
|
||||
di.label = bpmnFactory.create('bpmndi:BPMNLabel', {
|
||||
bounds: bpmnFactory.create('dc:Bounds')
|
||||
});
|
||||
|
||||
element.di = di;
|
||||
}
|
||||
|
||||
assign(di.label.bounds, {
|
||||
|
|
|
@ -3,7 +3,7 @@ import inherits from 'inherits';
|
|||
import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
|
||||
|
||||
import {
|
||||
getBusinessObject,
|
||||
getDi,
|
||||
is
|
||||
} from '../../../util/ModelUtil';
|
||||
|
||||
|
@ -85,11 +85,11 @@ export default function ToggleElementCollapseBehaviour(
|
|||
hideEmptyLabels(shape.children);
|
||||
|
||||
// remove collapsed marker
|
||||
getBusinessObject(shape).di.isExpanded = true;
|
||||
getDi(shape).isExpanded = true;
|
||||
} else {
|
||||
|
||||
// place collapsed marker
|
||||
getBusinessObject(shape).di.isExpanded = false;
|
||||
getDi(shape).isExpanded = false;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -101,10 +101,10 @@ export default function ToggleElementCollapseBehaviour(
|
|||
|
||||
// revert removing/placing collapsed marker
|
||||
if (!shape.collapsed) {
|
||||
getBusinessObject(shape).di.isExpanded = true;
|
||||
getDi(shape).isExpanded = true;
|
||||
|
||||
} else {
|
||||
getBusinessObject(shape).di.isExpanded = false;
|
||||
getDi(shape).isExpanded = false;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@ import {
|
|||
remove as collectionRemove
|
||||
} from 'diagram-js/lib/util/Collections';
|
||||
|
||||
import { getDi } from '../../../util/ModelUtil';
|
||||
|
||||
|
||||
export default function UpdateCanvasRootHandler(canvas, modeling) {
|
||||
this._canvas = canvas;
|
||||
|
@ -24,7 +26,7 @@ UpdateCanvasRootHandler.prototype.execute = function(context) {
|
|||
oldRoot = canvas.getRootElement(),
|
||||
oldRootBusinessObject = oldRoot.businessObject,
|
||||
bpmnDefinitions = oldRootBusinessObject.$parent,
|
||||
diPlane = oldRootBusinessObject.di;
|
||||
diPlane = getDi(oldRoot);
|
||||
|
||||
// (1) replace process old <> new root
|
||||
canvas.setRootElement(newRoot, true);
|
||||
|
@ -37,10 +39,10 @@ UpdateCanvasRootHandler.prototype.execute = function(context) {
|
|||
oldRootBusinessObject.$parent = null;
|
||||
|
||||
// (3) wire di
|
||||
oldRootBusinessObject.di = null;
|
||||
oldRoot.di = null;
|
||||
|
||||
diPlane.bpmnElement = newRootBusinessObject;
|
||||
newRootBusinessObject.di = diPlane;
|
||||
newRoot.di = diPlane;
|
||||
|
||||
context.oldRoot = oldRoot;
|
||||
|
||||
|
@ -58,7 +60,7 @@ UpdateCanvasRootHandler.prototype.revert = function(context) {
|
|||
oldRoot = context.oldRoot,
|
||||
oldRootBusinessObject = oldRoot.businessObject,
|
||||
bpmnDefinitions = newRootBusinessObject.$parent,
|
||||
diPlane = newRootBusinessObject.di;
|
||||
diPlane = getDi(newRoot);
|
||||
|
||||
// (1) replace process old <> new root
|
||||
canvas.setRootElement(oldRoot, true);
|
||||
|
@ -71,10 +73,10 @@ UpdateCanvasRootHandler.prototype.revert = function(context) {
|
|||
oldRootBusinessObject.$parent = bpmnDefinitions;
|
||||
|
||||
// (3) wire di
|
||||
newRootBusinessObject.di = null;
|
||||
newRoot.di = null;
|
||||
|
||||
diPlane.bpmnElement = oldRootBusinessObject;
|
||||
oldRootBusinessObject.di = diPlane;
|
||||
oldRoot.di = diPlane;
|
||||
|
||||
// TODO(nikku): return changed elements?
|
||||
// return [ newRoot, oldRoot ];
|
||||
|
|
|
@ -6,7 +6,8 @@ import {
|
|||
} from 'min-dash';
|
||||
|
||||
import {
|
||||
getBusinessObject
|
||||
getBusinessObject,
|
||||
getDi
|
||||
} from '../../../util/ModelUtil';
|
||||
|
||||
var DEFAULT_FLOW = 'default',
|
||||
|
@ -74,7 +75,7 @@ UpdatePropertiesHandler.prototype.execute = function(context) {
|
|||
|
||||
var businessObject = element.businessObject,
|
||||
properties = unwrapBusinessObjects(context.properties),
|
||||
oldProperties = context.oldProperties || getProperties(businessObject, properties);
|
||||
oldProperties = context.oldProperties || getProperties(element, properties);
|
||||
|
||||
if (isIdChange(properties, businessObject)) {
|
||||
ids.unclaim(businessObject[ID]);
|
||||
|
@ -97,7 +98,7 @@ UpdatePropertiesHandler.prototype.execute = function(context) {
|
|||
}
|
||||
|
||||
// update properties
|
||||
setProperties(businessObject, properties);
|
||||
setProperties(element, properties);
|
||||
|
||||
// store old values
|
||||
context.oldProperties = oldProperties;
|
||||
|
@ -142,7 +143,7 @@ UpdatePropertiesHandler.prototype.revert = function(context) {
|
|||
ids = this._moddle.ids;
|
||||
|
||||
// update properties
|
||||
setProperties(businessObject, oldProperties);
|
||||
setProperties(element, oldProperties);
|
||||
|
||||
if (isIdChange(properties, businessObject)) {
|
||||
ids.unclaim(properties[ID]);
|
||||
|
@ -161,16 +162,19 @@ function isIdChange(properties, businessObject) {
|
|||
}
|
||||
|
||||
|
||||
function getProperties(businessObject, properties) {
|
||||
var propertyNames = keys(properties);
|
||||
function getProperties(element, properties) {
|
||||
var propertyNames = keys(properties),
|
||||
businessObject = element.businessObject,
|
||||
di = getDi(element);
|
||||
|
||||
return reduce(propertyNames, function(result, key) {
|
||||
|
||||
// handle DI separately
|
||||
if (key !== DI) {
|
||||
result[key] = businessObject.get(key);
|
||||
|
||||
} else {
|
||||
result[key] = getDiProperties(businessObject.di, keys(properties.di));
|
||||
result[key] = getDiProperties(di, keys(properties.di));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -180,23 +184,26 @@ function getProperties(businessObject, properties) {
|
|||
|
||||
function getDiProperties(di, propertyNames) {
|
||||
return reduce(propertyNames, function(result, key) {
|
||||
result[key] = di.get(key);
|
||||
result[key] = di && di.get(key);
|
||||
|
||||
return result;
|
||||
}, {});
|
||||
}
|
||||
|
||||
|
||||
function setProperties(businessObject, properties) {
|
||||
function setProperties(element, properties) {
|
||||
var businessObject = element.businessObject,
|
||||
di = getDi(element);
|
||||
|
||||
forEach(properties, function(value, key) {
|
||||
|
||||
if (key !== DI) {
|
||||
businessObject.set(key, value);
|
||||
} else {
|
||||
|
||||
// only update, if businessObject.di exists
|
||||
if (businessObject.di) {
|
||||
setDiProperties(businessObject.di, value);
|
||||
// only update, if di exists
|
||||
if (di) {
|
||||
setDiProperties(di, value);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -7,21 +7,23 @@ UpdateSemanticParentHandler.$inject = [ 'bpmnUpdater' ];
|
|||
|
||||
UpdateSemanticParentHandler.prototype.execute = function(context) {
|
||||
var dataStoreBo = context.dataStoreBo,
|
||||
dataStoreDi = context.dataStoreDi,
|
||||
newSemanticParent = context.newSemanticParent,
|
||||
newDiParent = context.newDiParent;
|
||||
|
||||
context.oldSemanticParent = dataStoreBo.$parent;
|
||||
context.oldDiParent = dataStoreBo.di.$parent;
|
||||
context.oldDiParent = dataStoreDi.$parent;
|
||||
|
||||
// update semantic parent
|
||||
this._bpmnUpdater.updateSemanticParent(dataStoreBo, newSemanticParent);
|
||||
|
||||
// update DI parent
|
||||
this._bpmnUpdater.updateDiParent(dataStoreBo.di, newDiParent);
|
||||
this._bpmnUpdater.updateDiParent(dataStoreDi, newDiParent);
|
||||
};
|
||||
|
||||
UpdateSemanticParentHandler.prototype.revert = function(context) {
|
||||
var dataStoreBo = context.dataStoreBo,
|
||||
dataStoreDi = context.dataStoreDi,
|
||||
oldSemanticParent = context.oldSemanticParent,
|
||||
oldDiParent = context.oldDiParent;
|
||||
|
||||
|
@ -29,6 +31,6 @@ UpdateSemanticParentHandler.prototype.revert = function(context) {
|
|||
this._bpmnUpdater.updateSemanticParent(dataStoreBo, oldSemanticParent);
|
||||
|
||||
// update DI parent
|
||||
this._bpmnUpdater.updateDiParent(dataStoreBo.di, oldDiParent);
|
||||
this._bpmnUpdater.updateDiParent(dataStoreDi, oldDiParent);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import {
|
||||
assign
|
||||
} from 'min-dash';
|
||||
import { getDi } from '../../util/ModelUtil';
|
||||
|
||||
|
||||
/**
|
||||
|
@ -52,7 +53,8 @@ PaletteProvider.prototype.getPaletteEntries = function(element) {
|
|||
var shape = elementFactory.createShape(assign({ type: type }, options));
|
||||
|
||||
if (options) {
|
||||
shape.businessObject.di.isExpanded = options.isExpanded;
|
||||
var di = getDi(shape);
|
||||
di.isExpanded = options.isExpanded;
|
||||
}
|
||||
|
||||
create.start(event, shape);
|
||||
|
|
|
@ -99,7 +99,7 @@ ReplaceMenuProvider.prototype.getEntries = function(element) {
|
|||
if (is(businessObject, 'bpmn:Participant')) {
|
||||
|
||||
entries = filter(replaceOptions.PARTICIPANT, function(entry) {
|
||||
return isExpanded(businessObject) !== entry.target.isExpanded;
|
||||
return isExpanded(element) !== entry.target.isExpanded;
|
||||
});
|
||||
|
||||
return this._createEntries(element, entries);
|
||||
|
@ -195,7 +195,7 @@ ReplaceMenuProvider.prototype.getEntries = function(element) {
|
|||
}
|
||||
|
||||
// expanded event sub processes
|
||||
if (isEventSubProcess(businessObject) && isExpanded(businessObject)) {
|
||||
if (isEventSubProcess(businessObject) && isExpanded(element)) {
|
||||
|
||||
entries = filter(replaceOptions.EVENT_SUB_PROCESS, differentType);
|
||||
|
||||
|
@ -203,7 +203,7 @@ ReplaceMenuProvider.prototype.getEntries = function(element) {
|
|||
}
|
||||
|
||||
// expanded sub processes
|
||||
if (is(businessObject, 'bpmn:SubProcess') && isExpanded(businessObject)) {
|
||||
if (is(businessObject, 'bpmn:SubProcess') && isExpanded(element)) {
|
||||
|
||||
entries = filter(replaceOptions.SUBPROCESS_EXPANDED, differentType);
|
||||
|
||||
|
@ -211,7 +211,7 @@ ReplaceMenuProvider.prototype.getEntries = function(element) {
|
|||
}
|
||||
|
||||
// collapsed ad hoc sub processes
|
||||
if (is(businessObject, 'bpmn:AdHocSubProcess') && !isExpanded(businessObject)) {
|
||||
if (is(businessObject, 'bpmn:AdHocSubProcess') && !isExpanded(element)) {
|
||||
|
||||
entries = filter(replaceOptions.TASK, function(entry) {
|
||||
|
||||
|
@ -237,7 +237,7 @@ ReplaceMenuProvider.prototype.getEntries = function(element) {
|
|||
entries = filter(replaceOptions.TASK, differentType);
|
||||
|
||||
// collapsed SubProcess can not be replaced with itself
|
||||
if (is(businessObject, 'bpmn:SubProcess') && !isExpanded(businessObject)) {
|
||||
if (is(businessObject, 'bpmn:SubProcess') && !isExpanded(element)) {
|
||||
entries = filter(entries, function(entry) {
|
||||
return entry.label !== 'Sub Process (collapsed)';
|
||||
});
|
||||
|
|
|
@ -36,7 +36,7 @@ export function isDifferentType(element) {
|
|||
|
||||
var isExpandedEqual = (
|
||||
target.isExpanded === undefined ||
|
||||
target.isExpanded === isExpanded(businessObject)
|
||||
target.isExpanded === isExpanded(element)
|
||||
);
|
||||
|
||||
return !isTypeEqual || !isEventDefinitionEqual || !isTriggeredByEventEqual || !isExpandedEqual;
|
||||
|
|
|
@ -2,15 +2,13 @@ import {
|
|||
pick,
|
||||
assign,
|
||||
filter,
|
||||
forEach,
|
||||
isArray,
|
||||
isUndefined,
|
||||
has
|
||||
} from 'min-dash';
|
||||
|
||||
import {
|
||||
is,
|
||||
getBusinessObject
|
||||
getBusinessObject,
|
||||
getDi
|
||||
} from '../../util/ModelUtil';
|
||||
|
||||
import {
|
||||
|
@ -24,17 +22,6 @@ import {
|
|||
|
||||
import { getPropertyNames } from '../copy-paste/ModdleCopy';
|
||||
|
||||
function copyProperties(source, target, properties) {
|
||||
if (!isArray(properties)) {
|
||||
properties = [ properties ];
|
||||
}
|
||||
|
||||
forEach(properties, function(property) {
|
||||
if (!isUndefined(source[property])) {
|
||||
target[property] = source[property];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var CUSTOM_PROPERTIES = [
|
||||
'cancelActivity',
|
||||
|
@ -121,7 +108,8 @@ export default function BpmnReplace(
|
|||
|
||||
var newElement = {
|
||||
type: type,
|
||||
businessObject: newBusinessObject
|
||||
businessObject: newBusinessObject,
|
||||
di: getDi(element)
|
||||
};
|
||||
|
||||
var elementProps = getPropertyNames(oldBusinessObject.$descriptor),
|
||||
|
@ -183,7 +171,7 @@ export default function BpmnReplace(
|
|||
if (isSubProcess(oldBusinessObject)) {
|
||||
|
||||
// no toggeling, so keep old state
|
||||
newElement.isExpanded = isExpanded(oldBusinessObject);
|
||||
newElement.isExpanded = isExpanded(element);
|
||||
}
|
||||
|
||||
// else if property is explicitly set, use it
|
||||
|
@ -194,7 +182,7 @@ export default function BpmnReplace(
|
|||
// TODO: need also to respect min/max Size
|
||||
// copy size, from an expanded subprocess to an expanded alternative subprocess
|
||||
// except bpmn:Task, because Task is always expanded
|
||||
if ((isExpanded(oldBusinessObject) && !is(oldBusinessObject, 'bpmn:Task')) && newElement.isExpanded) {
|
||||
if ((isExpanded(element) && !is(oldBusinessObject, 'bpmn:Task')) && newElement.isExpanded) {
|
||||
newElement.width = element.width;
|
||||
newElement.height = element.height;
|
||||
}
|
||||
|
@ -262,16 +250,6 @@ export default function BpmnReplace(
|
|||
newElement.x = element.x + (element.width - newElement.width) / 2;
|
||||
}
|
||||
|
||||
newElement.di = {};
|
||||
|
||||
// colors will be set to DI
|
||||
copyProperties(oldBusinessObject.di, newElement.di, [
|
||||
'fill',
|
||||
'stroke',
|
||||
'background-color',
|
||||
'border-color',
|
||||
'color'
|
||||
]);
|
||||
|
||||
newElement = replace.replaceElement(element, newElement, hints);
|
||||
|
||||
|
|
Loading…
Reference in New Issue