@eclipse-glsp-examples/workflow-server 0.9.0-next.0193b16.17

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.
Files changed (162) hide show
  1. package/LICENSE +277 -0
  2. package/lib/app.d.ts +2 -0
  3. package/lib/app.d.ts.map +1 -0
  4. package/lib/app.js +37 -0
  5. package/lib/app.js.map +1 -0
  6. package/lib/graph-extension.d.ts +59 -0
  7. package/lib/graph-extension.d.ts.map +1 -0
  8. package/lib/graph-extension.js +138 -0
  9. package/lib/graph-extension.js.map +1 -0
  10. package/lib/handler/create-activity-node-handler.d.ts +23 -0
  11. package/lib/handler/create-activity-node-handler.d.ts.map +1 -0
  12. package/lib/handler/create-activity-node-handler.js +45 -0
  13. package/lib/handler/create-activity-node-handler.js.map +1 -0
  14. package/lib/handler/create-automated-task-handler.d.ts +24 -0
  15. package/lib/handler/create-automated-task-handler.d.ts.map +1 -0
  16. package/lib/handler/create-automated-task-handler.js +27 -0
  17. package/lib/handler/create-automated-task-handler.js.map +1 -0
  18. package/lib/handler/create-category-handler.d.ts +25 -0
  19. package/lib/handler/create-category-handler.d.ts.map +1 -0
  20. package/lib/handler/create-category-handler.js +42 -0
  21. package/lib/handler/create-category-handler.js.map +1 -0
  22. package/lib/handler/create-decision-node-handler.d.ts +24 -0
  23. package/lib/handler/create-decision-node-handler.d.ts.map +1 -0
  24. package/lib/handler/create-decision-node-handler.js +27 -0
  25. package/lib/handler/create-decision-node-handler.js.map +1 -0
  26. package/lib/handler/create-edge-handler.d.ts +22 -0
  27. package/lib/handler/create-edge-handler.d.ts.map +1 -0
  28. package/lib/handler/create-edge-handler.js +31 -0
  29. package/lib/handler/create-edge-handler.js.map +1 -0
  30. package/lib/handler/create-fork-node-handler.d.ts +6 -0
  31. package/lib/handler/create-fork-node-handler.d.ts.map +1 -0
  32. package/lib/handler/create-fork-node-handler.js +39 -0
  33. package/lib/handler/create-fork-node-handler.js.map +1 -0
  34. package/lib/handler/create-fork-or-join-node-handler.d.ts +22 -0
  35. package/lib/handler/create-fork-or-join-node-handler.d.ts.map +1 -0
  36. package/lib/handler/create-fork-or-join-node-handler.js +21 -0
  37. package/lib/handler/create-fork-or-join-node-handler.js.map +1 -0
  38. package/lib/handler/create-join-node-handler.d.ts +6 -0
  39. package/lib/handler/create-join-node-handler.d.ts.map +1 -0
  40. package/lib/handler/create-join-node-handler.js +39 -0
  41. package/lib/handler/create-join-node-handler.js.map +1 -0
  42. package/lib/handler/create-manual-task-handler.d.ts +24 -0
  43. package/lib/handler/create-manual-task-handler.d.ts.map +1 -0
  44. package/lib/handler/create-manual-task-handler.js +27 -0
  45. package/lib/handler/create-manual-task-handler.js.map +1 -0
  46. package/lib/handler/create-merge-node-handler.d.ts +24 -0
  47. package/lib/handler/create-merge-node-handler.d.ts.map +1 -0
  48. package/lib/handler/create-merge-node-handler.js +27 -0
  49. package/lib/handler/create-merge-node-handler.js.map +1 -0
  50. package/lib/handler/create-task-handler.d.ts +24 -0
  51. package/lib/handler/create-task-handler.d.ts.map +1 -0
  52. package/lib/handler/create-task-handler.js +48 -0
  53. package/lib/handler/create-task-handler.js.map +1 -0
  54. package/lib/handler/create-weighted-edge-handler.d.ts +22 -0
  55. package/lib/handler/create-weighted-edge-handler.d.ts.map +1 -0
  56. package/lib/handler/create-weighted-edge-handler.js +33 -0
  57. package/lib/handler/create-weighted-edge-handler.js.map +1 -0
  58. package/lib/handler/create-workflow-node-operation-handler.d.ts +24 -0
  59. package/lib/handler/create-workflow-node-operation-handler.d.ts.map +1 -0
  60. package/lib/handler/create-workflow-node-operation-handler.js +62 -0
  61. package/lib/handler/create-workflow-node-operation-handler.js.map +1 -0
  62. package/lib/handler/grid-snapper.d.ts +22 -0
  63. package/lib/handler/grid-snapper.d.ts.map +1 -0
  64. package/lib/handler/grid-snapper.js +20 -0
  65. package/lib/handler/grid-snapper.js.map +1 -0
  66. package/lib/index.d.ts +17 -0
  67. package/lib/index.d.ts.map +1 -0
  68. package/lib/index.js +21 -0
  69. package/lib/index.js.map +1 -0
  70. package/lib/labeledit/workflow-label-edit-validator.d.ts +21 -0
  71. package/lib/labeledit/workflow-label-edit-validator.d.ts.map +1 -0
  72. package/lib/labeledit/workflow-label-edit-validator.js +55 -0
  73. package/lib/labeledit/workflow-label-edit-validator.js.map +1 -0
  74. package/lib/layout/workflow-layout-configurator.d.ts +21 -0
  75. package/lib/layout/workflow-layout-configurator.d.ts.map +1 -0
  76. package/lib/layout/workflow-layout-configurator.js +38 -0
  77. package/lib/layout/workflow-layout-configurator.js.map +1 -0
  78. package/lib/marker/workflow-model-validator.d.ts +29 -0
  79. package/lib/marker/workflow-model-validator.d.ts.map +1 -0
  80. package/lib/marker/workflow-model-validator.js +150 -0
  81. package/lib/marker/workflow-model-validator.js.map +1 -0
  82. package/lib/model/workflow-navigation-target-resolver.d.ts +24 -0
  83. package/lib/model/workflow-navigation-target-resolver.d.ts.map +1 -0
  84. package/lib/model/workflow-navigation-target-resolver.js +40 -0
  85. package/lib/model/workflow-navigation-target-resolver.js.map +1 -0
  86. package/lib/provider/abstract-next-or-previous-navigation-target-provider.d.ts +29 -0
  87. package/lib/provider/abstract-next-or-previous-navigation-target-provider.d.ts.map +1 -0
  88. package/lib/provider/abstract-next-or-previous-navigation-target-provider.js +60 -0
  89. package/lib/provider/abstract-next-or-previous-navigation-target-provider.js.map +1 -0
  90. package/lib/provider/next-node-navigation-target-provider.d.ts +24 -0
  91. package/lib/provider/next-node-navigation-target-provider.d.ts.map +1 -0
  92. package/lib/provider/next-node-navigation-target-provider.js +28 -0
  93. package/lib/provider/next-node-navigation-target-provider.js.map +1 -0
  94. package/lib/provider/node-documentation-navigation-target-provider.d.ts +24 -0
  95. package/lib/provider/node-documentation-navigation-target-provider.d.ts.map +1 -0
  96. package/lib/provider/node-documentation-navigation-target-provider.js +50 -0
  97. package/lib/provider/node-documentation-navigation-target-provider.js.map +1 -0
  98. package/lib/provider/previous-node-navigation-target-provider.d.ts +24 -0
  99. package/lib/provider/previous-node-navigation-target-provider.d.ts.map +1 -0
  100. package/lib/provider/previous-node-navigation-target-provider.js +28 -0
  101. package/lib/provider/previous-node-navigation-target-provider.js.map +1 -0
  102. package/lib/provider/workflow-command-palette-action-provider.d.ts +25 -0
  103. package/lib/provider/workflow-command-palette-action-provider.d.ts.map +1 -0
  104. package/lib/provider/workflow-command-palette-action-provider.js +125 -0
  105. package/lib/provider/workflow-command-palette-action-provider.js.map +1 -0
  106. package/lib/provider/workflow-context-menu-item-provider.d.ts +21 -0
  107. package/lib/provider/workflow-context-menu-item-provider.d.ts.map +1 -0
  108. package/lib/provider/workflow-context-menu-item-provider.js +67 -0
  109. package/lib/provider/workflow-context-menu-item-provider.js.map +1 -0
  110. package/lib/util/model-types.d.ts +35 -0
  111. package/lib/util/model-types.d.ts.map +1 -0
  112. package/lib/util/model-types.js +60 -0
  113. package/lib/util/model-types.js.map +1 -0
  114. package/lib/workflow-diagram-configuration.d.ts +28 -0
  115. package/lib/workflow-diagram-configuration.d.ts.map +1 -0
  116. package/lib/workflow-diagram-configuration.js +125 -0
  117. package/lib/workflow-diagram-configuration.js.map +1 -0
  118. package/lib/workflow-diagram-module.d.ts +33 -0
  119. package/lib/workflow-diagram-module.d.ts.map +1 -0
  120. package/lib/workflow-diagram-module.js +104 -0
  121. package/lib/workflow-diagram-module.js.map +1 -0
  122. package/lib/workflow-glsp-server.d.ts +23 -0
  123. package/lib/workflow-glsp-server.d.ts.map +1 -0
  124. package/lib/workflow-glsp-server.js +54 -0
  125. package/lib/workflow-glsp-server.js.map +1 -0
  126. package/lib/workflow-popup-factory.d.ts +21 -0
  127. package/lib/workflow-popup-factory.d.ts.map +1 -0
  128. package/lib/workflow-popup-factory.js +54 -0
  129. package/lib/workflow-popup-factory.js.map +1 -0
  130. package/package.json +58 -0
  131. package/src/app.ts +35 -0
  132. package/src/graph-extension.ts +167 -0
  133. package/src/handler/create-activity-node-handler.ts +34 -0
  134. package/src/handler/create-automated-task-handler.ts +30 -0
  135. package/src/handler/create-category-handler.ts +37 -0
  136. package/src/handler/create-decision-node-handler.ts +30 -0
  137. package/src/handler/create-edge-handler.ts +25 -0
  138. package/src/handler/create-fork-node-handler.ts +24 -0
  139. package/src/handler/create-fork-or-join-node-handler.ts +26 -0
  140. package/src/handler/create-join-node-handler.ts +24 -0
  141. package/src/handler/create-manual-task-handler.ts +30 -0
  142. package/src/handler/create-merge-node-handler.ts +30 -0
  143. package/src/handler/create-task-handler.ts +38 -0
  144. package/src/handler/create-weighted-edge-handler.ts +27 -0
  145. package/src/handler/create-workflow-node-operation-handler.ts +56 -0
  146. package/src/handler/grid-snapper.ts +32 -0
  147. package/src/index.ts +19 -0
  148. package/src/labeledit/workflow-label-edit-validator.ts +39 -0
  149. package/src/layout/workflow-layout-configurator.ts +27 -0
  150. package/src/marker/workflow-model-validator.ts +137 -0
  151. package/src/model/workflow-navigation-target-resolver.ts +40 -0
  152. package/src/provider/abstract-next-or-previous-navigation-target-provider.ts +53 -0
  153. package/src/provider/next-node-navigation-target-provider.ts +31 -0
  154. package/src/provider/node-documentation-navigation-target-provider.ts +52 -0
  155. package/src/provider/previous-node-navigation-target-provider.ts +31 -0
  156. package/src/provider/workflow-command-palette-action-provider.ts +142 -0
  157. package/src/provider/workflow-context-menu-item-provider.ts +51 -0
  158. package/src/util/model-types.ts +55 -0
  159. package/src/workflow-diagram-configuration.ts +122 -0
  160. package/src/workflow-diagram-module.ts +115 -0
  161. package/src/workflow-glsp-server.ts +37 -0
  162. package/src/workflow-popup-factory.ts +46 -0
@@ -0,0 +1,142 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import {
17
+ Args,
18
+ CommandPaletteActionProvider,
19
+ CreateEdgeOperation,
20
+ CreateNodeOperation,
21
+ DefaultTypes,
22
+ DeleteElementOperation,
23
+ GModelElement,
24
+ GNode,
25
+ LabeledAction,
26
+ ModelState,
27
+ Point
28
+ } from '@eclipse-glsp/server-node';
29
+ import { inject, injectable } from 'inversify';
30
+ import { TaskNode } from '../graph-extension';
31
+ import { ModelTypes } from '../util/model-types';
32
+
33
+ @injectable()
34
+ export class WorkflowCommandPaletteActionProvider extends CommandPaletteActionProvider {
35
+ @inject(ModelState)
36
+ protected override modelState: ModelState;
37
+
38
+ getPaletteActions(selectedElementIds: string[], selectedElements: GModelElement[], position: Point, args?: Args): LabeledAction[] {
39
+ const actions: LabeledAction[] = [];
40
+ if (this.modelState.isReadonly) {
41
+ return actions;
42
+ }
43
+ const index = this.modelState.index;
44
+ // Create actions
45
+ const location = position ?? Point.ORIGIN;
46
+ actions.push(
47
+ {
48
+ label: 'Create Automated Task',
49
+ actions: [CreateNodeOperation.create(ModelTypes.AUTOMATED_TASK, { location })],
50
+ icon: 'fa-plus-square'
51
+ },
52
+ {
53
+ label: 'Create Manual Task',
54
+ actions: [CreateNodeOperation.create(ModelTypes.MANUAL_TASK, { location })],
55
+ icon: 'fa-plus-square'
56
+ },
57
+ {
58
+ label: 'Create Merge Node',
59
+ actions: [CreateNodeOperation.create(ModelTypes.MERGE_NODE, { location })],
60
+ icon: 'fa-plus-square'
61
+ },
62
+ {
63
+ label: 'Create Decision Node',
64
+ actions: [CreateNodeOperation.create(ModelTypes.DECISION_NODE, { location })],
65
+ icon: 'fa-plus-square'
66
+ },
67
+ {
68
+ label: 'Create Category',
69
+ actions: [CreateNodeOperation.create(ModelTypes.CATEGORY, { location })],
70
+ icon: 'fa-plus-square'
71
+ }
72
+ );
73
+ // Create edge action between two nodes
74
+ if (selectedElements.length === 1) {
75
+ const element = selectedElements[0];
76
+ if (element instanceof GNode) {
77
+ actions.push(...this.createEdgeActions(element, index.getAllByClass(TaskNode)));
78
+ }
79
+ } else if (selectedElements.length === 2) {
80
+ const source = selectedElements[0];
81
+ const target = selectedElements[1];
82
+ if (source instanceof TaskNode && target instanceof TaskNode) {
83
+ actions.push(
84
+ this.createEdgeAction(`Create Edge from ${this.getLabel(source)} to ${this.getLabel(target)}`, source, target)
85
+ );
86
+ actions.push(
87
+ this.createWeightedEdgeAction(
88
+ `Create Weighted Edge from ${this.getLabel(source)} to ${this.getLabel(target)}`,
89
+ source,
90
+ target
91
+ )
92
+ );
93
+ }
94
+ }
95
+ // Delete action
96
+
97
+ const label = selectedElementIds.length === 1 ? 'Delete' : 'Delete All';
98
+ actions.push({ label, actions: [DeleteElementOperation.create(selectedElementIds)], icon: 'fa-minus-square' });
99
+
100
+ return actions;
101
+ }
102
+
103
+ protected createEdgeActions(source: GNode, targets: GNode[]): LabeledAction[] {
104
+ const actions: LabeledAction[] = [];
105
+ targets.forEach(node => actions.push(this.createEdgeAction(`Create Edge to ${this.getLabel(node)}`, source, node)));
106
+ targets.forEach(node =>
107
+ actions.push(this.createWeightedEdgeAction(`Create Weighted Edge to ${this.getLabel(node)}`, source, node))
108
+ );
109
+ return actions;
110
+ }
111
+
112
+ protected createWeightedEdgeAction(label: string, source: GNode, node: GNode): LabeledAction {
113
+ return {
114
+ label,
115
+ actions: [
116
+ CreateEdgeOperation.create({
117
+ elementTypeId: ModelTypes.WEIGHTED_EDGE,
118
+ sourceElementId: source.id,
119
+ targetElementId: node.id
120
+ })
121
+ ],
122
+ icon: 'fa-plus-square'
123
+ };
124
+ }
125
+
126
+ protected createEdgeAction(label: string, source: GNode, node: GNode): LabeledAction {
127
+ return {
128
+ label,
129
+ actions: [
130
+ CreateEdgeOperation.create({ elementTypeId: DefaultTypes.EDGE, sourceElementId: source.id, targetElementId: node.id })
131
+ ],
132
+ icon: 'fa-plus-square'
133
+ };
134
+ }
135
+
136
+ protected getLabel(node: GNode): string {
137
+ if (node instanceof TaskNode) {
138
+ return node.name;
139
+ }
140
+ return node.id;
141
+ }
142
+ }
@@ -0,0 +1,51 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { Args, ContextMenuItemProvider, CreateNodeOperation, MenuItem, ModelState, Point } from '@eclipse-glsp/server-node';
17
+ import { inject, injectable } from 'inversify';
18
+ import { GridSnapper } from '../handler/grid-snapper';
19
+ import { ModelTypes } from '../util/model-types';
20
+
21
+ @injectable()
22
+ export class WorkflowContextMenuItemProvider extends ContextMenuItemProvider {
23
+ @inject(ModelState)
24
+ protected modelState: ModelState;
25
+
26
+ getItems(selectedElementIds: string[], position: Point, args?: Args): MenuItem[] {
27
+ if (this.modelState.isReadonly || selectedElementIds.length !== 0) {
28
+ return [];
29
+ }
30
+ const snappedPosition = GridSnapper.snap(position);
31
+ const newAutTask: MenuItem = {
32
+ id: 'newAutoTask',
33
+ label: 'Automated Task',
34
+ actions: [CreateNodeOperation.create(ModelTypes.AUTOMATED_TASK, { location: snappedPosition })]
35
+ };
36
+ const newManTask: MenuItem = {
37
+ id: 'newManualTask',
38
+ label: 'Manual Task',
39
+ actions: [CreateNodeOperation.create(ModelTypes.MANUAL_TASK, { location: snappedPosition })]
40
+ };
41
+ const newChildMenu: MenuItem = {
42
+ id: 'new',
43
+ label: 'New',
44
+ actions: [],
45
+ children: [newAutTask, newManTask],
46
+ icon: 'add',
47
+ group: '0_new'
48
+ };
49
+ return [newChildMenu];
50
+ }
51
+ }
@@ -0,0 +1,55 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ /* eslint-disable @typescript-eslint/padding-line-between-statements */
17
+ export namespace ModelTypes {
18
+ export const LABEL_HEADING = 'label:heading';
19
+ export const LABEL_TEXT = 'label:text';
20
+ export const COMP_HEADER = 'comp:header';
21
+ export const LABEL_ICON = 'label:icon';
22
+ export const WEIGHTED_EDGE = 'edge:weighted';
23
+ export const ICON = 'icon';
24
+ export const ACTIVITY_NODE = 'activityNode';
25
+ export const DECISION_NODE = `${ACTIVITY_NODE}:decision`;
26
+ export const MERGE_NODE = `${ACTIVITY_NODE}:merge`;
27
+ export const FORK_NODE = `${ACTIVITY_NODE}:fork`;
28
+ export const JOIN_NODE = `${ACTIVITY_NODE}:join`;
29
+ export const TASK = 'task';
30
+ export const MANUAL_TASK = `${TASK}:manual`;
31
+ export const AUTOMATED_TASK = `${TASK}:automated`;
32
+ export const CATEGORY = 'category';
33
+ export const STRUCTURE = 'struct';
34
+
35
+ export function toNodeType(type: string): string {
36
+ switch (type) {
37
+ case DECISION_NODE:
38
+ return 'decisionNode';
39
+ case MERGE_NODE:
40
+ return 'mergeNode';
41
+ case FORK_NODE:
42
+ return 'forkNode';
43
+ case JOIN_NODE:
44
+ return 'joinNode';
45
+ case MANUAL_TASK:
46
+ return 'manual';
47
+ case AUTOMATED_TASK:
48
+ return 'automated';
49
+ case CATEGORY:
50
+ return 'category';
51
+ default:
52
+ return 'unknown';
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,122 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { DefaultTypes, EdgeTypeHint, ShapeTypeHint } from '@eclipse-glsp/protocol';
17
+ import {
18
+ DiagramConfiguration,
19
+ GCompartment,
20
+ GEdge,
21
+ getDefaultMapping,
22
+ GLabel,
23
+ GModelElementConstructor,
24
+ ServerLayoutKind
25
+ } from '@eclipse-glsp/server-node';
26
+ import { injectable } from 'inversify';
27
+ import { ActivityNode, Category, TaskNode } from './graph-extension';
28
+ import { ModelTypes as types } from './util/model-types';
29
+
30
+ @injectable()
31
+ export class WorkflowDiagramConfiguration implements DiagramConfiguration {
32
+ get typeMapping(): Map<string, GModelElementConstructor> {
33
+ const mapping = getDefaultMapping();
34
+ mapping.set(types.LABEL_HEADING, GLabel);
35
+ mapping.set(types.LABEL_TEXT, GLabel);
36
+ mapping.set(types.COMP_HEADER, GCompartment);
37
+ mapping.set(types.LABEL_ICON, GLabel);
38
+ mapping.set(types.WEIGHTED_EDGE, GEdge);
39
+ mapping.set(types.ICON, GCompartment);
40
+ mapping.set(types.ACTIVITY_NODE, ActivityNode);
41
+ mapping.set(types.TASK, TaskNode);
42
+ mapping.set(types.CATEGORY, Category);
43
+ mapping.set(types.STRUCTURE, GCompartment);
44
+ return mapping;
45
+ }
46
+
47
+ get shapeTypeHints(): ShapeTypeHint[] {
48
+ return [
49
+ createDefaultShapeTypeHint(types.MANUAL_TASK),
50
+ createDefaultShapeTypeHint(types.AUTOMATED_TASK),
51
+ createDefaultShapeTypeHint(types.FORK_NODE),
52
+ createDefaultShapeTypeHint(types.JOIN_NODE),
53
+ createDefaultShapeTypeHint(types.DECISION_NODE),
54
+ createDefaultShapeTypeHint(types.MERGE_NODE),
55
+ {
56
+ elementTypeId: types.CATEGORY,
57
+ repositionable: true,
58
+ deletable: true,
59
+ resizable: true,
60
+ reparentable: true,
61
+ containableElementTypeIds: [
62
+ types.DECISION_NODE,
63
+ types.MERGE_NODE,
64
+ types.FORK_NODE,
65
+ types.JOIN_NODE,
66
+ types.AUTOMATED_TASK,
67
+ types.MANUAL_TASK,
68
+ types.CATEGORY
69
+ ]
70
+ }
71
+ ];
72
+ }
73
+
74
+ get edgeTypeHints(): EdgeTypeHint[] {
75
+ return [
76
+ createDefaultEdgeTypeHint(DefaultTypes.EDGE),
77
+ {
78
+ elementTypeId: types.WEIGHTED_EDGE,
79
+ repositionable: true,
80
+ deletable: true,
81
+ routable: true,
82
+ sourceElementTypeIds: [types.DECISION_NODE],
83
+ targetElementTypeIds: [types.MANUAL_TASK, types.AUTOMATED_TASK, types.FORK_NODE, types.JOIN_NODE]
84
+ }
85
+ ];
86
+ }
87
+
88
+ layoutKind = ServerLayoutKind.MANUAL;
89
+ needsClientLayout = true;
90
+ animatedUpdate = true;
91
+ }
92
+
93
+ export function createDefaultShapeTypeHint(elementId: string): ShapeTypeHint {
94
+ return { elementTypeId: elementId, repositionable: true, deletable: true, resizable: true, reparentable: true };
95
+ }
96
+
97
+ export function createDefaultEdgeTypeHint(elementId: string): EdgeTypeHint {
98
+ return {
99
+ elementTypeId: elementId,
100
+ repositionable: true,
101
+ deletable: true,
102
+ routable: true,
103
+ sourceElementTypeIds: [
104
+ types.MANUAL_TASK,
105
+ types.AUTOMATED_TASK,
106
+ types.DECISION_NODE,
107
+ types.MERGE_NODE,
108
+ types.FORK_NODE,
109
+ types.JOIN_NODE,
110
+ types.CATEGORY
111
+ ],
112
+ targetElementTypeIds: [
113
+ types.MANUAL_TASK,
114
+ types.AUTOMATED_TASK,
115
+ types.DECISION_NODE,
116
+ types.MERGE_NODE,
117
+ types.FORK_NODE,
118
+ types.JOIN_NODE,
119
+ types.CATEGORY
120
+ ]
121
+ };
122
+ }
@@ -0,0 +1,115 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import {
17
+ CommandPaletteActionProvider,
18
+ ContextMenuItemProvider,
19
+ DiagramConfiguration,
20
+ GLSPServer,
21
+ GModelDiagramModule,
22
+ InstanceMultiBinding,
23
+ LabelEditValidator,
24
+ ModelValidator,
25
+ MultiBinding,
26
+ NavigationTargetProvider,
27
+ NavigationTargetResolver,
28
+ OperationHandlerConstructor,
29
+ PopupModelFactory,
30
+ ServerModule
31
+ } from '@eclipse-glsp/server-node';
32
+ import { BindingTarget } from '@eclipse-glsp/server-node/lib/di/binding-target';
33
+ import { injectable } from 'inversify';
34
+ import { CreateAutomatedTaskHandler } from './handler/create-automated-task-handler';
35
+ import { CreateCategoryHandler } from './handler/create-category-handler';
36
+ import { CreateDecisionNodeHandler } from './handler/create-decision-node-handler';
37
+ import { CreateEdgeHandler } from './handler/create-edge-handler';
38
+ import { CreateForkNodeHandler } from './handler/create-fork-node-handler';
39
+ import { CreateJoinNodeHandler } from './handler/create-join-node-handler';
40
+ import { CreateManualTaskHandler } from './handler/create-manual-task-handler';
41
+ import { CreateMergeNodeHandler } from './handler/create-merge-node-handler';
42
+ import { CreateWeightedEdgeHandler } from './handler/create-weighted-edge-handler';
43
+ import { WorkflowLabelEditValidator } from './labeledit/workflow-label-edit-validator';
44
+ import { WorkflowModelValidator } from './marker/workflow-model-validator';
45
+ import { WorkflowNavigationTargetResolver } from './model/workflow-navigation-target-resolver';
46
+ import { NextNodeNavigationTargetProvider } from './provider/next-node-navigation-target-provider';
47
+ import { NodeDocumentationNavigationTargetProvider } from './provider/node-documentation-navigation-target-provider';
48
+ import { PreviousNodeNavigationTargetProvider } from './provider/previous-node-navigation-target-provider';
49
+ import { WorkflowCommandPaletteActionProvider } from './provider/workflow-command-palette-action-provider';
50
+ import { WorkflowContextMenuItemProvider } from './provider/workflow-context-menu-item-provider';
51
+ import { WorkflowDiagramConfiguration } from './workflow-diagram-configuration';
52
+ import { WorkflowGLSPServer } from './workflow-glsp-server';
53
+ import { WorkflowPopupFactory } from './workflow-popup-factory';
54
+
55
+ @injectable()
56
+ export class WorkflowServerModule extends ServerModule {
57
+ protected override bindGLSPServer(): BindingTarget<GLSPServer> {
58
+ return WorkflowGLSPServer;
59
+ }
60
+ }
61
+
62
+ @injectable()
63
+ export class WorkflowDiagramModule extends GModelDiagramModule {
64
+ get diagramType(): string {
65
+ return 'workflow-diagram';
66
+ }
67
+
68
+ protected override configureOperationHandlers(binding: InstanceMultiBinding<OperationHandlerConstructor>): void {
69
+ super.configureOperationHandlers(binding);
70
+ binding.add(CreateAutomatedTaskHandler);
71
+ binding.add(CreateManualTaskHandler);
72
+ binding.add(CreateJoinNodeHandler);
73
+ binding.add(CreateForkNodeHandler);
74
+ binding.add(CreateEdgeHandler);
75
+ binding.add(CreateWeightedEdgeHandler);
76
+ binding.add(CreateMergeNodeHandler);
77
+ binding.add(CreateDecisionNodeHandler);
78
+ binding.add(CreateCategoryHandler);
79
+ }
80
+
81
+ protected bindDiagramConfiguration(): BindingTarget<DiagramConfiguration> {
82
+ return WorkflowDiagramConfiguration;
83
+ }
84
+
85
+ protected override bindNavigationTargetResolver(): BindingTarget<NavigationTargetResolver> | undefined {
86
+ return WorkflowNavigationTargetResolver;
87
+ }
88
+
89
+ protected override bindContextMenuItemProvider(): BindingTarget<ContextMenuItemProvider> | undefined {
90
+ return WorkflowContextMenuItemProvider;
91
+ }
92
+
93
+ protected override bindCommandPaletteActionProvider(): BindingTarget<CommandPaletteActionProvider> | undefined {
94
+ return WorkflowCommandPaletteActionProvider;
95
+ }
96
+
97
+ protected override bindLabelEditValidator(): BindingTarget<LabelEditValidator> | undefined {
98
+ return WorkflowLabelEditValidator;
99
+ }
100
+
101
+ protected override bindPopupModelFactory(): BindingTarget<PopupModelFactory> | undefined {
102
+ return WorkflowPopupFactory;
103
+ }
104
+
105
+ protected override bindModelValidator(): BindingTarget<ModelValidator> | undefined {
106
+ return WorkflowModelValidator;
107
+ }
108
+
109
+ protected override configureNavigationTargetProviders(binding: MultiBinding<NavigationTargetProvider>): void {
110
+ super.configureNavigationTargetProviders(binding);
111
+ binding.add(NextNodeNavigationTargetProvider);
112
+ binding.add(PreviousNodeNavigationTargetProvider);
113
+ binding.add(NodeDocumentationNavigationTargetProvider);
114
+ }
115
+ }
@@ -0,0 +1,37 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { Args, ArgsUtil, DefaultGLSPServer, InitializeResult, Logger, MaybePromise } from '@eclipse-glsp/server-node';
17
+ import { inject, injectable } from 'inversify';
18
+
19
+ @injectable()
20
+ export class WorkflowGLSPServer extends DefaultGLSPServer {
21
+ MESSAGE_KEY = 'message';
22
+ TIMESTAMP_KEY = 'timestamp';
23
+
24
+ @inject(Logger)
25
+ protected override logger: Logger;
26
+
27
+ protected override handleInitializeArgs(result: InitializeResult, args: Args | undefined): MaybePromise<InitializeResult> {
28
+ if (!args) {
29
+ return result;
30
+ }
31
+ const timestamp = ArgsUtil.get(args, this.TIMESTAMP_KEY);
32
+ const message = ArgsUtil.get(args, this.MESSAGE_KEY);
33
+
34
+ this.logger.debug(`${timestamp}: ${message}`);
35
+ return result;
36
+ }
37
+ }
@@ -0,0 +1,46 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2022 STMicroelectronics and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { GModelElement, GModelRoot, GPreRenderedElement, PopupModelFactory, RequestPopupModelAction } from '@eclipse-glsp/server-node';
17
+ import { TaskNode } from './graph-extension';
18
+ import { injectable } from 'inversify';
19
+
20
+ const NL = '<br/>';
21
+
22
+ @injectable()
23
+ export class WorkflowPopupFactory implements PopupModelFactory {
24
+ createPopupModel(element: GModelElement, action: RequestPopupModelAction): GModelRoot | undefined {
25
+ if (element && element instanceof TaskNode) {
26
+ const popupTitle = GPreRenderedElement.builder()
27
+ .id('popup-title')
28
+ .code(`<div class="sprotty-popup-title">${element.name}</div>`)
29
+ .build();
30
+
31
+ const popupBody = GPreRenderedElement.builder()
32
+ .id('popup-body')
33
+ .code(`<div class="sprotty-popup-body">${this.generateBody(element)}</div>`)
34
+ .build();
35
+
36
+ return GModelRoot.builder().type('html').canvasBounds(action.bounds).id('sprotty-popup').add(popupTitle).add(popupBody).build();
37
+ }
38
+ return undefined;
39
+ }
40
+
41
+ private generateBody(task: TaskNode): string {
42
+ return `Type: ${task.taskType} ${NL}
43
+ Duration: ${task.duration} ${NL}
44
+ Reference: ${task.references} ${NL}`;
45
+ }
46
+ }