Skip to content

Commit 6db8ac8

Browse files
Add ghost elements to tool palette items through trigger actions (#65)
* Add ghost elements to tool palette items through trigger actions Relates to eclipse-glsp/glsp#1159 * PR Review: Add easier hooks for customization * Update yarn lock --------- Co-authored-by: Tobias Ortmayr <[email protected]>
1 parent 1a0997e commit 6db8ac8

File tree

6 files changed

+63
-19
lines changed

6 files changed

+63
-19
lines changed

examples/workflow-server/src/common/handler/create-activity-node-handler.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
1515
********************************************************************************/
16-
import { CreateNodeOperation, GNode, Point } from '@eclipse-glsp/server';
16+
import { CreateNodeOperation, GNode, GhostElement, Point } from '@eclipse-glsp/server';
1717
import { injectable } from 'inversify';
1818
import { ActivityNode, ActivityNodeBuilder } from '../graph-extension';
1919
import { ModelTypes } from '../util/model-types';
@@ -25,10 +25,14 @@ export abstract class CreateActivityNodeHandler extends CreateWorkflowNodeOperat
2525
return this.builder(relativeLocation).build();
2626
}
2727

28-
protected builder(point: Point | undefined): ActivityNodeBuilder {
28+
protected builder(point: Point = Point.ORIGIN, elementTypeId = this.elementTypeIds[0]): ActivityNodeBuilder {
2929
return ActivityNode.builder()
30-
.position(point ?? Point.ORIGIN)
31-
.type(this.elementTypeIds[0])
32-
.nodeType(ModelTypes.toNodeType(this.elementTypeIds[0]));
30+
.position(point)
31+
.type(elementTypeId)
32+
.nodeType(ModelTypes.toNodeType(elementTypeId));
33+
}
34+
35+
override createTriggerGhostElement(elementTypeId: string): GhostElement | undefined {
36+
return { template: this.serializer.createSchema(this.builder(undefined, elementTypeId).build()) };
3337
}
3438
}

examples/workflow-server/src/common/handler/create-category-handler.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
1515
********************************************************************************/
16-
import { ArgsUtil, CreateNodeOperation, GNode, Point } from '@eclipse-glsp/server';
16+
import { ArgsUtil, CreateNodeOperation, GNode, GhostElement, Point } from '@eclipse-glsp/server';
1717
import { Category, CategoryNodeBuilder } from '../graph-extension';
1818
import { ModelTypes } from '../util/model-types';
1919
import { CreateWorkflowNodeOperationHandler } from './create-workflow-node-operation-handler';
@@ -26,12 +26,16 @@ export class CreateCategoryHandler extends CreateWorkflowNodeOperationHandler {
2626
return this.builder(relativeLocation).build();
2727
}
2828

29-
protected builder(point: Point | undefined): CategoryNodeBuilder {
29+
protected builder(point: Point = Point.ORIGIN, elementTypeId = this.elementTypeIds[0]): CategoryNodeBuilder {
3030
return Category.builder()
31-
.type(this.elementTypeIds[0])
32-
.position(point ?? Point.ORIGIN)
31+
.type(elementTypeId)
32+
.position(point)
3333
.name(this.label.replace(' ', '') + this.modelState.index.getAllByClass(Category).length)
3434
.addArgs(ArgsUtil.cornerRadius(5))
3535
.children();
3636
}
37+
38+
override createTriggerGhostElement(elementTypeId: string): GhostElement | undefined {
39+
return { template: this.serializer.createSchema(this.builder(undefined, elementTypeId).build()), dynamic: true };
40+
}
3741
}

examples/workflow-server/src/common/handler/create-task-handler.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
1515
********************************************************************************/
16-
import { Point } from '@eclipse-glsp/protocol';
16+
import { GhostElement, Point } from '@eclipse-glsp/protocol';
1717
import { CreateNodeOperation, GNode } from '@eclipse-glsp/server';
1818
import { injectable } from 'inversify';
1919
import { TaskNode, TaskNodeBuilder } from '../graph-extension';
@@ -26,12 +26,16 @@ export abstract class CreateTaskHandler extends CreateWorkflowNodeOperationHandl
2626
return this.builder(relativeLocation).build();
2727
}
2828

29-
protected builder(point: Point | undefined): TaskNodeBuilder {
29+
protected builder(point: Point = Point.ORIGIN, elementTypeId = this.elementTypeIds[0]): TaskNodeBuilder {
3030
return TaskNode.builder()
3131
.position(point ?? Point.ORIGIN)
3232
.name(this.label.replace(' ', '') + this.modelState.index.getAllByClass(TaskNode).length)
33-
.type(this.elementTypeIds[0])
34-
.taskType(ModelTypes.toNodeType(this.elementTypeIds[0]))
33+
.type(elementTypeId)
34+
.taskType(ModelTypes.toNodeType(elementTypeId))
3535
.children();
3636
}
37+
38+
override createTriggerGhostElement(elementTypeId: string): GhostElement | undefined {
39+
return { template: this.serializer.createSchema(this.builder(undefined, elementTypeId).build()), dynamic: true };
40+
}
3741
}

packages/server/src/common/gmodel/gmodel-create-node-operation-handler.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
********************************************************************************/
1616

1717
import { GModelElement, GNode } from '@eclipse-glsp/graph';
18-
import { CreateNodeOperation, MaybePromise, Point, SelectAction, TriggerNodeCreationAction } from '@eclipse-glsp/protocol';
18+
import {
19+
Args, CreateNodeOperation, GhostElement, MaybePromise, Point, SelectAction,
20+
TriggerNodeCreationAction
21+
} from '@eclipse-glsp/protocol';
1922
import { inject, injectable } from 'inversify';
2023
import { ActionDispatcher } from '../actions/action-dispatcher';
2124
import { Command } from '../command/command';
@@ -55,7 +58,20 @@ export abstract class GModelCreateNodeOperationHandler extends GModelOperationHa
5558
}
5659

5760
getTriggerActions(): TriggerNodeCreationAction[] {
58-
return this.elementTypeIds.map(typeId => TriggerNodeCreationAction.create(typeId));
61+
return this.elementTypeIds.map(elementTypeId => this.createTriggerNodeCreationAction(elementTypeId));
62+
}
63+
64+
protected createTriggerNodeCreationAction(elementTypeId: string): TriggerNodeCreationAction {
65+
return TriggerNodeCreationAction.create(elementTypeId,
66+
{ ghostElement: this.createTriggerGhostElement(elementTypeId), args: this.createTriggerArgs(elementTypeId) } );
67+
}
68+
69+
protected createTriggerGhostElement(elementTypeId: string): GhostElement | undefined {
70+
return undefined;
71+
}
72+
73+
protected createTriggerArgs(elementTypeId: string): Args | undefined {
74+
return undefined;
5975
}
6076

6177
/**

packages/server/src/common/operations/json-operation-handler.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
import { GModelElement } from '@eclipse-glsp/graph';
1717
import {
1818
AnyObject,
19+
Args,
1920
CreateEdgeOperation,
2021
CreateNodeOperation,
22+
GhostElement,
2123
MaybePromise,
2224
Point,
2325
TriggerEdgeCreationAction,
@@ -93,7 +95,20 @@ export abstract class JsonCreateNodeOperationHandler extends JsonOperationHandle
9395
abstract override createCommand(operation: CreateNodeOperation): MaybePromise<Command | undefined>;
9496

9597
getTriggerActions(): TriggerNodeCreationAction[] {
96-
return this.elementTypeIds.map(typeId => TriggerNodeCreationAction.create(typeId));
98+
return this.elementTypeIds.map(elementTypeId => this.createTriggerNodeCreationAction(elementTypeId));
99+
}
100+
101+
protected createTriggerNodeCreationAction(elementTypeId: string): TriggerNodeCreationAction {
102+
return TriggerNodeCreationAction.create(elementTypeId,
103+
{ ghostElement: this.createTriggerGhostElement(elementTypeId), args: this.createTriggerArgs(elementTypeId) } );
104+
}
105+
106+
protected createTriggerGhostElement(elementTypeId: string): GhostElement | undefined {
107+
return undefined;
108+
}
109+
110+
protected createTriggerArgs(elementTypeId: string): Args | undefined {
111+
return undefined;
97112
}
98113

99114
/**

yarn.lock

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,9 @@
305305
prettier-plugin-packagejson "~2.4.6"
306306

307307
"@eclipse-glsp/protocol@next":
308-
version "2.1.0-alpha.290"
309-
resolved "https://registry.yarnpkg.com/@eclipse-glsp/protocol/-/protocol-2.1.0-alpha.290.tgz#0b874cb344e5b741f2a4be43a824121f2913aab6"
310-
integrity sha512-e49InCT4rgW33wY7Y15RA5jvC34qHdMfxIE/vmxZQApOQEdmdHw7fg8CtJ4hXDVeSXOuUN0On5InaMIpg07xKQ==
308+
version "2.1.0-next.297"
309+
resolved "https://registry.yarnpkg.com/@eclipse-glsp/protocol/-/protocol-2.1.0-next.297.tgz#4d178d5286c44b293b58b614fd84d0a0653052a6"
310+
integrity sha512-WmV/ZAHusldwrXFof5oF68peBo0EpmVAb0N/v7LeYaTUiwnz4eFARm/p0KxL2QlcPBuKgLvi0xgGDzDGvbeNcw==
311311
dependencies:
312312
sprotty-protocol "0.15.0-next.044bba2.13"
313313
uuid "7.0.3"
@@ -7563,6 +7563,7 @@ [email protected]:
75637563
integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
75647564

75657565
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
7566+
name wrap-ansi-cjs
75667567
version "7.0.0"
75677568
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
75687569
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==

0 commit comments

Comments
 (0)