Skip to content

Commit

Permalink
chore(modeling): rework plane renaming API
Browse files Browse the repository at this point in the history
  • Loading branch information
marstamm committed Dec 1, 2021
1 parent 228ffa5 commit d540679
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 43 deletions.
108 changes: 66 additions & 42 deletions lib/features/modeling/behavior/SubProcessPlaneBehavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,25 @@ export default function SubProcessPlaneBehavior(
// add plane elements for newly created sub-processes
// this ensures we can actually drill down into the element
this.executed('shape.create', function(context) {
var shape = context.shape;
var shape = context.shape,
plane = context.oldPlane,
rootElement = context.oldRootElement;

if (!isCollapsedSubProcess(shape)) {
return;
}

var businessObject = getBusinessObject(shape);

self._createNewDiagram(businessObject);
rootElement = self._addDiagram(rootElement || businessObject);

if (plane) {
canvas.setRootElementForPlane(rootElement, plane);
canvas.createPlane(plane);
}

else {
canvas.createPlane(businessObject.id, rootElement);
}
}, true);


Expand All @@ -61,29 +70,54 @@ export default function SubProcessPlaneBehavior(

self._removeDiagram(businessObject);

var plane = canvas.getPlane(businessObject.id);
context.oldRootElement = plane.rootElement;
canvas.setRootElementForPlane(null, plane, true);
context.oldPlane = canvas.removePlane(plane);

}, true);



this.executed('element.updateProperties', function(context) {
var shape = context.element;

if (!isCollapsedSubProcess(shape)) {
return;
}

var properties = context.properties;
var oldProperties = context.oldProperties;

var oldId = oldProperties.id,
newId = properties.id;

self._renamePlane(oldId, newId);
if (oldId === newId) {
return;
}

canvas.renamePlane(oldId, newId);
}, true);


this.reverted('element.updateProperties', function(context) {
var shape = context.element;
var properties = context.properties;
var oldProperties = context.oldProperties;

var oldId = oldProperties.id,
newId = properties.id;

self._renamePlane(newId, oldId);

if (!isCollapsedSubProcess(shape)) {
return;
}

if (oldId === newId) {
return;
}

canvas.renamePlane(newId, oldId);
}, true);

}
Expand All @@ -92,40 +126,52 @@ inherits(SubProcessPlaneBehavior, CommandInterceptor);


/**
* Creates a new plane element for the given sub process and
* adds it to the canvas.
* Adds a given diagram to the definitions and returns a .
*
* @param {Object} rootElement
* @param {Object} planeElement
*/
SubProcessPlaneBehavior.prototype._createNewDiagram = function(rootElement) {
var canvas = this._canvas;
var bpmnFactory = this._bpmnFactory;
var elementFactory = this._elementFactory;
SubProcessPlaneBehavior.prototype._addDiagram = function(planeElement) {
var bpmnjs = this._bpmnjs;

var diagrams = bpmnjs.getDefinitions().diagrams;

if (!planeElement.businessObject) {
planeElement = this._createNewDiagram(planeElement);
}

diagrams.push(planeElement.di.$parent);

return planeElement;
};

/**
* Creates a new plane element for the given sub process.
*
* @param {Object} bpmnElement
*
* @return {Object} new diagram element
*/
SubProcessPlaneBehavior.prototype._createNewDiagram = function(bpmnElement) {
var bpmnFactory = this._bpmnFactory;
var elementFactory = this._elementFactory;

var diPlane = bpmnFactory.create('bpmndi:BPMNPlane', {
bpmnElement: rootElement
bpmnElement: bpmnElement
});
var diDiagram = bpmnFactory.create('bpmndi:BPMNDiagram', {
plane: diPlane
});
diPlane.$parent = diDiagram;
diagrams.push(diDiagram);

// add a virtual element (not being drawn),
// a copy cat of our BpmnImporter code
var planeElement = elementFactory.createRoot({
id: rootElement.id + '_plane',
type: rootElement.$type,
id: bpmnElement.id + '_plane',
type: bpmnElement.$type,
di: diPlane,
businessObject: rootElement,
businessObject: bpmnElement,
collapsed: true
});

canvas.createPlane(rootElement.id, planeElement);

return planeElement;
};

Expand All @@ -136,7 +182,6 @@ SubProcessPlaneBehavior.prototype._createNewDiagram = function(rootElement) {
* @returns {Object} removed bpmndi:BPMNDiagram
*/
SubProcessPlaneBehavior.prototype._removeDiagram = function(rootElement) {
var canvas = this._canvas;
var bpmnjs = this._bpmnjs;

var diagrams = bpmnjs.getDefinitions().diagrams;
Expand All @@ -147,30 +192,9 @@ SubProcessPlaneBehavior.prototype._removeDiagram = function(rootElement) {

diagrams.splice(diagrams.indexOf(removedDiagram), 1);

canvas.removePlane(rootElement.id);

return removedDiagram;
};

/**
* Renames a canvas plane.
*
* @param {String} oldId
* @param {String} newId
*/
SubProcessPlaneBehavior.prototype._renamePlane = function(oldId, newId) {
var canvas = this._canvas;

if (!oldId || !canvas.getPlane(oldId)) {
return;
}

var oldPlane = canvas.getPlane(oldId),
oldRoot = oldPlane.rootElement;

canvas.removePlane(oldPlane);
canvas.createPlane(newId, oldRoot);
};

SubProcessPlaneBehavior.$inject = [
'canvas',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import coreModule from 'lib/core';
import modelingModule from 'lib/features/modeling';
import replaceModule from 'lib/features/replace';

describe('features/modeling/behavior - subprocess planes', function() {
describe.only('features/modeling/behavior - subprocess planes', function() {

var diagramXML = require('./SubProcessBehavior.planes.bpmn');

Expand Down Expand Up @@ -85,6 +85,7 @@ describe('features/modeling/behavior - subprocess planes', function() {
isExpanded: false
});
modeling.createShape(subProcess, { x: 300, y: 300 }, canvas.getRootElement());
var plane = canvas.getPlane(subProcess.id);

// when
commandStack.undo();
Expand All @@ -94,6 +95,7 @@ describe('features/modeling/behavior - subprocess planes', function() {
var diagrams = bpmnjs.getDefinitions().diagrams;
expect(diagrams.length).to.equal(2);
expect(canvas.getPlane(subProcess.id)).to.exist;
expect(canvas.getPlane(subProcess.id)).to.equal(plane);
}));

});
Expand Down

0 comments on commit d540679

Please sign in to comment.