From a626ca232d90e5b2cca7f230b84db261f382bb5f Mon Sep 17 00:00:00 2001 From: Jerome Gout Date: Mon, 3 Jun 2024 12:00:00 +0200 Subject: [PATCH] [269] Handle start action in GV Bug: https://github.com/eclipse-syson/syson/issues/269 Signed-off-by: Jerome Gout --- .../view/GeneralViewDiagramDescriptionProvider.java | 2 ++ .../edges/SuccessionEdgeDescriptionProvider.java | 12 ++++++++---- .../nodes/DefinitionNodeDescriptionProvider.java | 2 +- .../view/nodes/UsageNodeDescriptionProvider.java | 2 +- .../services/GeneralViewNodeToolSectionSwitch.java | 10 ++++++++-- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/GeneralViewDiagramDescriptionProvider.java b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/GeneralViewDiagramDescriptionProvider.java index 52a7d8c26..29505242e 100644 --- a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/GeneralViewDiagramDescriptionProvider.java +++ b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/GeneralViewDiagramDescriptionProvider.java @@ -35,6 +35,7 @@ import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.CompartmentItemNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.InheritedCompartmentItemNodeDescriptionProvider; +import org.eclipse.syson.diagram.common.view.nodes.StartActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.tools.ToolSectionDescription; import org.eclipse.syson.diagram.general.view.edges.AllocateEdgeDescriptionProvider; import org.eclipse.syson.diagram.general.view.edges.DefinitionOwnedActionUsageEdgeDescriptionProvider; @@ -226,6 +227,7 @@ public RepresentationDescription create(IColorProvider colorProvider) { diagramElementDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getAllocationDefinition(), SysmlPackage.eINSTANCE.getConnectionDefinition_ConnectionEnd(), colorProvider, this.nameGenerator)); diagramElementDescriptionProviders.add(new ActionFlowCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), colorProvider, this.nameGenerator)); diagramElementDescriptionProviders.add(new ActionFlowCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getActionDefinition(), SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), colorProvider, this.nameGenerator)); + diagramElementDescriptionProviders.add(new StartActionNodeDescriptionProvider(colorProvider, this.getNameGenerator())); // create a node description provider for each element found in a section var nodeDescriptionProviderSwitch = new GeneralViewNodeDescriptionProviderSwitch(colorProvider); diff --git a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/edges/SuccessionEdgeDescriptionProvider.java b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/edges/SuccessionEdgeDescriptionProvider.java index 7ea4cdeb1..d7b9af789 100644 --- a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/edges/SuccessionEdgeDescriptionProvider.java +++ b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/edges/SuccessionEdgeDescriptionProvider.java @@ -19,6 +19,7 @@ import org.eclipse.sirius.components.view.builder.providers.IColorProvider; import org.eclipse.sirius.components.view.diagram.NodeDescription; import org.eclipse.syson.diagram.common.view.edges.AbstractSuccessionEdgeDescriptionProvider; +import org.eclipse.syson.diagram.common.view.nodes.StartActionNodeDescriptionProvider; import org.eclipse.syson.diagram.general.view.GVDescriptionNameGenerator; import org.eclipse.syson.diagram.general.view.GeneralViewDiagramDescriptionProvider; @@ -33,11 +34,11 @@ public SuccessionEdgeDescriptionProvider(IColorProvider colorProvider) { super(colorProvider, new GVDescriptionNameGenerator()); } - private List getSourceAndTargetNodes(IViewDiagramElementFinder cache) { + private List getAllUsages(IViewDiagramElementFinder cache) { var sourcesAndTargets = new ArrayList(); GeneralViewDiagramDescriptionProvider.USAGES.forEach(usage -> { - cache.getNodeDescription(nameGenerator.getNodeName(usage)).ifPresent(sourcesAndTargets::add); + cache.getNodeDescription(this.nameGenerator.getNodeName(usage)).ifPresent(sourcesAndTargets::add); }); return sourcesAndTargets; @@ -45,11 +46,14 @@ private List getSourceAndTargetNodes(IViewDiagramElementFinder @Override protected List getSourceNodes(IViewDiagramElementFinder cache) { - return this.getSourceAndTargetNodes(cache); + var sources = this.getAllUsages(cache); + // the start node can be the source of a succession + cache.getNodeDescription(this.nameGenerator.getNodeName(StartActionNodeDescriptionProvider.START_ACTION_NAME)).ifPresent(sources::add); + return sources; } @Override protected List getTargetNodes(IViewDiagramElementFinder cache) { - return this.getSourceAndTargetNodes(cache); + return this.getAllUsages(cache); } } diff --git a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/DefinitionNodeDescriptionProvider.java b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/DefinitionNodeDescriptionProvider.java index 9e335c476..e7514e364 100644 --- a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/DefinitionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/DefinitionNodeDescriptionProvider.java @@ -66,7 +66,7 @@ protected List getAllNodeDescriptions(IViewDiagramElementFinder @Override protected List getToolSections(NodeDescription nodeDescription, IViewDiagramElementFinder cache) { - GeneralViewNodeToolSectionSwitch toolSectionSwitch = new GeneralViewNodeToolSectionSwitch(this.getAllNodeDescriptions(cache)); + GeneralViewNodeToolSectionSwitch toolSectionSwitch = new GeneralViewNodeToolSectionSwitch(cache, this.getAllNodeDescriptions(cache)); return toolSectionSwitch.doSwitch(this.eClass); } } diff --git a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/UsageNodeDescriptionProvider.java b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/UsageNodeDescriptionProvider.java index 0e916feac..367a28cde 100644 --- a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/UsageNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/nodes/UsageNodeDescriptionProvider.java @@ -66,7 +66,7 @@ protected List getAllNodeDescriptions(IViewDiagramElementFinder @Override protected List getToolSections(NodeDescription nodeDescription, IViewDiagramElementFinder cache) { - GeneralViewNodeToolSectionSwitch toolSectionSwitch = new GeneralViewNodeToolSectionSwitch(this.getAllNodeDescriptions(cache)); + GeneralViewNodeToolSectionSwitch toolSectionSwitch = new GeneralViewNodeToolSectionSwitch(cache, this.getAllNodeDescriptions(cache)); return toolSectionSwitch.doSwitch(this.eClass); } } diff --git a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/services/GeneralViewNodeToolSectionSwitch.java b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/services/GeneralViewNodeToolSectionSwitch.java index 158755f95..df7db66af 100644 --- a/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/services/GeneralViewNodeToolSectionSwitch.java +++ b/backend/views/syson-diagram-general-view/src/main/java/org/eclipse/syson/diagram/general/view/services/GeneralViewNodeToolSectionSwitch.java @@ -17,6 +17,7 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EReference; +import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder; import org.eclipse.sirius.components.view.diagram.NodeDescription; import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.diagram.NodeToolSection; @@ -26,6 +27,7 @@ import org.eclipse.syson.diagram.common.view.tools.ActionFlowCompartmentNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.CompartmentNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementCompartmentNodeToolProvider; +import org.eclipse.syson.diagram.common.view.tools.StartActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.SubjectCompartmentNodeToolProvider; import org.eclipse.syson.diagram.general.view.GVDescriptionNameGenerator; import org.eclipse.syson.diagram.general.view.GeneralViewDiagramDescriptionProvider; @@ -58,8 +60,11 @@ public class GeneralViewNodeToolSectionSwitch extends AbstractViewNodeToolSectio private final List allNodeDescriptions; - public GeneralViewNodeToolSectionSwitch(List allNodeDescriptions) { + private final IViewDiagramElementFinder cache; + + public GeneralViewNodeToolSectionSwitch(IViewDiagramElementFinder cache, List allNodeDescriptions) { super(new GVDescriptionNameGenerator()); + this.cache = Objects.requireNonNull(cache); this.allNodeDescriptions = Objects.requireNonNull(allNodeDescriptions); } @@ -90,6 +95,7 @@ public List caseAcceptActionUsage(AcceptActionUsage object) { @Override public List caseActionUsage(ActionUsage object) { var createSection = this.buildCreateSection( + new StartActionNodeToolProvider(SysmlPackage.eINSTANCE.getActionUsage(), this.descriptionNameGenerator).create(this.cache), this.createNestedUsageNodeTool(SysmlPackage.eINSTANCE.getAttributeUsage()), this.createNestedUsageNodeTool(SysmlPackage.eINSTANCE.getPartUsage()), this.createNestedUsageNodeTool(SysmlPackage.eINSTANCE.getPortUsage())); @@ -100,7 +106,7 @@ public List caseActionUsage(ActionUsage object) { @Override public List caseActionDefinition(ActionDefinition object) { - var createSection = this.buildCreateSection(); + var createSection = this.buildCreateSection(new StartActionNodeToolProvider(SysmlPackage.eINSTANCE.getActionDefinition(), this.descriptionNameGenerator).create(this.cache)); createSection.getNodeTools().add(new ActionFlowCompartmentNodeToolProvider(SysmlPackage.eINSTANCE.getActionDefinition(), this.descriptionNameGenerator).create(null)); return List.of(createSection, this.addElementsToolSection()); }