@eclipse-glsp/server 1.1.0-next.146ae06.49 → 1.1.0-next.2ae7567.68

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 (368) hide show
  1. package/lib/browser/launch/worker-server-launcher.js +2 -2
  2. package/lib/browser/launch/worker-server-launcher.js.map +1 -1
  3. package/lib/common/actions/action-dispatcher.d.ts +2 -1
  4. package/lib/common/actions/action-dispatcher.d.ts.map +1 -1
  5. package/lib/common/actions/action-dispatcher.js +9 -7
  6. package/lib/common/actions/action-dispatcher.js.map +1 -1
  7. package/lib/common/actions/action-handler-registry.js +4 -4
  8. package/lib/common/actions/action-handler-registry.js.map +1 -1
  9. package/lib/common/actions/client-action-handler.d.ts +17 -8
  10. package/lib/common/actions/client-action-handler.d.ts.map +1 -1
  11. package/lib/common/actions/client-action-handler.js +32 -22
  12. package/lib/common/actions/client-action-handler.js.map +1 -1
  13. package/lib/common/actions/global-action-provider.d.ts +6 -21
  14. package/lib/common/actions/global-action-provider.d.ts.map +1 -1
  15. package/lib/common/actions/global-action-provider.js +17 -22
  16. package/lib/common/actions/global-action-provider.js.map +1 -1
  17. package/lib/common/command/command-stack.js +2 -2
  18. package/lib/common/command/command-stack.js.map +1 -1
  19. package/lib/common/command/command.js +1 -1
  20. package/lib/common/command/command.js.map +1 -1
  21. package/lib/common/command/recording-command.d.ts +9 -15
  22. package/lib/common/command/recording-command.d.ts.map +1 -1
  23. package/lib/common/command/recording-command.js +12 -26
  24. package/lib/common/command/recording-command.js.map +1 -1
  25. package/lib/common/command/undo-redo-action-handler.js +2 -2
  26. package/lib/common/command/undo-redo-action-handler.js.map +1 -1
  27. package/lib/common/di/binding-target.d.ts.map +1 -1
  28. package/lib/common/di/binding-target.js +3 -2
  29. package/lib/common/di/binding-target.js.map +1 -1
  30. package/lib/common/di/client-session-module.d.ts +9 -1
  31. package/lib/common/di/client-session-module.d.ts.map +1 -1
  32. package/lib/common/di/client-session-module.js +9 -9
  33. package/lib/common/di/client-session-module.js.map +1 -1
  34. package/lib/common/di/diagram-module.d.ts +23 -1
  35. package/lib/common/di/diagram-module.d.ts.map +1 -1
  36. package/lib/common/di/diagram-module.js +23 -53
  37. package/lib/common/di/diagram-module.js.map +1 -1
  38. package/lib/common/di/glsp-module.js +2 -2
  39. package/lib/common/di/glsp-module.js.map +1 -1
  40. package/lib/common/di/server-module.d.ts +0 -1
  41. package/lib/common/di/server-module.d.ts.map +1 -1
  42. package/lib/common/di/server-module.js +0 -1
  43. package/lib/common/di/server-module.js.map +1 -1
  44. package/lib/common/diagram/diagram-configuration.js +1 -1
  45. package/lib/common/diagram/diagram-configuration.js.map +1 -1
  46. package/lib/common/features/clipboard/request-clipboard-data-action-handler.d.ts.map +1 -1
  47. package/lib/common/features/clipboard/request-clipboard-data-action-handler.js +2 -2
  48. package/lib/common/features/clipboard/request-clipboard-data-action-handler.js.map +1 -1
  49. package/lib/common/features/contextactions/command-palette-action-provider.js +2 -2
  50. package/lib/common/features/contextactions/command-palette-action-provider.js.map +1 -1
  51. package/lib/common/features/contextactions/context-actions-provider-registry.js +2 -2
  52. package/lib/common/features/contextactions/context-actions-provider-registry.js.map +1 -1
  53. package/lib/common/features/contextactions/context-menu-item-provider.js +2 -2
  54. package/lib/common/features/contextactions/context-menu-item-provider.js.map +1 -1
  55. package/lib/common/features/contextactions/request-context-actions-handler.js +2 -2
  56. package/lib/common/features/contextactions/request-context-actions-handler.js.map +1 -1
  57. package/lib/common/features/contextactions/tool-palette-item-provider.js +4 -4
  58. package/lib/common/features/contextactions/tool-palette-item-provider.js.map +1 -1
  59. package/lib/common/features/directediting/context-edit-validator-registry.js +2 -2
  60. package/lib/common/features/directediting/context-edit-validator-registry.js.map +1 -1
  61. package/lib/common/features/directediting/label-edit-validator.js +2 -2
  62. package/lib/common/features/directediting/label-edit-validator.js.map +1 -1
  63. package/lib/common/features/directediting/request-edit-validation-handler.js +2 -2
  64. package/lib/common/features/directediting/request-edit-validation-handler.js.map +1 -1
  65. package/lib/common/features/layout/computed-bounds-action-handler.js +2 -2
  66. package/lib/common/features/layout/computed-bounds-action-handler.js.map +1 -1
  67. package/lib/common/features/layout/layout-operation-handler.js +2 -2
  68. package/lib/common/features/layout/layout-operation-handler.js.map +1 -1
  69. package/lib/common/features/model/gmodel-factory.js +2 -2
  70. package/lib/common/features/model/gmodel-factory.js.map +1 -1
  71. package/lib/common/features/model/gmodel-index.js +2 -2
  72. package/lib/common/features/model/gmodel-index.js.map +1 -1
  73. package/lib/common/features/model/gmodel-serializer.d.ts +10 -10
  74. package/lib/common/features/model/gmodel-serializer.d.ts.map +1 -1
  75. package/lib/common/features/model/gmodel-serializer.js +2 -2
  76. package/lib/common/features/model/gmodel-serializer.js.map +1 -1
  77. package/lib/common/features/model/model-state.d.ts.map +1 -1
  78. package/lib/common/features/model/model-state.js +5 -2
  79. package/lib/common/features/model/model-state.js.map +1 -1
  80. package/lib/common/features/model/model-submission-handler.d.ts +28 -3
  81. package/lib/common/features/model/model-submission-handler.d.ts.map +1 -1
  82. package/lib/common/features/model/model-submission-handler.js +63 -9
  83. package/lib/common/features/model/model-submission-handler.js.map +1 -1
  84. package/lib/common/features/model/request-model-action-handler.d.ts +5 -6
  85. package/lib/common/features/model/request-model-action-handler.d.ts.map +1 -1
  86. package/lib/common/features/model/request-model-action-handler.js +37 -15
  87. package/lib/common/features/model/request-model-action-handler.js.map +1 -1
  88. package/lib/common/features/model/save-model-action-handler.js +2 -2
  89. package/lib/common/features/model/save-model-action-handler.js.map +1 -1
  90. package/lib/common/features/navigation/navigation-target-provider-registry.js +2 -2
  91. package/lib/common/features/navigation/navigation-target-provider-registry.js.map +1 -1
  92. package/lib/common/features/navigation/navigation-target-resolver.js +2 -2
  93. package/lib/common/features/navigation/navigation-target-resolver.js.map +1 -1
  94. package/lib/common/features/navigation/request-navigation-targets-action-handler.js +2 -2
  95. package/lib/common/features/navigation/request-navigation-targets-action-handler.js.map +1 -1
  96. package/lib/common/features/navigation/resolve-navigation-targets-action-handler.js +2 -2
  97. package/lib/common/features/navigation/resolve-navigation-targets-action-handler.js.map +1 -1
  98. package/lib/common/features/popup/request-popup-model-action-handler.js +2 -2
  99. package/lib/common/features/popup/request-popup-model-action-handler.js.map +1 -1
  100. package/lib/common/features/progress/progress-service.d.ts +44 -0
  101. package/lib/common/features/progress/progress-service.d.ts.map +1 -0
  102. package/lib/common/features/progress/progress-service.js +51 -0
  103. package/lib/common/features/progress/progress-service.js.map +1 -0
  104. package/lib/common/features/type-hints/edge-creation-checker.d.ts +42 -0
  105. package/lib/common/features/type-hints/edge-creation-checker.d.ts.map +1 -0
  106. package/lib/common/{command/recording-command.spec.d.ts → features/type-hints/edge-creation-checker.js} +5 -2
  107. package/lib/common/features/type-hints/edge-creation-checker.js.map +1 -0
  108. package/lib/common/features/type-hints/request-check-edge-action-handler.d.ts +29 -0
  109. package/lib/common/features/type-hints/request-check-edge-action-handler.d.ts.map +1 -0
  110. package/lib/common/features/type-hints/request-check-edge-action-handler.js +72 -0
  111. package/lib/common/features/type-hints/request-check-edge-action-handler.js.map +1 -0
  112. package/lib/common/{diagram → features/type-hints}/request-type-hints-action-handler.d.ts +2 -3
  113. package/lib/common/features/type-hints/request-type-hints-action-handler.d.ts.map +1 -0
  114. package/lib/common/{diagram → features/type-hints}/request-type-hints-action-handler.js +3 -4
  115. package/lib/common/features/type-hints/request-type-hints-action-handler.js.map +1 -0
  116. package/lib/common/features/validation/model-validator.js +2 -2
  117. package/lib/common/features/validation/model-validator.js.map +1 -1
  118. package/lib/common/features/validation/request-markers-handler.js +2 -2
  119. package/lib/common/features/validation/request-markers-handler.js.map +1 -1
  120. package/lib/common/gmodel/apply-label-edit-operation-handler.js +2 -2
  121. package/lib/common/gmodel/apply-label-edit-operation-handler.js.map +1 -1
  122. package/lib/common/gmodel/change-bounds-operation-handler.js +2 -2
  123. package/lib/common/gmodel/change-bounds-operation-handler.js.map +1 -1
  124. package/lib/common/gmodel/change-routing-points-operation-handler.js +2 -2
  125. package/lib/common/gmodel/change-routing-points-operation-handler.js.map +1 -1
  126. package/lib/common/gmodel/cut-operation-handler.js +2 -2
  127. package/lib/common/gmodel/cut-operation-handler.js.map +1 -1
  128. package/lib/common/gmodel/delete-operation-handler.js +2 -2
  129. package/lib/common/gmodel/delete-operation-handler.js.map +1 -1
  130. package/lib/common/gmodel/gmodel-create-edge-operation-handler.d.ts +3 -3
  131. package/lib/common/gmodel/gmodel-create-edge-operation-handler.d.ts.map +1 -1
  132. package/lib/common/gmodel/gmodel-create-edge-operation-handler.js +2 -2
  133. package/lib/common/gmodel/gmodel-create-edge-operation-handler.js.map +1 -1
  134. package/lib/common/gmodel/gmodel-create-node-operation-handler.d.ts +3 -3
  135. package/lib/common/gmodel/gmodel-create-node-operation-handler.d.ts.map +1 -1
  136. package/lib/common/gmodel/gmodel-create-node-operation-handler.js +2 -2
  137. package/lib/common/gmodel/gmodel-create-node-operation-handler.js.map +1 -1
  138. package/lib/common/gmodel/gmodel-diagram-module.js +2 -2
  139. package/lib/common/gmodel/gmodel-diagram-module.js.map +1 -1
  140. package/lib/common/gmodel/gmodel-operation-handler.js +1 -1
  141. package/lib/common/gmodel/gmodel-operation-handler.js.map +1 -1
  142. package/lib/common/gmodel/paste-operation-handler.d.ts.map +1 -1
  143. package/lib/common/gmodel/paste-operation-handler.js +2 -2
  144. package/lib/common/gmodel/paste-operation-handler.js.map +1 -1
  145. package/lib/common/gmodel/reconnect-edge-operation-handler.js +2 -2
  146. package/lib/common/gmodel/reconnect-edge-operation-handler.js.map +1 -1
  147. package/lib/common/index.d.ts +3 -1
  148. package/lib/common/index.d.ts.map +1 -1
  149. package/lib/common/index.js +3 -1
  150. package/lib/common/index.js.map +1 -1
  151. package/lib/common/launch/glsp-server-launcher.js +2 -2
  152. package/lib/common/launch/glsp-server-launcher.js.map +1 -1
  153. package/lib/common/launch/jsonrpc-server-launcher.js +2 -2
  154. package/lib/common/launch/jsonrpc-server-launcher.js.map +1 -1
  155. package/lib/common/operations/compound-operation-handler.d.ts +5 -0
  156. package/lib/common/operations/compound-operation-handler.d.ts.map +1 -1
  157. package/lib/common/operations/compound-operation-handler.js +12 -12
  158. package/lib/common/operations/compound-operation-handler.js.map +1 -1
  159. package/lib/common/operations/create-operation-handler.d.ts +19 -5
  160. package/lib/common/operations/create-operation-handler.d.ts.map +1 -1
  161. package/lib/common/operations/create-operation-handler.js +3 -2
  162. package/lib/common/operations/create-operation-handler.js.map +1 -1
  163. package/lib/common/operations/json-operation-handler.d.ts +94 -0
  164. package/lib/common/operations/json-operation-handler.d.ts.map +1 -0
  165. package/lib/common/operations/json-operation-handler.js +120 -0
  166. package/lib/common/operations/json-operation-handler.js.map +1 -0
  167. package/lib/common/operations/operation-action-handler.d.ts.map +1 -1
  168. package/lib/common/operations/operation-action-handler.js +3 -3
  169. package/lib/common/operations/operation-action-handler.js.map +1 -1
  170. package/lib/common/operations/operation-handler-registry.d.ts +1 -9
  171. package/lib/common/operations/operation-handler-registry.d.ts.map +1 -1
  172. package/lib/common/operations/operation-handler-registry.js +4 -14
  173. package/lib/common/operations/operation-handler-registry.js.map +1 -1
  174. package/lib/common/operations/operation-handler.d.ts +2 -2
  175. package/lib/common/operations/operation-handler.d.ts.map +1 -1
  176. package/lib/common/operations/operation-handler.js +2 -2
  177. package/lib/common/operations/operation-handler.js.map +1 -1
  178. package/lib/{node/launch/socket-server-launcher.spec.d.ts → common/protocol/client-action.d.ts} +17 -3
  179. package/lib/common/protocol/client-action.d.ts.map +1 -0
  180. package/lib/common/protocol/client-action.js +35 -0
  181. package/lib/common/protocol/client-action.js.map +1 -0
  182. package/lib/common/protocol/glsp-server.d.ts +1 -1
  183. package/lib/common/protocol/glsp-server.d.ts.map +1 -1
  184. package/lib/common/protocol/glsp-server.js +9 -11
  185. package/lib/common/protocol/glsp-server.js.map +1 -1
  186. package/lib/common/session/client-session-factory.js +5 -5
  187. package/lib/common/session/client-session-factory.js.map +1 -1
  188. package/lib/common/session/client-session-manager.js +2 -2
  189. package/lib/common/session/client-session-manager.js.map +1 -1
  190. package/lib/common/utils/args-util.js +2 -2
  191. package/lib/common/utils/args-util.js.map +1 -1
  192. package/lib/common/utils/client-options-util.d.ts +3 -0
  193. package/lib/common/utils/client-options-util.d.ts.map +1 -1
  194. package/lib/common/utils/client-options-util.js +5 -15
  195. package/lib/common/utils/client-options-util.js.map +1 -1
  196. package/lib/common/utils/console-logger.d.ts +1 -1
  197. package/lib/common/utils/console-logger.js +3 -3
  198. package/lib/common/utils/console-logger.js.map +1 -1
  199. package/lib/common/utils/logger.d.ts.map +1 -1
  200. package/lib/common/utils/logger.js +5 -4
  201. package/lib/common/utils/logger.js.map +1 -1
  202. package/lib/common/utils/promise-queue.d.ts.map +1 -1
  203. package/lib/common/utils/promise-queue.js +3 -6
  204. package/lib/common/utils/promise-queue.js.map +1 -1
  205. package/lib/common/utils/registry.d.ts +3 -1
  206. package/lib/common/utils/registry.d.ts.map +1 -1
  207. package/lib/common/utils/registry.js +15 -6
  208. package/lib/common/utils/registry.js.map +1 -1
  209. package/lib/node/abstract-json-model-storage.d.ts.map +1 -1
  210. package/lib/node/abstract-json-model-storage.js +10 -4
  211. package/lib/node/abstract-json-model-storage.js.map +1 -1
  212. package/lib/node/gmodel/gmodel-storage.d.ts.map +1 -1
  213. package/lib/node/gmodel/gmodel-storage.js +4 -3
  214. package/lib/node/gmodel/gmodel-storage.js.map +1 -1
  215. package/lib/node/launch/cli-parser.js +1 -1
  216. package/lib/node/launch/cli-parser.js.map +1 -1
  217. package/lib/node/launch/socket-server-launcher.js +2 -2
  218. package/lib/node/launch/socket-server-launcher.js.map +1 -1
  219. package/lib/node/launch/websocket-server-launcher.js +2 -2
  220. package/lib/node/launch/websocket-server-launcher.js.map +1 -1
  221. package/package.json +6 -5
  222. package/src/common/actions/action-dispatcher.spec.ts +3 -2
  223. package/src/common/actions/action-dispatcher.ts +8 -5
  224. package/src/common/actions/client-action-handler.ts +28 -18
  225. package/src/common/actions/global-action-provider.spec.ts +4 -15
  226. package/src/common/actions/global-action-provider.ts +21 -25
  227. package/src/common/command/recording-command.spec.ts +15 -5
  228. package/src/common/command/recording-command.ts +16 -27
  229. package/src/common/di/binding-target.ts +1 -0
  230. package/src/common/di/client-session-module.ts +17 -10
  231. package/src/common/di/diagram-module.ts +31 -70
  232. package/src/common/di/server-module.ts +0 -1
  233. package/src/common/features/clipboard/request-clipboard-data-action-handler.ts +3 -3
  234. package/src/common/features/model/gmodel-serializer.ts +11 -11
  235. package/src/common/features/model/model-state.ts +3 -0
  236. package/src/common/features/model/model-submission-handler.ts +52 -7
  237. package/src/common/features/model/request-model-action-handler.ts +37 -17
  238. package/src/common/features/progress/progress-service.ts +74 -0
  239. package/src/common/features/type-hints/edge-creation-checker.ts +44 -0
  240. package/src/common/features/type-hints/request-check-edge-action-handler.ts +62 -0
  241. package/src/common/{diagram → features/type-hints}/request-type-hints-action-handler.spec.ts +2 -2
  242. package/src/common/{diagram → features/type-hints}/request-type-hints-action-handler.ts +2 -3
  243. package/src/common/gmodel/gmodel-create-edge-operation-handler.ts +3 -3
  244. package/src/common/gmodel/gmodel-create-node-operation-handler.ts +3 -3
  245. package/src/common/gmodel/paste-operation-handler.ts +2 -2
  246. package/src/common/index.ts +3 -1
  247. package/src/common/operations/compound-operation-handler.ts +6 -1
  248. package/src/common/operations/create-operation-handler.ts +22 -5
  249. package/src/common/operations/json-operation-handler.ts +147 -0
  250. package/src/common/operations/operation-action-handler.ts +2 -2
  251. package/src/common/operations/operation-handler-registry.ts +1 -12
  252. package/src/common/operations/operation-handler.ts +2 -2
  253. package/src/common/protocol/client-action.ts +38 -0
  254. package/src/common/protocol/glsp-server.spec.ts +11 -10
  255. package/src/common/protocol/glsp-server.ts +11 -14
  256. package/src/common/session/client-session-factory.spec.ts +2 -2
  257. package/src/common/session/client-session-factory.ts +3 -3
  258. package/src/common/session/client-session-manager.spec.ts +4 -3
  259. package/src/common/utils/args-util.ts +1 -1
  260. package/src/common/utils/client-options-util.ts +8 -0
  261. package/src/common/utils/console-logger.ts +1 -1
  262. package/src/common/utils/logger.ts +2 -1
  263. package/src/common/utils/promise-queue.ts +4 -5
  264. package/src/common/utils/registry.spec.ts +3 -1
  265. package/src/common/utils/registry.ts +8 -3
  266. package/src/node/abstract-json-model-storage.ts +8 -2
  267. package/src/node/gmodel/gmodel-storage.ts +3 -3
  268. package/src/node/launch/cli-parser.ts +1 -1
  269. package/lib/common/actions/action-dispatcher.spec.d.ts +0 -2
  270. package/lib/common/actions/action-dispatcher.spec.d.ts.map +0 -1
  271. package/lib/common/actions/action-dispatcher.spec.js +0 -264
  272. package/lib/common/actions/action-dispatcher.spec.js.map +0 -1
  273. package/lib/common/actions/action-handler-registry.spec.d.ts +0 -2
  274. package/lib/common/actions/action-handler-registry.spec.d.ts.map +0 -1
  275. package/lib/common/actions/action-handler-registry.spec.js +0 -50
  276. package/lib/common/actions/action-handler-registry.spec.js.map +0 -1
  277. package/lib/common/actions/global-action-provider.spec.d.ts +0 -2
  278. package/lib/common/actions/global-action-provider.spec.d.ts.map +0 -1
  279. package/lib/common/actions/global-action-provider.spec.js +0 -70
  280. package/lib/common/actions/global-action-provider.spec.js.map +0 -1
  281. package/lib/common/command/command-stack.spec.d.ts +0 -2
  282. package/lib/common/command/command-stack.spec.d.ts.map +0 -1
  283. package/lib/common/command/command-stack.spec.js +0 -207
  284. package/lib/common/command/command-stack.spec.js.map +0 -1
  285. package/lib/common/command/command.spec.d.ts +0 -2
  286. package/lib/common/command/command.spec.d.ts.map +0 -1
  287. package/lib/common/command/command.spec.js +0 -86
  288. package/lib/common/command/command.spec.js.map +0 -1
  289. package/lib/common/command/recording-command.spec.d.ts.map +0 -1
  290. package/lib/common/command/recording-command.spec.js +0 -62
  291. package/lib/common/command/recording-command.spec.js.map +0 -1
  292. package/lib/common/di/binding-target.spec.d.ts +0 -2
  293. package/lib/common/di/binding-target.spec.d.ts.map +0 -1
  294. package/lib/common/di/binding-target.spec.js +0 -121
  295. package/lib/common/di/binding-target.spec.js.map +0 -1
  296. package/lib/common/di/multi-bindings.spec.d.ts +0 -2
  297. package/lib/common/di/multi-bindings.spec.d.ts.map +0 -1
  298. package/lib/common/di/multi-bindings.spec.js +0 -137
  299. package/lib/common/di/multi-bindings.spec.js.map +0 -1
  300. package/lib/common/diagram/request-type-hints-action-handler.d.ts.map +0 -1
  301. package/lib/common/diagram/request-type-hints-action-handler.js.map +0 -1
  302. package/lib/common/diagram/request-type-hints-action-handler.spec.d.ts +0 -2
  303. package/lib/common/diagram/request-type-hints-action-handler.spec.d.ts.map +0 -1
  304. package/lib/common/diagram/request-type-hints-action-handler.spec.js +0 -57
  305. package/lib/common/diagram/request-type-hints-action-handler.spec.js.map +0 -1
  306. package/lib/common/features/contextactions/context-actions-provider-registry.spec.d.ts +0 -2
  307. package/lib/common/features/contextactions/context-actions-provider-registry.spec.d.ts.map +0 -1
  308. package/lib/common/features/contextactions/context-actions-provider-registry.spec.js +0 -34
  309. package/lib/common/features/contextactions/context-actions-provider-registry.spec.js.map +0 -1
  310. package/lib/common/features/contextactions/request-context-actions-handler.spec.d.ts +0 -2
  311. package/lib/common/features/contextactions/request-context-actions-handler.spec.d.ts.map +0 -1
  312. package/lib/common/features/contextactions/request-context-actions-handler.spec.js +0 -63
  313. package/lib/common/features/contextactions/request-context-actions-handler.spec.js.map +0 -1
  314. package/lib/common/features/contextactions/tool-palette-item-provider.spec.d.ts +0 -2
  315. package/lib/common/features/contextactions/tool-palette-item-provider.spec.d.ts.map +0 -1
  316. package/lib/common/features/contextactions/tool-palette-item-provider.spec.js +0 -48
  317. package/lib/common/features/contextactions/tool-palette-item-provider.spec.js.map +0 -1
  318. package/lib/common/features/directediting/context-edit-validator-registry.spec.d.ts +0 -2
  319. package/lib/common/features/directediting/context-edit-validator-registry.spec.d.ts.map +0 -1
  320. package/lib/common/features/directediting/context-edit-validator-registry.spec.js +0 -44
  321. package/lib/common/features/directediting/context-edit-validator-registry.spec.js.map +0 -1
  322. package/lib/common/features/directediting/request-edit-validation-handler.spec.d.ts +0 -2
  323. package/lib/common/features/directediting/request-edit-validation-handler.spec.d.ts.map +0 -1
  324. package/lib/common/features/directediting/request-edit-validation-handler.spec.js +0 -97
  325. package/lib/common/features/directediting/request-edit-validation-handler.spec.js.map +0 -1
  326. package/lib/common/features/model/gmodel-serializer.spec.d.ts +0 -2
  327. package/lib/common/features/model/gmodel-serializer.spec.d.ts.map +0 -1
  328. package/lib/common/features/model/gmodel-serializer.spec.js +0 -124
  329. package/lib/common/features/model/gmodel-serializer.spec.js.map +0 -1
  330. package/lib/common/operations/operation-handler-registry.spec.d.ts +0 -2
  331. package/lib/common/operations/operation-handler-registry.spec.d.ts.map +0 -1
  332. package/lib/common/operations/operation-handler-registry.spec.js +0 -50
  333. package/lib/common/operations/operation-handler-registry.spec.js.map +0 -1
  334. package/lib/common/protocol/glsp-server.spec.d.ts +0 -2
  335. package/lib/common/protocol/glsp-server.spec.d.ts.map +0 -1
  336. package/lib/common/protocol/glsp-server.spec.js +0 -132
  337. package/lib/common/protocol/glsp-server.spec.js.map +0 -1
  338. package/lib/common/session/client-session-factory.spec.d.ts +0 -2
  339. package/lib/common/session/client-session-factory.spec.d.ts.map +0 -1
  340. package/lib/common/session/client-session-factory.spec.js +0 -56
  341. package/lib/common/session/client-session-factory.spec.js.map +0 -1
  342. package/lib/common/session/client-session-manager.spec.d.ts +0 -2
  343. package/lib/common/session/client-session-manager.spec.d.ts.map +0 -1
  344. package/lib/common/session/client-session-manager.spec.js +0 -74
  345. package/lib/common/session/client-session-manager.spec.js.map +0 -1
  346. package/lib/common/test/mock-util.d.ts +0 -120
  347. package/lib/common/test/mock-util.d.ts.map +0 -1
  348. package/lib/common/test/mock-util.js +0 -216
  349. package/lib/common/test/mock-util.js.map +0 -1
  350. package/lib/common/utils/promise-queue.spec.d.ts +0 -2
  351. package/lib/common/utils/promise-queue.spec.d.ts.map +0 -1
  352. package/lib/common/utils/promise-queue.spec.js +0 -117
  353. package/lib/common/utils/promise-queue.spec.js.map +0 -1
  354. package/lib/common/utils/registry.spec.d.ts +0 -2
  355. package/lib/common/utils/registry.spec.d.ts.map +0 -1
  356. package/lib/common/utils/registry.spec.js +0 -199
  357. package/lib/common/utils/registry.spec.js.map +0 -1
  358. package/lib/node/launch/cli-parser.spec.d.ts +0 -2
  359. package/lib/node/launch/cli-parser.spec.d.ts.map +0 -1
  360. package/lib/node/launch/cli-parser.spec.js +0 -56
  361. package/lib/node/launch/cli-parser.spec.js.map +0 -1
  362. package/lib/node/launch/socket-cli-parser.spec.d.ts +0 -2
  363. package/lib/node/launch/socket-cli-parser.spec.d.ts.map +0 -1
  364. package/lib/node/launch/socket-cli-parser.spec.js +0 -66
  365. package/lib/node/launch/socket-cli-parser.spec.js.map +0 -1
  366. package/lib/node/launch/socket-server-launcher.spec.d.ts.map +0 -1
  367. package/lib/node/launch/socket-server-launcher.spec.js +0 -75
  368. package/lib/node/launch/socket-server-launcher.spec.js.map +0 -1
@@ -13,11 +13,13 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Action, RequestModelAction, ServerMessageAction, ServerStatusAction } from '@eclipse-glsp/protocol';
16
+ import { Action, RequestModelAction, StatusAction } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable } from 'inversify';
18
18
  import { ActionDispatcher } from '../../actions/action-dispatcher';
19
19
  import { ActionHandler } from '../../actions/action-handler';
20
+ import { ClientOptionsUtil } from '../../utils/client-options-util';
20
21
  import { Logger } from '../../utils/logger';
22
+ import { ProgressMonitor, ProgressService } from '../progress/progress-service';
21
23
  import { ModelState } from './model-state';
22
24
  import { ModelSubmissionHandler } from './model-submission-handler';
23
25
  import { SourceModelStorage } from './source-model-storage';
@@ -41,27 +43,45 @@ export class RequestModelActionHandler implements ActionHandler {
41
43
  @inject(ModelSubmissionHandler)
42
44
  protected submissionHandler: ModelSubmissionHandler;
43
45
 
46
+ @inject(ProgressService)
47
+ protected progressService: ProgressService;
48
+
44
49
  async execute(action: RequestModelAction): Promise<Action[]> {
45
50
  this.logger.debug('Execute RequestModelAction:', action);
46
51
  this.modelState.setAll(action.options ?? {});
47
52
 
48
- this.notifyClient('Model loading in progress');
49
- await this.sourceModelStorage.loadSourceModel(action);
50
- // Clear the previous notification.
51
- this.notifyClient();
52
- return this.submissionHandler.submitModel();
53
+ const isReconnecting = ClientOptionsUtil.isReconnecting(action.options);
54
+
55
+ const progress = this.reportModelLoading('Model loading in progress');
56
+
57
+ if (isReconnecting) {
58
+ await this.handleReconnect(action);
59
+ } else {
60
+ await this.sourceModelStorage.loadSourceModel(action);
61
+ }
62
+ this.reportModelLoadingFinished(progress);
63
+
64
+ return this.submissionHandler.submitInitialModel(action);
65
+ }
66
+
67
+ protected async handleReconnect(action: RequestModelAction): Promise<void> {
68
+ const oldModelRoot = this.modelState.root;
69
+ if (oldModelRoot) {
70
+ // decrease revision by one, as each submit will increase it by one;
71
+ // the next save would produce warning that source model was changed otherwise
72
+ this.modelState.root.revision = (this.modelState.root.revision ?? 0) - 1;
73
+ } else {
74
+ await this.sourceModelStorage.loadSourceModel(action);
75
+ }
76
+ }
77
+
78
+ protected reportModelLoading(message: string): ProgressMonitor {
79
+ this.actionDispatcher.dispatch(StatusAction.create(message, { severity: 'INFO' }));
80
+ return this.progressService.start(message);
53
81
  }
54
82
 
55
- /**
56
- * Send a message and status notification with the given message to the client.
57
- * An empty message is an indication for the client to clear previously received notifications.
58
- * @param message The message that should be sent to the client
59
- */
60
- protected notifyClient(message = ''): void {
61
- const severity = message.length > 0 ? 'INFO' : 'NONE';
62
- this.actionDispatcher.dispatchAll(
63
- ServerMessageAction.create(message, { severity }),
64
- ServerStatusAction.create(message, { severity })
65
- );
83
+ protected reportModelLoadingFinished(monitor: ProgressMonitor): void {
84
+ this.actionDispatcher.dispatch(StatusAction.create('', { severity: 'NONE' }));
85
+ monitor.end();
66
86
  }
67
87
  }
@@ -0,0 +1,74 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2023 EclipseSource 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 { EndProgressAction, StartProgressAction, UpdateProgressAction } from '@eclipse-glsp/protocol';
17
+ import { inject, injectable } from 'inversify';
18
+ import * as uuid from 'uuid';
19
+ import { ActionDispatcher } from '../../actions/action-dispatcher';
20
+
21
+ export const ProgressService = Symbol('ProgressService');
22
+
23
+ /**
24
+ * Service for starting and monitoring progress reporting to the client.
25
+ */
26
+ export interface ProgressService {
27
+ /**
28
+ * Start a progress reporting.
29
+ * @param title The title shown in the UI for the progress reporting.
30
+ * @param options Additional optional options for the progress reporting.
31
+ * @returns a monitor to update and end the progress reporting later.
32
+ */
33
+ start(title: string, options?: ProgressOptions): ProgressMonitor;
34
+ }
35
+
36
+ /**
37
+ * Optional progress reporting options.
38
+ */
39
+ export interface ProgressOptions {
40
+ /** A message shown in the UI. */
41
+ message?: string;
42
+ /* The percentage (value range: 0 to 100) to show in the progress reporting. */
43
+ percentage?: number;
44
+ }
45
+
46
+ /**
47
+ * The monitor of a progress reporting, which can be used to update and end the reporting.
48
+ */
49
+ export interface ProgressMonitor {
50
+ /**
51
+ * Updates an ongoing progress reporting.
52
+ * @param options Updated message and/or percentage (value range: 0 to 100).
53
+ */
54
+ update(options: { message?: string; percentage?: number }): void;
55
+ /**
56
+ * Ends an ongoing progress reporting.
57
+ */
58
+ end(): void;
59
+ }
60
+
61
+ @injectable()
62
+ export class DefaultProgressService implements ProgressService {
63
+ @inject(ActionDispatcher)
64
+ protected actionDispatcher: ActionDispatcher;
65
+
66
+ start(title: string, options?: ProgressOptions): ProgressMonitor {
67
+ const progressId = uuid.v4();
68
+ this.actionDispatcher.dispatch(StartProgressAction.create({ progressId, title, ...options }));
69
+ return {
70
+ update: updateOptions => this.actionDispatcher.dispatch(UpdateProgressAction.create(progressId, updateOptions)),
71
+ end: () => this.actionDispatcher.dispatch(EndProgressAction.create(progressId))
72
+ };
73
+ }
74
+ }
@@ -0,0 +1,44 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2023 EclipseSource 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
+
17
+ import { GModelElement } from '@eclipse-glsp/graph';
18
+
19
+ /**
20
+ * Optional service used to check the validity of an edge being created. Used in combination with `dynamic`
21
+ * `EdgeTypeHints`.
22
+ * A dynamic edge type hint is used for cases where a plain list of allowed source and target element ids is not enough
23
+ * to determine wether an edge being created is valid. In this cases the client will query the server to determine wether the edge
24
+ * is valid. The `EdgeCreationChecker` then checks the given edge information and returns wether the edge being created is
25
+ * valid.
26
+ */
27
+ export interface EdgeCreationChecker {
28
+ /**
29
+ * Checks wether the given source element for an edge being created is valid i.e. if the
30
+ * given source is and allowed source element for the given edge type.
31
+ *
32
+ * @returns `true` if the edge source is valid, `false` otherwise
33
+ */
34
+ isValidSource(edgeType: string, sourceElement: GModelElement): boolean;
35
+
36
+ /**
37
+ * Checks wether the given information for an edge being created is valid i.e. if the
38
+ * given target is an allowed target for the given source and edge type.
39
+ *
40
+ * @return `true` if the edge target is valid, `false` otherwise
41
+ */
42
+ isValidTarget(edgeType: string, sourceElement: GModelElement, targetElement: GModelElement): boolean;
43
+ }
44
+ export const EdgeCreationChecker = Symbol('EdgeCreationChecker');
@@ -0,0 +1,62 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2023 EclipseSource 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 { Action, CheckEdgeResultAction, MaybePromise, RequestCheckEdgeAction } from '@eclipse-glsp/protocol';
17
+ import { inject, injectable, optional } from 'inversify';
18
+ import { ActionHandler } from '../../actions/action-handler';
19
+ import { DiagramConfiguration } from '../../diagram/diagram-configuration';
20
+ import { GLSPServerError, getOrThrow } from '../../utils/glsp-server-error';
21
+ import { ModelState } from '../model/model-state';
22
+ import { EdgeCreationChecker } from './edge-creation-checker';
23
+
24
+ @injectable()
25
+ export class RequestCheckEdgeActionHandler implements ActionHandler {
26
+ @inject(ModelState)
27
+ protected modelState: ModelState;
28
+
29
+ @inject(DiagramConfiguration)
30
+ protected diagramConfiguration: DiagramConfiguration;
31
+
32
+ @inject(EdgeCreationChecker)
33
+ @optional()
34
+ protected edgeCreationChecker?: EdgeCreationChecker;
35
+
36
+ readonly actionKinds: string[] = [RequestCheckEdgeAction.KIND];
37
+
38
+ execute(action: RequestCheckEdgeAction): MaybePromise<Action[]> {
39
+ const hasDynamicHint = this.diagramConfiguration.edgeTypeHints.some(hint => hint.elementTypeId === action.edgeType && hint.dynamic);
40
+ const { edgeType, sourceElementId, targetElementId } = action;
41
+ const isValid = this.edgeCreationChecker && hasDynamicHint ? this.validate(action) : true;
42
+
43
+ return [CheckEdgeResultAction.create({ edgeType, isValid, sourceElementId, targetElementId })];
44
+ }
45
+
46
+ protected validate(action: RequestCheckEdgeAction): boolean {
47
+ const sourceElement = getOrThrow(
48
+ this.modelState.index.get(action.sourceElementId),
49
+ 'Invalid `RequestCheckEdgeTargetAction`!. Could not find a source element with id: ' + action.sourceElementId
50
+ );
51
+ const targetElement = action.targetElementId ? this.modelState.index.get(action.targetElementId) : undefined;
52
+
53
+ if (action.targetElementId && !targetElement) {
54
+ throw new GLSPServerError(
55
+ 'Invalid `RequestCheckEdgeTargetAction`! Could not find a target element with id: ' + action.targetElementId
56
+ );
57
+ }
58
+ return targetElement
59
+ ? this.edgeCreationChecker!.isValidTarget(action.edgeType, sourceElement, targetElement)
60
+ : this.edgeCreationChecker!.isValidSource(action.edgeType, sourceElement);
61
+ }
62
+ }
@@ -16,8 +16,8 @@
16
16
  import { EdgeTypeHint, RequestTypeHintsAction, SetTypeHintsAction, ShapeTypeHint } from '@eclipse-glsp/protocol';
17
17
  import { expect } from 'chai';
18
18
  import { Container, ContainerModule } from 'inversify';
19
- import * as mock from '../test/mock-util';
20
- import { DiagramConfiguration } from './diagram-configuration';
19
+ import { DiagramConfiguration } from '../../diagram/diagram-configuration';
20
+ import * as mock from '../../test/mock-util';
21
21
  import { RequestTypeHintsActionHandler } from './request-type-hints-action-handler';
22
22
 
23
23
  describe('test RequestTypeHintsActionHandler', () => {
@@ -15,13 +15,12 @@
15
15
  ********************************************************************************/
16
16
  import { Action, MaybePromise, RequestTypeHintsAction, SetTypeHintsAction } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable } from 'inversify';
18
- import { ActionHandler } from '../actions/action-handler';
19
- import { DiagramConfiguration } from './diagram-configuration';
18
+ import { ActionHandler } from '../../actions/action-handler';
19
+ import { DiagramConfiguration } from '../../diagram/diagram-configuration';
20
20
 
21
21
  @injectable()
22
22
  export class RequestTypeHintsActionHandler implements ActionHandler {
23
23
  @inject(DiagramConfiguration) protected diagramConfiguration: DiagramConfiguration;
24
- static KINDS = [RequestTypeHintsAction.KIND];
25
24
 
26
25
  execute(action: RequestTypeHintsAction): MaybePromise<Action[]> {
27
26
  return [
@@ -19,7 +19,7 @@ import { GNode } from '@eclipse-glsp/graph/lib/gnode';
19
19
  import { CreateEdgeOperation, MaybePromise, TriggerEdgeCreationAction } from '@eclipse-glsp/protocol';
20
20
  import { injectable } from 'inversify';
21
21
  import { Command } from '../command/command';
22
- import { CreateOperationHandler, CreateOperationKind } from '../operations/create-operation-handler';
22
+ import { CreateEdgeOperationHandler } from '../operations/create-operation-handler';
23
23
  import { GModelOperationHandler } from './gmodel-operation-handler';
24
24
 
25
25
  /**
@@ -28,8 +28,8 @@ import { GModelOperationHandler } from './gmodel-operation-handler';
28
28
  * (i.e. all operation handlers directly modify the graphical model).
29
29
  */
30
30
  @injectable()
31
- export abstract class GModelCreateEdgeOperationHandler extends GModelOperationHandler implements CreateOperationHandler {
32
- override readonly operationType: CreateOperationKind = CreateEdgeOperation.KIND;
31
+ export abstract class GModelCreateEdgeOperationHandler extends GModelOperationHandler implements CreateEdgeOperationHandler {
32
+ override readonly operationType = CreateEdgeOperation.KIND;
33
33
  abstract override label: string;
34
34
  abstract elementTypeIds: string[];
35
35
 
@@ -19,7 +19,7 @@ import { CreateNodeOperation, MaybePromise, Point, SelectAction, TriggerNodeCrea
19
19
  import { inject, injectable } from 'inversify';
20
20
  import { ActionDispatcher } from '../actions/action-dispatcher';
21
21
  import { Command } from '../command/command';
22
- import { CreateOperationHandler, CreateOperationKind } from '../operations/create-operation-handler';
22
+ import { CreateNodeOperationHandler } from '../operations/create-operation-handler';
23
23
  import { getRelativeLocation } from '../utils/layout-util';
24
24
  import { GModelOperationHandler } from './gmodel-operation-handler';
25
25
 
@@ -29,7 +29,7 @@ import { GModelOperationHandler } from './gmodel-operation-handler';
29
29
  * (i.e. all operation handlers directly modify the graphical model).
30
30
  */
31
31
  @injectable()
32
- export abstract class GModelCreateNodeOperationHandler extends GModelOperationHandler implements CreateOperationHandler {
32
+ export abstract class GModelCreateNodeOperationHandler extends GModelOperationHandler implements CreateNodeOperationHandler {
33
33
  @inject(ActionDispatcher)
34
34
  protected actionDispatcher: ActionDispatcher;
35
35
 
@@ -37,7 +37,7 @@ export abstract class GModelCreateNodeOperationHandler extends GModelOperationHa
37
37
 
38
38
  abstract override label: string;
39
39
 
40
- override operationType: CreateOperationKind = CreateNodeOperation.KIND;
40
+ override readonly operationType = CreateNodeOperation.KIND;
41
41
 
42
42
  override createCommand(operation: CreateNodeOperation): MaybePromise<Command | undefined> {
43
43
  return this.commandOf(() => this.executeCreation(operation));
@@ -14,7 +14,7 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { GBoundsAware, GEdge, GModelElement, isGBoundsAware } from '@eclipse-glsp/graph';
17
- import { EditorContext, MaybePromise, PasteOperation, Point, SModelElementSchema } from '@eclipse-glsp/protocol';
17
+ import { EditorContext, GModelElementSchema, MaybePromise, PasteOperation, Point } from '@eclipse-glsp/protocol';
18
18
  import { inject, injectable } from 'inversify';
19
19
  import * as uuid from 'uuid';
20
20
  import { Command } from '../command/command';
@@ -38,7 +38,7 @@ export class GModelPasteOperationHandler extends GModelOperationHandler {
38
38
  }
39
39
 
40
40
  protected getCopiedElements(jsonString: string): GModelElement[] {
41
- const schemas: SModelElementSchema[] = JSON.parse(jsonString);
41
+ const schemas: GModelElementSchema[] = JSON.parse(jsonString);
42
42
  return schemas.map(schema => this.modelSerializer.createElement(schema, this.modelState.root));
43
43
  }
44
44
 
@@ -33,7 +33,6 @@ export * from './di/multi-binding';
33
33
  export * from './di/server-module';
34
34
  export * from './di/service-identifiers';
35
35
  export * from './diagram/diagram-configuration';
36
- export * from './diagram/request-type-hints-action-handler';
37
36
  export * from './features/clipboard/request-clipboard-data-action-handler';
38
37
  export * from './features/contextactions/command-palette-action-provider';
39
38
  export * from './features/contextactions/context-actions-provider';
@@ -65,12 +64,15 @@ export * from './features/navigation/request-navigation-targets-action-handler';
65
64
  export * from './features/navigation/resolve-navigation-targets-action-handler';
66
65
  export * from './features/popup/popup-model-factory';
67
66
  export * from './features/popup/request-popup-model-action-handler';
67
+ export * from './features/type-hints/edge-creation-checker';
68
+ export * from './features/type-hints/request-type-hints-action-handler';
68
69
  export * from './features/validation/model-validator';
69
70
  export * from './features/validation/request-markers-handler';
70
71
  export * from './gmodel/index';
71
72
  export * from './launch/glsp-server-launcher';
72
73
  export * from './operations/compound-operation-handler';
73
74
  export * from './operations/create-operation-handler';
75
+ export * from './operations/json-operation-handler';
74
76
  export * from './operations/operation-action-handler';
75
77
  export * from './operations/operation-handler';
76
78
  export * from './operations/operation-handler-registry';
@@ -19,6 +19,11 @@ import { Command, CompoundCommand } from '../command/command';
19
19
  import { OperationHandler } from './operation-handler';
20
20
  import { OperationHandlerRegistry } from './operation-handler-registry';
21
21
 
22
+ /**
23
+ * Generic {@link OperationHandler} from {@link CompoundOperations}.
24
+ * Retrieves the corresponding execution commands for the list of (sub) operations
25
+ * and constructs a {@link CompoundCommand} for them.
26
+ */
22
27
  @injectable()
23
28
  export class CompoundOperationHandler extends OperationHandler {
24
29
  @inject(OperationHandlerRegistry)
@@ -27,7 +32,7 @@ export class CompoundOperationHandler extends OperationHandler {
27
32
  operationType = CompoundOperation.KIND;
28
33
 
29
34
  async createCommand(operation: CompoundOperation): Promise<Command | undefined> {
30
- const maybeCommands = operation.operationList.map(op => this.operationHandlerRegistry.getExecutableCommand(op));
35
+ const maybeCommands = operation.operationList.map(op => this.operationHandlerRegistry.getOperationHandler(op)?.execute(op));
31
36
  const commands: Command[] = [];
32
37
 
33
38
  for await (const command of maybeCommands) {
@@ -19,21 +19,37 @@ import {
19
19
  hasArrayProp,
20
20
  hasFunctionProp,
21
21
  hasStringProp,
22
+ MaybePromise,
22
23
  TriggerEdgeCreationAction,
23
24
  TriggerNodeCreationAction
24
25
  } from '@eclipse-glsp/protocol';
26
+ import { Command } from '../command/command';
25
27
  import { OperationHandler } from './operation-handler';
26
28
 
27
29
  /**
28
- * A special {@link OperationHandler} that is responsible for the handling of {@link CreateOperation}s. Depending on its
30
+ * A special {@link OperationHandler} that is responsible for the handling of (a subset of) {@link CreateEdgeOperation}s. Depending on its
29
31
  * operation type the triggered actions are {@link TriggerNodeCreationAction} or {@link TriggerEdgeCreationAction}s.
30
32
  */
31
- export interface CreateOperationHandler extends OperationHandler {
33
+ export interface CreateEdgeOperationHandler extends OperationHandler {
34
+ label: string;
35
+ elementTypeIds: string[];
36
+ operationType: typeof CreateEdgeOperation.KIND;
37
+ getTriggerActions(): TriggerEdgeCreationAction[];
38
+ createCommand(operation: CreateEdgeOperation): MaybePromise<Command | undefined>;
39
+ }
40
+
41
+ export interface CreateNodeOperationHandler extends OperationHandler {
32
42
  readonly label: string;
33
43
  elementTypeIds: string[];
34
- operationType: CreateOperationKind;
35
- getTriggerActions(): (TriggerEdgeCreationAction | TriggerNodeCreationAction)[];
44
+ operationType: typeof CreateNodeOperation.KIND;
45
+ getTriggerActions(): TriggerNodeCreationAction[];
46
+ createCommand(operation: CreateNodeOperation): MaybePromise<Command | undefined>;
36
47
  }
48
+ /**
49
+ * A special {@link OperationHandler} that is responsible for the handling of a node or edge creation operation. Depending on its
50
+ * operation type the triggered actions are {@link TriggerNodeCreationAction} or {@link TriggerEdgeCreationAction}s.
51
+ */
52
+ export type CreateOperationHandler = CreateNodeOperationHandler | CreateEdgeOperationHandler;
37
53
 
38
54
  export type CreateOperationKind = typeof CreateNodeOperation.KIND | typeof CreateEdgeOperation.KIND;
39
55
 
@@ -41,9 +57,10 @@ export namespace CreateOperationHandler {
41
57
  export function is(object: unknown): object is CreateOperationHandler {
42
58
  return (
43
59
  object instanceof OperationHandler &&
60
+ hasStringProp(object, 'operationType') &&
44
61
  hasStringProp(object, 'label') &&
45
62
  hasArrayProp(object, 'elementTypeIds') &&
46
- hasFunctionProp(object, 'getTriggerActions')
63
+ hasFunctionProp(object, 'getTriggerActions', true)
47
64
  );
48
65
  }
49
66
  }
@@ -0,0 +1,147 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2023 EclipseSource 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 } from '@eclipse-glsp/graph';
17
+ import {
18
+ AnyObject,
19
+ CreateEdgeOperation,
20
+ CreateNodeOperation,
21
+ MaybePromise,
22
+ Point,
23
+ TriggerEdgeCreationAction,
24
+ TriggerNodeCreationAction,
25
+ hasFunctionProp,
26
+ hasObjectProp
27
+ } from '@eclipse-glsp/protocol';
28
+ import { injectable } from 'inversify';
29
+ import { Command } from '../command/command';
30
+ import { AbstractRecordingCommand } from '../command/recording-command';
31
+ import { ModelState } from '../features/model/model-state';
32
+ import { getRelativeLocation } from '../utils/layout-util';
33
+ import { CreateEdgeOperationHandler, CreateNodeOperationHandler } from './create-operation-handler';
34
+ import { OperationHandler } from './operation-handler';
35
+
36
+ /**
37
+ * Helper interface for {@link ModelState} implementations of diagram languages that use a (serializable) JSON-based source model.
38
+ * Has to be implemented in order to reuse the {@link JsonOperationHandler} API.
39
+ */
40
+ export interface JsonModelState<JsonObject extends AnyObject = AnyObject> extends ModelState {
41
+ readonly sourceModel: JsonObject;
42
+ updateSourceModel(sourceModel: JsonObject): void;
43
+ }
44
+
45
+ export namespace JsonModelState {
46
+ export function is(modelState: ModelState): modelState is JsonModelState {
47
+ return hasObjectProp(modelState, 'sourceModel') && hasFunctionProp(modelState, 'updateSourceModel');
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Simple base implementation of {@link AbstractRecordingCommand} that allows recording of changes made
53
+ * to the `sourceModel` of the given {@link JsonModelState} during the given `doExecute` function
54
+ */
55
+ export class JsonRecordingCommand<JsonObject extends AnyObject = AnyObject> extends AbstractRecordingCommand<JsonObject> {
56
+ constructor(protected modelState: JsonModelState<JsonObject>, protected doExecute: () => MaybePromise<void>) {
57
+ super();
58
+ }
59
+
60
+ protected override getJsonObject(): MaybePromise<JsonObject> {
61
+ return this.modelState.sourceModel;
62
+ }
63
+
64
+ protected override postChange(newModel: JsonObject): MaybePromise<void> {
65
+ this.modelState.updateSourceModel(newModel);
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Reusable {@link OperationHandler} base implementation for diagram languages that use a (serializable) JSON-based source model.
71
+ * To use this class (or its subclasses) the injected {@link ModelState} has to implement the {@link JsonModelState} interface.
72
+ *
73
+ */
74
+ @injectable()
75
+ export abstract class JsonOperationHandler extends OperationHandler {
76
+ protected commandOf(runnable: () => void): Command {
77
+ if (!JsonModelState.is(this.modelState)) {
78
+ throw new Error('Cannot create command. The underlying model state does not implement the `JsonModelState` interface');
79
+ }
80
+ return new JsonRecordingCommand(this.modelState, runnable);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Reusable {@link CreateNodeOperationHandler} base implementation for diagram languages that use a (serializable) JSON-based source model.
86
+ */
87
+ @injectable()
88
+ export abstract class JsonCreateNodeOperationHandler extends JsonOperationHandler implements CreateNodeOperationHandler {
89
+ abstract elementTypeIds: string[];
90
+ abstract override label: string;
91
+ override readonly operationType = CreateNodeOperation.KIND;
92
+
93
+ abstract override createCommand(operation: CreateNodeOperation): MaybePromise<Command | undefined>;
94
+
95
+ getTriggerActions(): TriggerNodeCreationAction[] {
96
+ return this.elementTypeIds.map(typeId => TriggerNodeCreationAction.create(typeId));
97
+ }
98
+
99
+ /**
100
+ * Return the GModelElement that will contain the newly created node. It is usually
101
+ * the target element ({@link CreateNodeOperation.containerId}), but could also
102
+ * be e.g. an intermediate compartment, or even a different Node.
103
+ *
104
+ * @param operation
105
+ * @return the GModelElement that will contain the newly created node.
106
+ */
107
+ getContainer(operation: CreateNodeOperation): GModelElement | undefined {
108
+ const index = this.modelState.index;
109
+ return operation.containerId ? index.get(operation.containerId) : undefined;
110
+ }
111
+
112
+ getLocation(operation: CreateNodeOperation): Point | undefined {
113
+ return operation.location;
114
+ }
115
+
116
+ /**
117
+ * Retrieves the diagram absolute location and the target container from the given {@link CreateNodeOperation}
118
+ * and converts the absolute location to coordinates relative to the given container.
119
+ * Relative coordinates can only be retrieved if the given container element is part of
120
+ * a hierarchy of {@link GBoundsAware} elements. This means each (recursive) parent element need to
121
+ * implement {@link GBoundsAware}. If that is not the case this method returns `undefined`.
122
+ * @param absoluteLocation The diagram absolute position.
123
+ * @param container The container element.
124
+ * @returns The relative position or `undefined`.
125
+ */
126
+ getRelativeLocation(operation: CreateNodeOperation): Point | undefined {
127
+ const container = this.getContainer(operation) ?? this.modelState.root;
128
+ const absoluteLocation = this.getLocation(operation) ?? Point.ORIGIN;
129
+ return getRelativeLocation(absoluteLocation, container);
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Reusable {@link CreateEdgeOperationHandler} base implementation for diagram languages that use a (serializable) JSON-based source model.
135
+ */
136
+ @injectable()
137
+ export abstract class JsonCreateEdgeOperationHandler extends JsonOperationHandler implements CreateEdgeOperationHandler {
138
+ abstract elementTypeIds: string[];
139
+ abstract override label: string;
140
+ override readonly operationType = CreateEdgeOperation.KIND;
141
+
142
+ abstract override createCommand(operation: CreateEdgeOperation): MaybePromise<Command | undefined>;
143
+
144
+ getTriggerActions(): TriggerEdgeCreationAction[] {
145
+ return this.elementTypeIds.map(typeId => TriggerEdgeCreationAction.create(typeId));
146
+ }
147
+ }
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Action, MaybePromise, Operation, ServerMessageAction } from '@eclipse-glsp/protocol';
16
+ import { Action, MaybePromise, MessageAction, Operation } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable } from 'inversify';
18
18
  import { ActionHandler } from '../actions/action-handler';
19
19
  import { Command } from '../command/command';
@@ -47,7 +47,7 @@ export class OperationActionHandler implements ActionHandler {
47
47
  }
48
48
  if (this.modelState.isReadonly) {
49
49
  return [
50
- ServerMessageAction.create(`Server is in readonly-mode! Could not execute operation: ${action.kind}`, {
50
+ MessageAction.create(`Server is in readonly-mode! Could not execute operation: ${action.kind}`, {
51
51
  severity: 'WARNING'
52
52
  })
53
53
  ];
@@ -13,9 +13,8 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Args, CreateOperation, MaybePromise, Operation } from '@eclipse-glsp/protocol';
16
+ import { Args, CreateOperation, Operation } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable, optional } from 'inversify';
18
- import { Command } from '../command/command';
19
18
  import { ClientSessionInitializer } from '../session/client-session-initializer';
20
19
  import { Registry } from '../utils/registry';
21
20
  import { CreateOperationHandler } from './create-operation-handler';
@@ -35,16 +34,6 @@ export class OperationHandlerRegistry extends Registry<string, OperationHandler>
35
34
  getOperationHandler(operation: Operation): OperationHandler | undefined {
36
35
  return CreateOperation.is(operation) ? this.get(`${operation.kind}_${operation.elementTypeId}`) : this.get(operation.kind);
37
36
  }
38
-
39
- /**
40
- * Returns the matching command for the given operation.
41
- *
42
- * @param operation operation
43
- * @return the matching command for the given operation
44
- */
45
- getExecutableCommand(operation: Operation): MaybePromise<Command | undefined> {
46
- return this.getOperationHandler(operation)?.createCommand(operation);
47
- }
48
37
  }
49
38
 
50
39
  @injectable()