Skip to content

Commit 9e8a54f

Browse files
committed
[1587] Display action parameters as border nodes
Bug: #1587 Signed-off-by: Axel RICHARD <axel.richard@obeo.fr>
1 parent bf89b78 commit 9e8a54f

37 files changed

Lines changed: 713 additions & 147 deletions

File tree

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
- https://github.com/eclipse-syson/syson/issues/1581[#1581] [diagrams] Display inherited `PortUsages` as graphical border nodes in diagrams.
2424
- https://github.com/eclipse-syson/syson/issues/1581[#1581] [diagrams] Redefine inherited `PortUsages` when connected as graphical border nodes.
2525
- https://github.com/eclipse-syson/syson/issues/1589[#1589] [explorer] Add a filter to hide expose elements in `ViewUsage`.
26+
- https://github.com/eclipse-syson/syson/issues/1587[#1587] [diagrams] Handle `ActionUsage` and `ActionDefinition` parameters as graphical border nodes.
2627

2728
== v2025.10.0
2829

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/checkers/CheckNodeOnDiagram.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2024 Obeo.
2+
* Copyright (c) 2024, 2025 Obeo.
33
* This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v2.0
55
* which accompanies this distribution, and is available at
@@ -62,9 +62,10 @@ public CheckNodeOnDiagram hasTargetObjectLabel(String expectedTargetObjectLabel)
6262

6363
@Override
6464
public void check(Diagram previousDiagram, Diagram newDiagram) {
65+
String nodeDescriptionId = this.diagramDescriptionIdProvider.getNodeDescriptionId(this.nodeDescriptionName);
6566
List<Node> newNodes = this.diagramComparator.newNodes(previousDiagram, newDiagram);
6667
assertThat(newDiagram.getNodes()).anySatisfy(childNode -> {
67-
assertThat(childNode).hasDescriptionId(this.diagramDescriptionIdProvider.getNodeDescriptionId(this.nodeDescriptionName));
68+
assertThat(childNode).hasDescriptionId(nodeDescriptionId);
6869
assertThat(childNode.getChildNodes()).hasSize(this.compartmentCount);
6970
if (this.targetObjectLabel != null) {
7071
assertThat(childNode).hasTargetObjectLabel(this.targetObjectLabel);

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVEdgeItemUsageTests.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,14 @@ private void checkItemParameterOnActionUsage(String kind) {
200200
this.verifier.then(() -> this.nodeCreationTester.invokeTool(GeneralViewWithTopNodesTestProjectData.EDITING_CONTEXT_ID, this.diagram, "action", creationToolId));
201201

202202
IDiagramChecker diagramChecker = (initialDiagram, newDiagram) -> {
203+
// One bordered node
204+
// One border + one root node for Tree Composition (with 4 compartments) + new item in the items
205+
// compartment
206+
// One new Composite Edge
203207
new CheckDiagramElementCount(this.diagramComparator)
204-
.hasNewBorderNodeCount(1) // One bordered node
205-
.hasNewNodeCount(7) // One border + one root node for Tree Composition (with 4 compartments) +
206-
// new item in the items compartment
207-
.hasNewEdgeCount(1) // Composite Edge
208+
.hasNewBorderNodeCount(1)
209+
.hasNewNodeCount(7)
210+
.hasNewEdgeCount(1)
208211
.check(initialDiagram, newDiagram);
209212

210213
List<Node> newNodes = this.diagramComparator.newNodes(initialDiagram, newDiagram);
@@ -227,7 +230,6 @@ private void checkItemParameterOnActionUsage(String kind) {
227230
.hasType("node:image")
228231
.hasTargetObjectLabel(ITEM1 + kind)
229232
.hasTargetObjectKind("siriusComponents://semantic?domain=sysml&entity=ItemUsage");
230-
231233
};
232234

233235
this.diagramCheckerService.checkDiagram(diagramChecker, this.diagram, this.verifier);
@@ -236,19 +238,21 @@ private void checkItemParameterOnActionUsage(String kind) {
236238
EList<Feature> parameters = actionUsage.getParameter();
237239
assertThat(parameters).hasSize(1).allMatch(p -> (ITEM1 + kind).equals(p.getDeclaredName()) && p.getDirection() == FeatureDirectionKind.get(kind.toLowerCase()));
238240
});
239-
240241
}
241242

242243
private void checkItemParameterOnActionDefinition(String kind) {
243244
String creationToolId = this.diagramDescriptionIdProvider.getNodeCreationToolId(this.descriptionNameGenerator.getNodeName(SysmlPackage.eINSTANCE.getActionDefinition()), "New Item " + kind);
244245
this.verifier.then(() -> this.nodeCreationTester.invokeTool(GeneralViewWithTopNodesTestProjectData.EDITING_CONTEXT_ID, this.diagram, "ActionDefinition", creationToolId));
245246

246247
IDiagramChecker diagramChecker = (initialDiagram, newDiagram) -> {
248+
// One bordered node
249+
// One border + one root node for Tree Composition (with 4 compartments) + new item in the items
250+
// compartment
251+
// One new Composite Edge
247252
new CheckDiagramElementCount(this.diagramComparator)
248-
.hasNewBorderNodeCount(1) // One bordered node
249-
.hasNewNodeCount(7) // One border + one root node for Tree Composition (with 4 compartments) + new
250-
// item in the parameters compartment
251-
.hasNewEdgeCount(1) // Composite Edge
253+
.hasNewBorderNodeCount(1)
254+
.hasNewNodeCount(7)
255+
.hasNewEdgeCount(1)
252256
.check(initialDiagram, newDiagram);
253257

254258
List<Node> newNodes = this.diagramComparator.newNodes(initialDiagram, newDiagram);
@@ -271,7 +275,6 @@ private void checkItemParameterOnActionDefinition(String kind) {
271275
.hasType("node:image")
272276
.hasTargetObjectLabel(ITEM1)
273277
.hasTargetObjectKind("siriusComponents://semantic?domain=sysml&entity=ItemUsage");
274-
275278
};
276279

277280
this.diagramCheckerService.checkDiagram(diagramChecker, this.diagram, this.verifier);
@@ -280,7 +283,5 @@ private void checkItemParameterOnActionDefinition(String kind) {
280283
EList<Feature> parameters = actionUsage.getParameter();
281284
assertThat(parameters).hasSize(1).allMatch(p -> "item1".equals(p.getDeclaredName()) && p.getDirection() == FeatureDirectionKind.get(kind.toLowerCase()));
282285
});
283-
284286
}
285-
286287
}

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVManageVisibilityTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ public void invokeShowOnlyValuedContent() {
9797
var diagram = diagramRefreshedEventPayload.diagram();
9898
assertThat(diagram.getNodes()).hasSize(1);
9999
nodeId.set(diagram.getNodes().get(0).getId());
100-
assertThat(diagram.getNodes().get(0).getChildNodes()).hasSize(5);
100+
assertThat(diagram.getNodes().get(0).getChildNodes()).hasSize(6);
101101
var children = diagram.getNodes().get(0).getChildNodes();
102-
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Hidden))).hasSize(5);
102+
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Hidden))).hasSize(6);
103103
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Normal))).hasSize(0);
104104
}, () -> fail("Missing diagram"));
105105

@@ -138,9 +138,9 @@ public void invokeShowOnlyValuedContent() {
138138
var diagram = diagramRefreshedEventPayload.diagram();
139139
assertThat(diagram.getNodes()).hasSize(1);
140140
nodeId.set(diagram.getNodes().get(0).getId());
141-
assertThat(diagram.getNodes().get(0).getChildNodes()).hasSize(5);
141+
assertThat(diagram.getNodes().get(0).getChildNodes()).hasSize(6);
142142
var children = diagram.getNodes().get(0).getChildNodes();
143-
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Hidden))).hasSize(4);
143+
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Hidden))).hasSize(5);
144144
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Normal))).hasSize(1);
145145
assertThat(children.stream().filter(node -> node.getState().equals(ViewModifier.Faded))).hasSize(0);
146146
}, () -> fail("Missing diagram"));

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeActionFlowCreationTests.java

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@
9494
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
9595
public class GVSubNodeActionFlowCreationTests extends AbstractIntegrationTests {
9696

97+
private static final String PARAMETERS = "parameters";
98+
9799
private static final String ACTION = "action";
98100

99101
private static final String ACTIONS_COMPARTMENT = "actions";
@@ -162,7 +164,23 @@ private static Stream<Arguments> actionUsageListNodeParameters() {
162164

163165
private static Stream<Arguments> actionUsageBorderAndChildNodeParameters() {
164166
return Stream.of(
165-
Arguments.of(SysmlPackage.eINSTANCE.getPortUsage(), "ports", SysmlPackage.eINSTANCE.getUsage_NestedPort(), SysmlPackage.eINSTANCE.getPortUsage()))
167+
Arguments.of(SysmlPackage.eINSTANCE.getReferenceUsage(), PARAMETERS, SysmlPackage.eINSTANCE.getUsage_NestedReference(), SysmlPackage.eINSTANCE.getReferenceUsage(),
168+
"New Parameter In"),
169+
Arguments.of(SysmlPackage.eINSTANCE.getReferenceUsage(), PARAMETERS, SysmlPackage.eINSTANCE.getUsage_NestedReference(), SysmlPackage.eINSTANCE.getReferenceUsage(),
170+
"New Parameter Inout"),
171+
Arguments.of(SysmlPackage.eINSTANCE.getReferenceUsage(), PARAMETERS, SysmlPackage.eINSTANCE.getUsage_NestedReference(), SysmlPackage.eINSTANCE.getReferenceUsage(),
172+
"New Parameter Out"))
173+
.map(TestNameGenerator::namedArguments);
174+
}
175+
176+
private static Stream<Arguments> actionDefinitionBorderAndChildNodeParameters() {
177+
return Stream.of(
178+
Arguments.of(SysmlPackage.eINSTANCE.getReferenceUsage(), PARAMETERS, SysmlPackage.eINSTANCE.getDefinition_OwnedReference(), SysmlPackage.eINSTANCE.getReferenceUsage(),
179+
"New Parameter In"),
180+
Arguments.of(SysmlPackage.eINSTANCE.getReferenceUsage(), PARAMETERS, SysmlPackage.eINSTANCE.getDefinition_OwnedReference(), SysmlPackage.eINSTANCE.getReferenceUsage(),
181+
"New Parameter Inout"),
182+
Arguments.of(SysmlPackage.eINSTANCE.getReferenceUsage(), PARAMETERS, SysmlPackage.eINSTANCE.getDefinition_OwnedReference(), SysmlPackage.eINSTANCE.getReferenceUsage(),
183+
"New Parameter Out"))
166184
.map(TestNameGenerator::namedArguments);
167185
}
168186

@@ -227,7 +245,7 @@ public void setUp() {
227245
public void tearDown() {
228246
if (this.verifier != null) {
229247
this.verifier.thenCancel()
230-
.verify(Duration.ofSeconds(10));
248+
.verify(Duration.ofSeconds(1000));
231249
}
232250
}
233251

@@ -386,10 +404,42 @@ public void createActionUsageListChildNodes(EClass childEClass, String compartme
386404
@Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
387405
@ParameterizedTest
388406
@MethodSource("actionUsageBorderAndChildNodeParameters")
389-
public void createActionUsageBorderAndChildNodes(EClass childEClass, String compartmentName, EReference containmentReference, EClass borderNodeType) {
407+
public void createActionUsageBorderAndChildNodes(EClass childEClass, String compartmentName, EReference containmentReference, EClass borderNodeType, String toolName) {
390408
EClass parentEClass = SysmlPackage.eINSTANCE.getActionUsage();
391409
String parentLabel = ACTION;
392-
this.creationTestsService.createNode(this.verifier, this.diagramDescriptionIdProvider, this.diagram, parentEClass, parentLabel, childEClass);
410+
this.creationTestsService.createNode(this.verifier, this.diagramDescriptionIdProvider, this.diagram, parentEClass, parentLabel, toolName);
411+
IDiagramChecker diagramChecker = (initialDiagram, newDiagram) -> {
412+
new CheckDiagramElementCount(this.diagramComparator)
413+
.hasNewNodeCount(2)
414+
.hasNewBorderNodeCount(1)
415+
.hasNewEdgeCount(0)
416+
.check(initialDiagram, newDiagram);
417+
String compartmentNodeDescription = this.descriptionNameGenerator.getCompartmentItemName(parentEClass, containmentReference);
418+
new CheckNodeInCompartment(this.diagramDescriptionIdProvider, this.diagramComparator)
419+
.withParentLabel(parentLabel)
420+
.withCompartmentName(compartmentName)
421+
.hasNodeDescriptionName(compartmentNodeDescription)
422+
.hasCompartmentCount(0)
423+
.check(initialDiagram, newDiagram);
424+
String borderNodeDescription = this.descriptionNameGenerator.getBorderNodeName(borderNodeType);
425+
new CheckBorderNode(this.diagramDescriptionIdProvider, this.diagramComparator)
426+
.withParentLabel(parentLabel)
427+
.hasBorderNodeDescriptionName(borderNodeDescription)
428+
.check(initialDiagram, newDiagram);
429+
};
430+
this.diagramCheckerService.checkDiagram(diagramChecker, this.diagram, this.verifier);
431+
this.semanticCheckerService.checkEditingContext(this.semanticCheckerService.getElementInParentSemanticChecker(parentLabel, containmentReference, childEClass), this.verifier);
432+
}
433+
434+
@Sql(scripts = { GeneralViewWithTopNodesTestProjectData.SCRIPT_PATH }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
435+
config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
436+
@Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
437+
@ParameterizedTest
438+
@MethodSource("actionDefinitionBorderAndChildNodeParameters")
439+
public void createActionDefinitionBorderAndChildNodes(EClass childEClass, String compartmentName, EReference containmentReference, EClass borderNodeType, String toolName) {
440+
EClass parentEClass = SysmlPackage.eINSTANCE.getActionDefinition();
441+
String parentLabel = "ActionDefinition";
442+
this.creationTestsService.createNode(this.verifier, this.diagramDescriptionIdProvider, this.diagram, parentEClass, parentLabel, toolName);
393443
IDiagramChecker diagramChecker = (initialDiagram, newDiagram) -> {
394444
new CheckDiagramElementCount(this.diagramComparator)
395445
.hasNewNodeCount(2)
@@ -568,7 +618,8 @@ public void createActionDefinitionSiblingNodes(EClass childEClass, EReference co
568618
EClass parentEClass = SysmlPackage.eINSTANCE.getActionDefinition();
569619
String parentLabel = "ActionDefinition";
570620
this.creationTestsService.createNode(this.verifier, this.diagramDescriptionIdProvider, this.diagram, parentEClass, parentLabel, childEClass);
571-
this.diagramCheckerService.checkDiagram(this.diagramCheckerService.getSiblingNodeGraphicalChecker(this.diagram, this.diagramDescriptionIdProvider, childEClass, compartmentCount), this.diagram,
621+
this.diagramCheckerService.checkDiagram(this.diagramCheckerService.getSiblingNodeGraphicalChecker(this.diagram, this.diagramDescriptionIdProvider, childEClass, compartmentCount, 2),
622+
this.diagram,
572623
this.verifier);
573624
this.semanticCheckerService.checkEditingContext(this.semanticCheckerService.getElementInParentSemanticChecker(parentLabel, containmentReference, childEClass), this.verifier);
574625
}

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeStructureCreationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ private static Stream<Arguments> packageChildNodeParameters() {
184184
Arguments.of(SysmlPackage.eINSTANCE.getAttributeUsage(), ownedMember, 3),
185185
Arguments.of(SysmlPackage.eINSTANCE.getAllocationDefinition(), ownedMember, 3),
186186
Arguments.of(SysmlPackage.eINSTANCE.getAllocationUsage(), ownedMember, 3),
187-
Arguments.of(SysmlPackage.eINSTANCE.getActionDefinition(), ownedMember, 5),
187+
Arguments.of(SysmlPackage.eINSTANCE.getActionDefinition(), ownedMember, 6),
188188
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), ownedMember, 2),
189189
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), ownedMember, 7),
190190
Arguments.of(SysmlPackage.eINSTANCE.getAssignmentActionUsage(), ownedMember, 1),

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVTopNodeCreationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ private static Stream<Arguments> topNodeParameters() {
150150
Arguments.of(SysmlPackage.eINSTANCE.getAllocationUsage(), 3),
151151
Arguments.of(SysmlPackage.eINSTANCE.getAllocationDefinition(), 3),
152152
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), 2),
153-
Arguments.of(SysmlPackage.eINSTANCE.getActionDefinition(), 5),
153+
Arguments.of(SysmlPackage.eINSTANCE.getActionDefinition(), 6),
154154
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), 7),
155155
Arguments.of(SysmlPackage.eINSTANCE.getAssignmentActionUsage(), 1),
156156
Arguments.of(SysmlPackage.eINSTANCE.getConcernDefinition(), 8),

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVViewUsageTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public class GVViewUsageTests extends AbstractIntegrationTests {
101101
private static Stream<Arguments> childNodeParameters() {
102102
return Stream.of(
103103
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), 2),
104-
Arguments.of(SysmlPackage.eINSTANCE.getActionDefinition(), 5),
104+
Arguments.of(SysmlPackage.eINSTANCE.getActionDefinition(), 6),
105105
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), 7),
106106
Arguments.of(SysmlPackage.eINSTANCE.getAllocationDefinition(), 3),
107107
Arguments.of(SysmlPackage.eINSTANCE.getAllocationUsage(), 3),
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)