Skip to content

Commit 8541066

Browse files
jerome-obeoAxelRICHARD
authored andcommitted
[439] Handle Perform action with no separate performed action
Bug: #439 Signed-off-by: Jerome Gout <jerome.gout@obeosoft.com>
1 parent 2241397 commit 8541066

File tree

18 files changed

+284
-18
lines changed

18 files changed

+284
-18
lines changed

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

Lines changed: 94 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.eclipse.syson.application.controllers.diagrams.testers.NodeCreationTester;
4848
import org.eclipse.syson.application.controllers.utils.TestNameGenerator;
4949
import org.eclipse.syson.application.data.SysMLv2Identifiers;
50+
import org.eclipse.syson.diagram.common.view.services.description.ReferencingPerformActionUsageNodeDescriptionService;
5051
import org.eclipse.syson.diagram.general.view.GVDescriptionNameGenerator;
5152
import org.eclipse.syson.services.SemanticCheckerFactory;
5253
import org.eclipse.syson.services.diagrams.DiagramComparator;
@@ -55,9 +56,11 @@
5556
import org.eclipse.syson.services.diagrams.api.IGivenDiagramReference;
5657
import org.eclipse.syson.services.diagrams.api.IGivenDiagramSubscription;
5758
import org.eclipse.syson.sysml.AcceptActionUsage;
59+
import org.eclipse.syson.sysml.ActionUsage;
5860
import org.eclipse.syson.sysml.Element;
5961
import org.eclipse.syson.sysml.FeatureTyping;
6062
import org.eclipse.syson.sysml.Membership;
63+
import org.eclipse.syson.sysml.PerformActionUsage;
6164
import org.eclipse.syson.sysml.SysmlPackage;
6265
import org.eclipse.syson.sysml.helper.EMFUtils;
6366
import org.eclipse.syson.sysml.helper.LabelConstants;
@@ -86,6 +89,8 @@
8689
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
8790
public class GVSubNodeCreationTests extends AbstractIntegrationTests {
8891

92+
private static final String ACTIONS_COMPARTMENT = "actions";
93+
8994
private static final String ATTRIBUTES_COMPARTMENT = "attributes";
9095

9196
private static final String DOC_COMPARTMENT = "doc";
@@ -341,8 +346,8 @@ private static Stream<Arguments> actionUsageListNodeParameters() {
341346

342347
private static Stream<Arguments> actionUsageListAndFreeFormNodeParameters() {
343348
return Stream.of(
344-
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), "actions", SysmlPackage.eINSTANCE.getUsage_NestedAction(), 1),
345-
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), "actions", SysmlPackage.eINSTANCE.getUsage_NestedAction(), 4))
349+
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), ACTIONS_COMPARTMENT, SysmlPackage.eINSTANCE.getUsage_NestedAction(), 1),
350+
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), ACTIONS_COMPARTMENT, SysmlPackage.eINSTANCE.getUsage_NestedAction(), 4))
346351
// Uncomment when https://github.com/eclipse-sirius/sirius-web/issues/3650 is fixed
347352
// Arguments.of(SysmlPackage.eINSTANCE.getDecisionNode(), "actions",
348353
// SysmlPackage.eINSTANCE.getUsage_NestedAction(), 0),
@@ -357,8 +362,8 @@ private static Stream<Arguments> actionUsageListAndFreeFormNodeParameters() {
357362

358363
private static Stream<Arguments> actionDefinitionListAndFreeFormNodeParameters() {
359364
return Stream.of(
360-
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), "actions", SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), 1),
361-
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), "actions", SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), 4))
365+
Arguments.of(SysmlPackage.eINSTANCE.getAcceptActionUsage(), ACTIONS_COMPARTMENT, SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), 1),
366+
Arguments.of(SysmlPackage.eINSTANCE.getActionUsage(), ACTIONS_COMPARTMENT, SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), 4))
362367
// Uncomment when https://github.com/eclipse-sirius/sirius-web/issues/3650 is fixed
363368
// Arguments.of(SysmlPackage.eINSTANCE.getDecisionNode(), "actions",
364369
// SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), 0),
@@ -934,6 +939,91 @@ public void createActionUsageListAndFreeFormChildNodes(EClass childEClass, Strin
934939
this.checkEditingContext(this.getElementInParentSemanticChecker(parentLabel, containmentReference, childEClass));
935940
}
936941

942+
@Sql(scripts = { "/scripts/syson-test-database.sql" }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
943+
@Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
944+
@Test
945+
public void createReferencingPerformActionUsageInActionUsage() {
946+
EClass parentEClass = SysmlPackage.eINSTANCE.getActionUsage();
947+
EClass childEClass = SysmlPackage.eINSTANCE.getPerformActionUsage();
948+
String parentLabel = "action";
949+
String creationToolName = "New Perfom";
950+
EReference containmentReference = SysmlPackage.eINSTANCE.getUsage_NestedAction();
951+
952+
this.createNode(parentEClass, parentLabel, creationToolName);
953+
IDiagramChecker diagramChecker = (initialDiagram, newDiagram) -> {
954+
int createdNodesExpectedCount = 3;
955+
new CheckDiagramElementCount(this.diagramComparator)
956+
.hasNewNodeCount(createdNodesExpectedCount)
957+
.check(initialDiagram, newDiagram);
958+
String listNodeDescription = this.descriptionNameGenerator.getCompartmentItemName(parentEClass, containmentReference);
959+
new CheckNodeInCompartment(this.diagramDescriptionIdProvider, this.diagramComparator)
960+
.withParentLabel(parentLabel)
961+
.withCompartmentName(ACTIONS_COMPARTMENT)
962+
.hasNodeDescriptionName(listNodeDescription)
963+
.hasCompartmentCount(0)
964+
.check(initialDiagram, newDiagram);
965+
String freeFormNodeDescription = this.descriptionNameGenerator.getNodeName(ReferencingPerformActionUsageNodeDescriptionService.REFERENCING_PERFORM_ACTION_NAME);
966+
new CheckNodeInCompartment(this.diagramDescriptionIdProvider, this.diagramComparator)
967+
.withParentLabel(parentLabel)
968+
.withCompartmentName("action flow")
969+
.hasNodeDescriptionName(freeFormNodeDescription)
970+
.hasCompartmentCount(0)
971+
.check(initialDiagram, newDiagram);
972+
};
973+
this.checkDiagram(diagramChecker);
974+
ISemanticChecker semanticChecker = (editingContext) -> {
975+
Object semanticRootObject = this.objectService.getObject(editingContext, SysMLv2Identifiers.GENERAL_VIEW_WITH_TOP_NODES_DIAGRAM_OBJECT).orElse(null);
976+
assertThat(semanticRootObject).isInstanceOf(Element.class);
977+
Element semanticRootElement = (Element) semanticRootObject;
978+
Optional<PerformActionUsage> optParentElement = EMFUtils.allContainedObjectOfType(semanticRootElement, PerformActionUsage.class)
979+
.filter(element -> Objects.equals(element.getName(), "performAction"))
980+
.findFirst();
981+
assertThat(optParentElement).isPresent();
982+
var performActionUsage = optParentElement.get();
983+
ActionUsage performedAction = performActionUsage.getPerformedAction();
984+
// the performed action is another action
985+
assertThat(performedAction).isNotEqualTo(performedAction);
986+
assertThat(performedAction.getName()).isEqualTo("performedAction");
987+
};
988+
this.checkEditingContext(this.getElementInParentSemanticChecker(parentLabel, containmentReference, childEClass));
989+
this.checkEditingContext(semanticChecker);
990+
}
991+
992+
@Sql(scripts = { "/scripts/syson-test-database.sql" }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
993+
@Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
994+
@Test
995+
public void createPerformActionUsageInActionUsage() {
996+
EClass parentEClass = SysmlPackage.eINSTANCE.getActionUsage();
997+
EClass childEClass = SysmlPackage.eINSTANCE.getPerformActionUsage();
998+
String parentLabel = "action";
999+
String creationToolName = "New Perfom action";
1000+
EReference containmentReference = SysmlPackage.eINSTANCE.getUsage_NestedAction();
1001+
1002+
this.createNode(parentEClass, parentLabel, creationToolName);
1003+
IDiagramChecker diagramChecker = (initialDiagram, newDiagram) -> {
1004+
int createdNodesExpectedCount = 6;
1005+
new CheckDiagramElementCount(this.diagramComparator)
1006+
.hasNewNodeCount(createdNodesExpectedCount)
1007+
.check(initialDiagram, newDiagram);
1008+
String listNodeDescription = this.descriptionNameGenerator.getCompartmentItemName(parentEClass, containmentReference);
1009+
new CheckNodeInCompartment(this.diagramDescriptionIdProvider, this.diagramComparator)
1010+
.withParentLabel(parentLabel)
1011+
.withCompartmentName(ACTIONS_COMPARTMENT)
1012+
.hasNodeDescriptionName(listNodeDescription)
1013+
.hasCompartmentCount(0)
1014+
.check(initialDiagram, newDiagram);
1015+
String freeFormNodeDescription = this.descriptionNameGenerator.getNodeName(childEClass);
1016+
new CheckNodeInCompartment(this.diagramDescriptionIdProvider, this.diagramComparator)
1017+
.withParentLabel(parentLabel)
1018+
.withCompartmentName("action flow")
1019+
.hasNodeDescriptionName(freeFormNodeDescription)
1020+
.hasCompartmentCount(4)
1021+
.check(initialDiagram, newDiagram);
1022+
};
1023+
this.checkDiagram(diagramChecker);
1024+
this.checkEditingContext(this.getElementInParentSemanticChecker(parentLabel, containmentReference, childEClass));
1025+
}
1026+
9371027
@Sql(scripts = { "/scripts/syson-test-database.sql" }, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
9381028
@Sql(scripts = { "/scripts/cleanup.sql" }, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
9391029
@ParameterizedTest

backend/services/syson-services/src/main/java/org/eclipse/syson/services/MultiLineLabelSwitch.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*******************************************************************************/
1313
package org.eclipse.syson.services;
1414

15+
import java.util.Objects;
16+
1517
import org.eclipse.emf.common.util.EList;
1618
import org.eclipse.syson.sysml.AcceptActionUsage;
1719
import org.eclipse.syson.sysml.ActionDefinition;
@@ -497,7 +499,7 @@ public String casePerformActionUsage(PerformActionUsage object) {
497499
label
498500
.append(this.abstractType(object))
499501
.append(LabelConstants.OPEN_QUOTE)
500-
.append("perform")
502+
.append(this.getPerformActionUsageTag(object))
501503
.append(LabelConstants.CLOSE_QUOTE)
502504
.append(LabelConstants.CR)
503505
.append(object.getPerformedAction().getName());
@@ -837,4 +839,11 @@ private String getAssignmentValue(Expression expression) {
837839
}
838840
return label.toString();
839841
}
842+
843+
private String getPerformActionUsageTag(PerformActionUsage pau) {
844+
if (Objects.equals(pau.getPerformedAction(), pau)) {
845+
return "perform action";
846+
}
847+
return "perform";
848+
}
840849
}

backend/views/syson-diagram-actionflow-view/src/main/java/org/eclipse/syson/diagram/actionflow/view/ActionFlowViewDiagramDescriptionProvider.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,16 @@ public class ActionFlowViewDiagramDescriptionProvider implements IRepresentation
7575
public static final List<EClass> USAGES = List.of(
7676
SysmlPackage.eINSTANCE.getAcceptActionUsage(),
7777
SysmlPackage.eINSTANCE.getActionUsage(),
78-
SysmlPackage.eINSTANCE.getAssignmentActionUsage()
78+
SysmlPackage.eINSTANCE.getAssignmentActionUsage(),
79+
SysmlPackage.eINSTANCE.getPerformActionUsage()
7980
);
8081

8182
public static final Map<EClass, List<EReference>> COMPARTMENTS_WITH_LIST_ITEMS = Map.ofEntries(
8283
Map.entry(SysmlPackage.eINSTANCE.getAcceptActionUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation())),
8384
Map.entry(SysmlPackage.eINSTANCE.getActionDefinition(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getDefinition_OwnedAction())),
84-
Map.entry(SysmlPackage.eINSTANCE.getActionUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), SysmlPackage.eINSTANCE.getUsage_NestedAction()))
85+
Map.entry(SysmlPackage.eINSTANCE.getActionUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), SysmlPackage.eINSTANCE.getUsage_NestedAction())),
86+
Map.entry(SysmlPackage.eINSTANCE.getPerformActionUsage(),
87+
List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), SysmlPackage.eINSTANCE.getUsage_NestedAction()))
8588
);
8689

8790
public static final List<ToolSectionDescription> TOOL_SECTIONS = List.of(
@@ -126,6 +129,8 @@ public RepresentationDescription create(IColorProvider colorProvider) {
126129
diagramElementDescriptionProviders.add(new ActionFlowCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), colorProvider, this.getDescriptionNameGenerator()));
127130
diagramElementDescriptionProviders.add(new ActionFlowCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getActionDefinition(), SysmlPackage.eINSTANCE.getDefinition_OwnedAction(),
128131
colorProvider, this.getDescriptionNameGenerator()));
132+
diagramElementDescriptionProviders.add(new ActionFlowCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPerformActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction(),
133+
colorProvider, this.getDescriptionNameGenerator()));
129134

130135
diagramElementDescriptionProviders.add(new FakeNodeDescriptionProvider(colorProvider));
131136
diagramElementDescriptionProviders.add(new ActionFlowViewEmptyDiagramNodeDescriptionProvider(colorProvider));

backend/views/syson-diagram-actionflow-view/src/main/java/org/eclipse/syson/diagram/actionflow/view/nodes/FakeNodeDescriptionProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ protected List<NodeDescription> getChildrenDescription(IViewDiagramElementFinder
5151

5252
cache.getNodeDescription(nameGenerator.getFreeFormCompartmentName(SysmlPackage.eINSTANCE.getActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction()))
5353
.ifPresent(childrenNodes::add);
54+
cache.getNodeDescription(nameGenerator.getFreeFormCompartmentName(SysmlPackage.eINSTANCE.getPerformActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction()))
55+
.ifPresent(childrenNodes::add);
5456
cache.getNodeDescription(nameGenerator.getFreeFormCompartmentName(SysmlPackage.eINSTANCE.getActionDefinition(), SysmlPackage.eINSTANCE.getDefinition_OwnedAction()))
5557
.ifPresent(childrenNodes::add);
5658
return childrenNodes;

backend/views/syson-diagram-actionflow-view/src/main/java/org/eclipse/syson/diagram/actionflow/view/nodes/ReferencingPerformActionUsageNodeDescriptionProvider.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.eclipse.syson.diagram.actionflow.view.nodes;
1414

1515
import java.util.List;
16+
import java.util.Set;
1617

1718
import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder;
1819
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
@@ -29,7 +30,8 @@
2930
* There are two separate node descriptions mapped to {@link PerformActionUsage}:<br>
3031
* - {@link ReferencingPerformActionUsageNodeDescriptionProvider}: when the performed action is a separated action
3132
* usage<br>
32-
* - {@link PerformActionUsageNodeDescriptionProvider}: when the performed action is the perform action itself.
33+
* - regular {@link UsageNodeDescriptionProvider} with PerformActionUsage: when the performed action is the perform
34+
* action itself.
3335
*
3436
* @author Jerome Gout
3537
*/
@@ -53,4 +55,9 @@ protected String getSemanticCandidatesExpression(String domainType) {
5355
protected List<NodeToolSection> getToolSections(NodeDescription nodeDescription, IViewDiagramElementFinder cache) {
5456
return List.of();
5557
}
58+
59+
@Override
60+
protected Set<NodeDescription> getReusedChildren(IViewDiagramElementFinder cache) {
61+
return Set.of();
62+
}
5663
}

0 commit comments

Comments
 (0)