UpdateCanvasRootHandler.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import {
  2. add as collectionAdd,
  3. remove as collectionRemove
  4. } from 'diagram-js/lib/util/Collections';
  5. import { getDi } from '../../../util/ModelUtil';
  6. /**
  7. * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler
  8. *
  9. * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas
  10. * @typedef {import('../Modeling').default} Modeling
  11. */
  12. /**
  13. * @implements {CommandHandler}
  14. *
  15. * @param {Canvas} canvas
  16. * @param {Modeling} modeling
  17. */
  18. export default function UpdateCanvasRootHandler(canvas, modeling) {
  19. this._canvas = canvas;
  20. this._modeling = modeling;
  21. }
  22. UpdateCanvasRootHandler.$inject = [
  23. 'canvas',
  24. 'modeling'
  25. ];
  26. UpdateCanvasRootHandler.prototype.execute = function(context) {
  27. var canvas = this._canvas;
  28. var newRoot = context.newRoot,
  29. newRootBusinessObject = newRoot.businessObject,
  30. oldRoot = canvas.getRootElement(),
  31. oldRootBusinessObject = oldRoot.businessObject,
  32. bpmnDefinitions = oldRootBusinessObject.$parent,
  33. diPlane = getDi(oldRoot);
  34. // (1) replace process old <> new root
  35. canvas.setRootElement(newRoot);
  36. canvas.removeRootElement(oldRoot);
  37. // (2) update root elements
  38. collectionAdd(bpmnDefinitions.rootElements, newRootBusinessObject);
  39. newRootBusinessObject.$parent = bpmnDefinitions;
  40. collectionRemove(bpmnDefinitions.rootElements, oldRootBusinessObject);
  41. oldRootBusinessObject.$parent = null;
  42. // (3) wire di
  43. oldRoot.di = null;
  44. diPlane.bpmnElement = newRootBusinessObject;
  45. newRoot.di = diPlane;
  46. context.oldRoot = oldRoot;
  47. // TODO(nikku): return changed elements?
  48. // return [ newRoot, oldRoot ];
  49. return [];
  50. };
  51. UpdateCanvasRootHandler.prototype.revert = function(context) {
  52. var canvas = this._canvas;
  53. var newRoot = context.newRoot,
  54. newRootBusinessObject = newRoot.businessObject,
  55. oldRoot = context.oldRoot,
  56. oldRootBusinessObject = oldRoot.businessObject,
  57. bpmnDefinitions = newRootBusinessObject.$parent,
  58. diPlane = getDi(newRoot);
  59. // (1) replace process old <> new root
  60. canvas.setRootElement(oldRoot);
  61. canvas.removeRootElement(newRoot);
  62. // (2) update root elements
  63. collectionRemove(bpmnDefinitions.rootElements, newRootBusinessObject);
  64. newRootBusinessObject.$parent = null;
  65. collectionAdd(bpmnDefinitions.rootElements, oldRootBusinessObject);
  66. oldRootBusinessObject.$parent = bpmnDefinitions;
  67. // (3) wire di
  68. newRoot.di = null;
  69. diPlane.bpmnElement = oldRootBusinessObject;
  70. oldRoot.di = diPlane;
  71. // TODO(nikku): return changed elements?
  72. // return [ newRoot, oldRoot ];
  73. return [];
  74. };