@eclipse-glsp/server 2.8.0-next.7 → 2.8.0-next.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,8 +14,9 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { GModelRoot } from '@eclipse-glsp/graph';
17
- import { Action, ComputedBoundsAction, MaybePromise } from '@eclipse-glsp/protocol';
17
+ import { Action, ComputedBoundsAction, ElementAndAlignment, ElementAndBounds, ElementAndRoutingPoints, MaybePromise } from '@eclipse-glsp/protocol';
18
18
  import { ActionHandler } from '../../actions/action-handler';
19
+ import { Logger } from '../../utils/logger';
19
20
  import { ModelState } from '../model/model-state';
20
21
  import { ModelSubmissionHandler } from '../model/model-submission-handler';
21
22
  /**
@@ -26,9 +27,23 @@ import { ModelSubmissionHandler } from '../model/model-submission-handler';
26
27
  export declare class ComputedBoundsActionHandler implements ActionHandler {
27
28
  protected submissionHandler: ModelSubmissionHandler;
28
29
  protected modelState: ModelState;
30
+ protected logger: Logger;
29
31
  actionKinds: string[];
30
32
  execute(action: ComputedBoundsAction): MaybePromise<Action[]>;
33
+ /**
34
+ * Applies everything the client computed for the given model.
35
+ *
36
+ * An entry that cannot be applied is skipped and logged rather than treated as an error.
37
+ */
31
38
  protected applyBounds(root: GModelRoot, action: ComputedBoundsAction): void;
39
+ protected applyElementBounds(allBounds: ElementAndBounds[]): void;
40
+ protected applyAlignments(alignments: ElementAndAlignment[]): void;
41
+ /**
42
+ * Applies the computed routes.
43
+ *
44
+ * A skipped route is logged at debug level, an edge the client has not finished routing yet is expected.
45
+ */
46
+ protected applyRoutes(routes: ElementAndRoutingPoints[]): void;
32
47
  priority?: number | undefined;
33
48
  }
34
49
  //# sourceMappingURL=computed-bounds-action-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"computed-bounds-action-handler.d.ts","sourceRoot":"","sources":["../../../../src/common/features/layout/computed-bounds-action-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAErG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E;;;;GAIG;AACH,qBACa,2BAA4B,YAAW,aAAa;IAE7D,SAAS,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAGpD,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAEjC,WAAW,WAA+B;IAC1C,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAa7D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAO3E,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC"}
1
+ {"version":3,"file":"computed-bounds-action-handler.d.ts","sourceRoot":"","sources":["../../../../src/common/features/layout/computed-bounds-action-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACH,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EAEvB,YAAY,EACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E;;;;GAIG;AACH,qBACa,2BAA4B,YAAW,aAAa;IAE7D,SAAS,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAGpD,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAGjC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzB,WAAW,WAA+B;IAC1C,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAa7D;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAM3E,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,IAAI;IASjE,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,IAAI;IASlE;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAS9D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC"}
@@ -13,6 +13,7 @@ exports.ComputedBoundsActionHandler = void 0;
13
13
  const protocol_1 = require("@eclipse-glsp/protocol");
14
14
  const inversify_1 = require("inversify");
15
15
  const layout_util_1 = require("../../utils/layout-util");
16
+ const logger_1 = require("../../utils/logger");
16
17
  const model_state_1 = require("../model/model-state");
17
18
  const model_submission_handler_1 = require("../model/model-submission-handler");
18
19
  /**
@@ -32,11 +33,44 @@ let ComputedBoundsActionHandler = class ComputedBoundsActionHandler {
32
33
  }
33
34
  return [];
34
35
  }
36
+ /**
37
+ * Applies everything the client computed for the given model.
38
+ *
39
+ * An entry that cannot be applied is skipped and logged rather than treated as an error.
40
+ */
35
41
  applyBounds(root, action) {
42
+ this.applyElementBounds(action.bounds);
43
+ this.applyAlignments(action.alignments ?? []);
44
+ this.applyRoutes(action.routes ?? []);
45
+ }
46
+ applyElementBounds(allBounds) {
47
+ const index = this.modelState.index;
48
+ allBounds.forEach(bounds => {
49
+ if (!(0, layout_util_1.applyElementAndBounds)(bounds, index)) {
50
+ this.logger.warn(`Skipped computed bounds of element '${bounds.elementId}'`);
51
+ }
52
+ });
53
+ }
54
+ applyAlignments(alignments) {
36
55
  const index = this.modelState.index;
37
- action.bounds.forEach(bounds => (0, layout_util_1.applyElementAndBounds)(bounds, index));
38
- (action.alignments ?? []).forEach(alignment => (0, layout_util_1.applyAlignment)(alignment, index));
39
- (action.routes ?? []).forEach(route => (0, layout_util_1.applyRoute)(route, index));
56
+ alignments.forEach(alignment => {
57
+ if (!(0, layout_util_1.applyAlignment)(alignment, index)) {
58
+ this.logger.warn(`Skipped computed alignment of element '${alignment.elementId}'`);
59
+ }
60
+ });
61
+ }
62
+ /**
63
+ * Applies the computed routes.
64
+ *
65
+ * A skipped route is logged at debug level, an edge the client has not finished routing yet is expected.
66
+ */
67
+ applyRoutes(routes) {
68
+ const index = this.modelState.index;
69
+ routes.forEach(route => {
70
+ if (!(0, layout_util_1.applyRoute)(route, index)) {
71
+ this.logger.debug(`Skipped computed route of element '${route.elementId}'`);
72
+ }
73
+ });
40
74
  }
41
75
  };
42
76
  exports.ComputedBoundsActionHandler = ComputedBoundsActionHandler;
@@ -48,6 +82,10 @@ __decorate([
48
82
  (0, inversify_1.inject)(model_state_1.ModelState),
49
83
  __metadata("design:type", Object)
50
84
  ], ComputedBoundsActionHandler.prototype, "modelState", void 0);
85
+ __decorate([
86
+ (0, inversify_1.inject)(logger_1.Logger),
87
+ __metadata("design:type", logger_1.Logger)
88
+ ], ComputedBoundsActionHandler.prototype, "logger", void 0);
51
89
  exports.ComputedBoundsActionHandler = ComputedBoundsActionHandler = __decorate([
52
90
  (0, inversify_1.injectable)()
53
91
  ], ComputedBoundsActionHandler);
@@ -1 +1 @@
1
- {"version":3,"file":"computed-bounds-action-handler.js","sourceRoot":"","sources":["../../../../src/common/features/layout/computed-bounds-action-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAgBA,qDAAqG;AACrG,yCAA+C;AAE/C,yDAA4F;AAC5F,sDAAkD;AAClD,gFAA2E;AAE3E;;;;GAIG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAAjC;QAOH,gBAAW,GAAG,CAAC,+BAAoB,CAAC,IAAI,CAAC,CAAC;IAsB9C,CAAC;IArBG,OAAO,CAAC,MAA4B;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAC7C,SAAS,EACT,0BAAe,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAC/F,CAAC;QACN,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAES,WAAW,CAAC,IAAgB,EAAE,MAA4B;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,mCAAqB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,IAAA,4BAAc,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACjF,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,wBAAU,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;CAGJ,CAAA;AA7BY,kEAA2B;AAE1B;IADT,IAAA,kBAAM,EAAC,iDAAsB,CAAC;8BACF,iDAAsB;sEAAC;AAG1C;IADT,IAAA,kBAAM,EAAC,wBAAU,CAAC;;+DACc;sCALxB,2BAA2B;IADvC,IAAA,sBAAU,GAAE;GACA,2BAA2B,CA6BvC"}
1
+ {"version":3,"file":"computed-bounds-action-handler.js","sourceRoot":"","sources":["../../../../src/common/features/layout/computed-bounds-action-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAgBA,qDAQgC;AAChC,yCAA+C;AAE/C,yDAA4F;AAC5F,+CAA4C;AAC5C,sDAAkD;AAClD,gFAA2E;AAE3E;;;;GAIG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAAjC;QAUH,gBAAW,GAAG,CAAC,+BAAoB,CAAC,IAAI,CAAC,CAAC;IA0D9C,CAAC;IAzDG,OAAO,CAAC,MAA4B;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAC7C,SAAS,EACT,0BAAe,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAC/F,CAAC;QACN,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;;;OAIG;IACO,WAAW,CAAC,IAAgB,EAAE,MAA4B;QAChE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAES,kBAAkB,CAAC,SAA6B;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,IAAA,mCAAqB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;YACjF,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAES,eAAe,CAAC,UAAiC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3B,IAAI,CAAC,IAAA,4BAAc,EAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YACvF,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACO,WAAW,CAAC,MAAiC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,IAAA,wBAAU,EAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAChF,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CAGJ,CAAA;AApEY,kEAA2B;AAE1B;IADT,IAAA,kBAAM,EAAC,iDAAsB,CAAC;8BACF,iDAAsB;sEAAC;AAG1C;IADT,IAAA,kBAAM,EAAC,wBAAU,CAAC;;+DACc;AAGvB;IADT,IAAA,kBAAM,EAAC,eAAM,CAAC;8BACG,eAAM;2DAAC;sCARhB,2BAA2B;IADvC,IAAA,sBAAU,GAAE;GACA,2BAA2B,CAoEvC"}
@@ -21,7 +21,7 @@ import { GModelIndex } from '../features/model/gmodel-index';
21
21
  *
22
22
  * @param bounds The new bounds.
23
23
  * @param index The model index.
24
- * @returns The changed element.
24
+ * @returns The changed element, or `undefined` if the bounds could not be applied to any element.
25
25
  */
26
26
  export declare function applyElementAndBounds(bounds: ElementAndBounds, index: GModelIndex): GBoundsAware | undefined;
27
27
  /**
@@ -29,17 +29,17 @@ export declare function applyElementAndBounds(bounds: ElementAndBounds, index: G
29
29
  *
30
30
  * @param alignment The new alignment.
31
31
  * @param index The model index.
32
- * @returns The changed element.
32
+ * @returns The changed element, or `undefined` if the alignment could not be applied to any element.
33
33
  */
34
34
  export declare function applyAlignment(alignment: ElementAndAlignment, index: GModelIndex): GAlignable | undefined;
35
35
  /**
36
- * Applies the new route to the model.
36
+ * Applies the new route to the model. A route needs at least a source and a target point to describe an edge.
37
37
  *
38
38
  * @param route The new route.
39
39
  * @param index The model index.
40
- * @returns The changed element.
40
+ * @returns The changed edge, or `undefined` if the route could not be applied to any edge.
41
41
  */
42
- export declare function applyRoute(route: ElementAndRoutingPoints, index: GModelIndex): GEdge;
42
+ export declare function applyRoute(route: ElementAndRoutingPoints, index: GModelIndex): GEdge | undefined;
43
43
  /**
44
44
  * Returns the complete route of the given edge. The route, as opposed to the routing points, also contain the source
45
45
  * and target point.
@@ -1 +1 @@
1
- {"version":3,"file":"layout-util.d.ts","sourceRoot":"","sources":["../../../src/common/utils/layout-util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAU,aAAa,EAA4C,MAAM,qBAAqB,CAAC;AACvI,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAI7D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,CAU5G;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAOzG;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,CAoBpF;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,uBAAuB,CAc7D;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,CAIpG;AACD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,GAAG,KAAK,GAAG,SAAS,CAUxG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,GAAG,YAAY,GAAG,KAAK,CAoB1G"}
1
+ {"version":3,"file":"layout-util.d.ts","sourceRoot":"","sources":["../../../src/common/utils/layout-util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAU,aAAa,EAA4C,MAAM,qBAAqB,CAAC;AACvI,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAI7D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,CAU5G;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAOzG;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,GAAG,SAAS,CAqBhG;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,uBAAuB,CAc7D;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,CAIpG;AACD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,GAAG,KAAK,GAAG,SAAS,CAUxG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,GAAG,YAAY,GAAG,KAAK,CAoB1G"}
@@ -30,11 +30,11 @@ const glsp_server_error_1 = require("./glsp-server-error");
30
30
  *
31
31
  * @param bounds The new bounds.
32
32
  * @param index The model index.
33
- * @returns The changed element.
33
+ * @returns The changed element, or `undefined` if the bounds could not be applied to any element.
34
34
  */
35
35
  function applyElementAndBounds(bounds, index) {
36
- const element = (0, glsp_server_error_1.getOrThrow)(index.get(bounds.elementId), 'Model element not found! ID: ' + bounds.elementId);
37
- if ((0, graph_1.isGBoundsAware)(element)) {
36
+ const element = index.find(bounds.elementId);
37
+ if (element && (0, graph_1.isGBoundsAware)(element)) {
38
38
  if (bounds.newPosition !== undefined) {
39
39
  element.position = bounds.newPosition;
40
40
  }
@@ -48,30 +48,31 @@ function applyElementAndBounds(bounds, index) {
48
48
  *
49
49
  * @param alignment The new alignment.
50
50
  * @param index The model index.
51
- * @returns The changed element.
51
+ * @returns The changed element, or `undefined` if the alignment could not be applied to any element.
52
52
  */
53
53
  function applyAlignment(alignment, index) {
54
- const element = (0, glsp_server_error_1.getOrThrow)(index.get(alignment.elementId), 'Model element not found! ID: ' + alignment.elementId);
55
- if ((0, graph_1.isGAlignable)(element)) {
54
+ const element = index.find(alignment.elementId);
55
+ if (element && (0, graph_1.isGAlignable)(element)) {
56
56
  element.alignment = alignment.newAlignment;
57
57
  return element;
58
58
  }
59
59
  return undefined;
60
60
  }
61
61
  /**
62
- * Applies the new route to the model.
62
+ * Applies the new route to the model. A route needs at least a source and a target point to describe an edge.
63
63
  *
64
64
  * @param route The new route.
65
65
  * @param index The model index.
66
- * @returns The changed element.
66
+ * @returns The changed edge, or `undefined` if the route could not be applied to any edge.
67
67
  */
68
68
  function applyRoute(route, index) {
69
69
  const routingPoints = route.newRoutingPoints ?? [];
70
- if (routingPoints.length < 2) {
71
- throw new glsp_server_error_1.GLSPServerError('Invalid Route!');
70
+ const edge = index.findByClass(route.elementId, graph_1.GEdge);
71
+ if (!edge || routingPoints.length < 2) {
72
+ return undefined;
72
73
  }
73
74
  // first and last point mark the source and target point
74
- const edge = applyRoutingPoints(route, index);
75
+ edge.routingPoints = routingPoints;
75
76
  const edgeRoutingPoints = edge.routingPoints;
76
77
  const args = edge.args ?? {};
77
78
  const source = edgeRoutingPoints.shift();
@@ -1 +1 @@
1
- {"version":3,"file":"layout-util.js","sourceRoot":"","sources":["../../../src/common/utils/layout-util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout-util.js","sourceRoot":"","sources":["../../../src/common/utils/layout-util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-glsp/server",
3
- "version": "2.8.0-next.7",
3
+ "version": "2.8.0-next.9",
4
4
  "description": "A js server framework for Eclipse GLSP",
5
5
  "keywords": [
6
6
  "eclipse",
@@ -57,7 +57,7 @@
57
57
  "vscode-jsonrpc": "8.2.0",
58
58
  "winston": "^3.3.3",
59
59
  "ws": "^8.12.1",
60
- "@eclipse-glsp/graph": "2.8.0-next.7"
60
+ "@eclipse-glsp/graph": "2.8.0-next.9"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/ws": "^8.5.4"
@@ -14,10 +14,19 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { GModelRoot } from '@eclipse-glsp/graph';
17
- import { Action, ComputedBoundsAction, LayoutOperation, MaybePromise } from '@eclipse-glsp/protocol';
17
+ import {
18
+ Action,
19
+ ComputedBoundsAction,
20
+ ElementAndAlignment,
21
+ ElementAndBounds,
22
+ ElementAndRoutingPoints,
23
+ LayoutOperation,
24
+ MaybePromise
25
+ } from '@eclipse-glsp/protocol';
18
26
  import { inject, injectable } from 'inversify';
19
27
  import { ActionHandler } from '../../actions/action-handler';
20
28
  import { applyAlignment, applyElementAndBounds, applyRoute } from '../../utils/layout-util';
29
+ import { Logger } from '../../utils/logger';
21
30
  import { ModelState } from '../model/model-state';
22
31
  import { ModelSubmissionHandler } from '../model/model-submission-handler';
23
32
 
@@ -34,6 +43,9 @@ export class ComputedBoundsActionHandler implements ActionHandler {
34
43
  @inject(ModelState)
35
44
  protected modelState: ModelState;
36
45
 
46
+ @inject(Logger)
47
+ protected logger: Logger;
48
+
37
49
  actionKinds = [ComputedBoundsAction.KIND];
38
50
  execute(action: ComputedBoundsAction): MaybePromise<Action[]> {
39
51
  const model = this.modelState.root;
@@ -48,11 +60,47 @@ export class ComputedBoundsActionHandler implements ActionHandler {
48
60
  return [];
49
61
  }
50
62
 
63
+ /**
64
+ * Applies everything the client computed for the given model.
65
+ *
66
+ * An entry that cannot be applied is skipped and logged rather than treated as an error.
67
+ */
51
68
  protected applyBounds(root: GModelRoot, action: ComputedBoundsAction): void {
69
+ this.applyElementBounds(action.bounds);
70
+ this.applyAlignments(action.alignments ?? []);
71
+ this.applyRoutes(action.routes ?? []);
72
+ }
73
+
74
+ protected applyElementBounds(allBounds: ElementAndBounds[]): void {
75
+ const index = this.modelState.index;
76
+ allBounds.forEach(bounds => {
77
+ if (!applyElementAndBounds(bounds, index)) {
78
+ this.logger.warn(`Skipped computed bounds of element '${bounds.elementId}'`);
79
+ }
80
+ });
81
+ }
82
+
83
+ protected applyAlignments(alignments: ElementAndAlignment[]): void {
84
+ const index = this.modelState.index;
85
+ alignments.forEach(alignment => {
86
+ if (!applyAlignment(alignment, index)) {
87
+ this.logger.warn(`Skipped computed alignment of element '${alignment.elementId}'`);
88
+ }
89
+ });
90
+ }
91
+
92
+ /**
93
+ * Applies the computed routes.
94
+ *
95
+ * A skipped route is logged at debug level, an edge the client has not finished routing yet is expected.
96
+ */
97
+ protected applyRoutes(routes: ElementAndRoutingPoints[]): void {
52
98
  const index = this.modelState.index;
53
- action.bounds.forEach(bounds => applyElementAndBounds(bounds, index));
54
- (action.alignments ?? []).forEach(alignment => applyAlignment(alignment, index));
55
- (action.routes ?? []).forEach(route => applyRoute(route, index));
99
+ routes.forEach(route => {
100
+ if (!applyRoute(route, index)) {
101
+ this.logger.debug(`Skipped computed route of element '${route.elementId}'`);
102
+ }
103
+ });
56
104
  }
57
105
 
58
106
  priority?: number | undefined;
@@ -25,11 +25,11 @@ import { GLSPServerError, getOrThrow } from './glsp-server-error';
25
25
  *
26
26
  * @param bounds The new bounds.
27
27
  * @param index The model index.
28
- * @returns The changed element.
28
+ * @returns The changed element, or `undefined` if the bounds could not be applied to any element.
29
29
  */
30
30
  export function applyElementAndBounds(bounds: ElementAndBounds, index: GModelIndex): GBoundsAware | undefined {
31
- const element = getOrThrow(index.get(bounds.elementId), 'Model element not found! ID: ' + bounds.elementId);
32
- if (isGBoundsAware(element)) {
31
+ const element = index.find(bounds.elementId);
32
+ if (element && isGBoundsAware(element)) {
33
33
  if (bounds.newPosition !== undefined) {
34
34
  element.position = bounds.newPosition;
35
35
  }
@@ -44,11 +44,11 @@ export function applyElementAndBounds(bounds: ElementAndBounds, index: GModelInd
44
44
  *
45
45
  * @param alignment The new alignment.
46
46
  * @param index The model index.
47
- * @returns The changed element.
47
+ * @returns The changed element, or `undefined` if the alignment could not be applied to any element.
48
48
  */
49
49
  export function applyAlignment(alignment: ElementAndAlignment, index: GModelIndex): GAlignable | undefined {
50
- const element = getOrThrow(index.get(alignment.elementId), 'Model element not found! ID: ' + alignment.elementId);
51
- if (isGAlignable(element)) {
50
+ const element = index.find(alignment.elementId);
51
+ if (element && isGAlignable(element)) {
52
52
  element.alignment = alignment.newAlignment;
53
53
  return element;
54
54
  }
@@ -56,19 +56,20 @@ export function applyAlignment(alignment: ElementAndAlignment, index: GModelInde
56
56
  }
57
57
 
58
58
  /**
59
- * Applies the new route to the model.
59
+ * Applies the new route to the model. A route needs at least a source and a target point to describe an edge.
60
60
  *
61
61
  * @param route The new route.
62
62
  * @param index The model index.
63
- * @returns The changed element.
63
+ * @returns The changed edge, or `undefined` if the route could not be applied to any edge.
64
64
  */
65
- export function applyRoute(route: ElementAndRoutingPoints, index: GModelIndex): GEdge {
65
+ export function applyRoute(route: ElementAndRoutingPoints, index: GModelIndex): GEdge | undefined {
66
66
  const routingPoints = route.newRoutingPoints ?? [];
67
- if (routingPoints.length < 2) {
68
- throw new GLSPServerError('Invalid Route!');
67
+ const edge = index.findByClass(route.elementId, GEdge);
68
+ if (!edge || routingPoints.length < 2) {
69
+ return undefined;
69
70
  }
70
71
  // first and last point mark the source and target point
71
- const edge = applyRoutingPoints(route, index);
72
+ edge.routingPoints = routingPoints;
72
73
  const edgeRoutingPoints = edge.routingPoints;
73
74
 
74
75
  const args = edge.args ?? {};