From 5acb177e94c0eb7c44f792e0d97a5febd6e1ba1d Mon Sep 17 00:00:00 2001 From: Guillaume Coutable Date: Thu, 16 Apr 2026 16:55:10 +0200 Subject: [PATCH] [2148] Merge the two perform action requirement creation tools Bug: https://github.com/eclipse-syson/syson/issues/2148 Signed-off-by: Guillaume Coutable --- CHANGELOG.adoc | 1 + .../GVSubNodeActionFlowCreationTests.java | 15 +-- ...lowCompartmentNodeDescriptionProvider.java | 2 - .../tools/PerformActionNodeToolProvider.java | 86 +++++++++++++ ...erencingPerformActionNodeToolProvider.java | 117 ------------------ ...onsCompartmentNodeDescriptionProvider.java | 2 - .../services/SDVNodeToolSectionSwitch.java | 6 - .../pages/release-notes/2026.5.0.adoc | 1 + 8 files changed, 94 insertions(+), 136 deletions(-) delete mode 100644 backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ReferencingPerformActionNodeToolProvider.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 79b4a59b6..5d12e67b9 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -69,6 +69,7 @@ Stakeholders are by default represented with a dedicated graphical node connecte - https://github.com/eclipse-syson/syson/issues/2129[#2129] [diagrams] Leverage the latest change of the selection dialog to allow creating a `FlowUsage` from a `ConnectionUsage` without selection a `PayloadFeature` - https://github.com/eclipse-syson/syson/issues/2105[#2105] [explorer] In the _Explorer_ view, `Expression` elements now display their full textual representation. - https://github.com/eclipse-syson/syson/issues/2137[#2137] [diagrams] Merge the two objective creation tools into a single tool, leveraging the updated selection dialog. +- https://github.com/eclipse-syson/syson/issues/2148[#2148] [diagrams] Merge the two perform action creation tools into a single tool, leveraging the updated selection dialog. === New features diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeActionFlowCreationTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeActionFlowCreationTests.java index 4ca104286..8dc333238 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeActionFlowCreationTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeActionFlowCreationTests.java @@ -17,8 +17,6 @@ import static org.eclipse.sirius.components.diagrams.tests.assertions.DiagramAssertions.assertThat; import java.time.Duration; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -30,8 +28,6 @@ import org.eclipse.emf.ecore.EReference; import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramEventInput; import org.eclipse.sirius.components.collaborative.diagrams.dto.DiagramRefreshedEventPayload; -import org.eclipse.sirius.components.collaborative.diagrams.dto.ToolVariable; -import org.eclipse.sirius.components.collaborative.diagrams.dto.ToolVariableType; import org.eclipse.sirius.components.core.api.IObjectSearchService; import org.eclipse.sirius.components.diagrams.Diagram; import org.eclipse.sirius.components.diagrams.Node; @@ -70,6 +66,7 @@ import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.SysONRepresentationDescriptionIdentifiers; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -607,6 +604,7 @@ public void createActionUsageSiblingAndChildNodes(EClass childEClass, String com .verify(Duration.ofSeconds(10)); } + @DisplayName("GIVEN an action, WHEN creating a perform action referencing another action, THEN the perform action is created and reference the other action") @GivenSysONServer({ GeneralViewWithTopNodesTestProjectData.SCRIPT_PATH }) @Test public void createReferencingPerformActionUsageInActionUsage() { @@ -622,12 +620,10 @@ public void createReferencingPerformActionUsageInActionUsage() { EClass parentEClass = SysmlPackage.eINSTANCE.getActionUsage(); EClass childEClass = SysmlPackage.eINSTANCE.getPerformActionUsage(); String targetObjectId = GeneralViewWithTopNodesTestProjectData.SemanticIds.ACTION_USAGE_ID; - String creationToolName = "New Perform"; + String creationToolName = "New Perform action"; EReference containmentReference = SysmlPackage.eINSTANCE.getUsage_NestedAction(); - List variables = new ArrayList<>(); - variables.add(new ToolVariable("selectedObject", GeneralViewWithTopNodesTestProjectData.SemanticIds.ACTION_USAGE_ID, ToolVariableType.OBJECT_ID)); - Runnable createNodeRunnable = this.creationTestsService.createNode(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, creationToolName, variables); + Runnable createNodeRunnable = this.creationTestsService.createNodeWithSelectionDialogWithSingleSelection(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, creationToolName, GeneralViewWithTopNodesTestProjectData.SemanticIds.ACTION_USAGE_ID); Consumer diagramCheck = assertRefreshedDiagramThat(newDiagram -> { var initialDiagram = diagram.get(); @@ -655,6 +651,7 @@ public void createReferencingPerformActionUsageInActionUsage() { .verify(Duration.ofSeconds(10)); } + @DisplayName("GIVEN an action, WHEN creating a perform action without selecting another action, THEN the perform action is created and does not reference anything") @GivenSysONServer({ GeneralViewWithTopNodesTestProjectData.SCRIPT_PATH }) @Test public void createPerformActionUsageInActionUsage() { @@ -673,7 +670,7 @@ public void createPerformActionUsageInActionUsage() { String creationToolName = "New Perform action"; EReference containmentReference = SysmlPackage.eINSTANCE.getUsage_NestedAction(); - Runnable createNodeRunnable = this.creationTestsService.createNode(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, creationToolName); + Runnable createNodeRunnable = this.creationTestsService.createNodeWithSelectionDialogWithoutSelectionProvided(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, creationToolName); Consumer diagramCheck = assertRefreshedDiagramThat(newDiagram -> { var initialDiagram = diagram.get(); int createdNodesExpectedCount = 13; diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ActionFlowCompartmentNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ActionFlowCompartmentNodeDescriptionProvider.java index ca57aef1d..3c5ad658a 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ActionFlowCompartmentNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ActionFlowCompartmentNodeDescriptionProvider.java @@ -41,7 +41,6 @@ import org.eclipse.syson.diagram.common.view.tools.JoinActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.MergeActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.PerformActionNodeToolProvider; -import org.eclipse.syson.diagram.common.view.tools.ReferencingPerformActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.StartActionNodeToolProvider; import org.eclipse.syson.sysml.SysmlPackage; import org.eclipse.syson.util.AQLConstants; @@ -119,7 +118,6 @@ protected NodePalette createCompartmentPalette(IViewDiagramElementFinder cache) this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new JoinActionNodeToolProvider(this.eClass, this.getDescriptionNameGenerator()).create(cache)); this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new MergeActionNodeToolProvider(this.eClass, this.getDescriptionNameGenerator()).create(cache)); this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new DoneActionNodeToolProvider(this.eClass, this.getDescriptionNameGenerator()).create(cache)); - this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(cache)); this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(cache)); toolSections.add(this.defaultToolsFactory.createDefaultHideRevealNodeToolSection()); diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java index 6293d179a..bde250bd6 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/PerformActionNodeToolProvider.java @@ -12,8 +12,20 @@ *******************************************************************************/ package org.eclipse.syson.diagram.common.view.tools; +import org.eclipse.sirius.components.collaborative.diagrams.DiagramContext; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.diagrams.Node; +import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder; +import org.eclipse.sirius.components.view.diagram.NodeTool; +import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription; +import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; +import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService; +import org.eclipse.syson.sysml.SysmlPackage; +import org.eclipse.syson.util.AQLConstants; import org.eclipse.syson.util.ServiceMethod; +import org.eclipse.syson.util.SysMLMetamodelHelper; /** * Used to add the 'perform action' action in actions body for all diagrams. @@ -41,4 +53,78 @@ protected boolean revealOnCreate() { protected String getNodeToolIconURLsExpression() { return "/icons/full/obj16/PerformActionUsage.svg"; } + + @Override + public NodeTool create(IViewDiagramElementFinder cache) { + var builder = this.diagramBuilderHelper.newNodeTool(); + + var setReferencedFeature = this.viewBuilderHelper.newSetValue() + .featureName("referencedFeature") + .valueExpression(AQLConstants.AQL + "selectedObject"); + + var changeContextReferenceSubsetting = this.viewBuilderHelper.newChangeContext() + .expression(AQLConstants.AQL + "newRefSubsetting") + .children(setReferencedFeature.build()); + + var initializeReferenceSubsetting = this.viewBuilderHelper.newChangeContext() + .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newRefSubsetting")); + + var createReferenceSubsettingInstance = this.viewBuilderHelper.newCreateInstance() + .typeName(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getReferenceSubsetting())) + .referenceName(SysmlPackage.eINSTANCE.getElement_OwnedRelationship().getName()) + .variableName("newRefSubsetting") + .children(initializeReferenceSubsetting.build(), changeContextReferenceSubsetting.build()); + + var addToExposedElements = this.viewBuilderHelper.newChangeContext() + .expression(ServiceMethod.of4(DiagramMutationAQLService::expose).aqlSelf(IEditingContext.EDITING_CONTEXT, DiagramContext.DIAGRAM_CONTEXT, Node.SELECTED_NODE, + ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE)); + + var changeContextNewInstance = this.viewBuilderHelper.newChangeContext() + .expression(AQLConstants.AQL + "newInstance") + .children(addToExposedElements.build(), createReferenceSubsettingInstance.build()); + + var letNewInstance = this.viewBuilderHelper.newLet() + .variableName("newInstance") + .valueExpression(this.getServiceCallExpression()) + .children(changeContextNewInstance.build()); + + var rootChangContext = this.viewBuilderHelper.newChangeContext() + .expression(AQLConstants.AQL_SELF) + .children(letNewInstance.build()); + + return builder + .name(this.getNodeToolName()) + .iconURLsExpression(this.getNodeToolIconURLsExpression()) + .body(rootChangContext.build()) + .dialogDescription(this.getSelectionDialogDescription()) + .preconditionExpression(this.getPreconditionExpression()) + .build(); + } + + @Override + protected SelectionDialogDescription getSelectionDialogDescription() { + String actionUsageType = SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getActionUsage()); + + var selectionDialogTree = this.diagramBuilderHelper.newSelectionDialogTreeDescription() + .isSelectableExpression(AQLConstants.AQL_SELF + ".oclIsKindOf(" + actionUsageType + ")") + .elementsExpression(ServiceMethod.of0(ViewToolService::getActionReferenceSelectionDialogElements).aql(IEditingContext.EDITING_CONTEXT)) + .childrenExpression(ServiceMethod.of0(ViewToolService::getActionReferenceSelectionDialogChildren).aqlSelf()) + .build(); + + return this.diagramBuilderHelper.newSelectionDialogDescription() + .selectionDialogTreeDescription(selectionDialogTree) + .defaultTitleExpression(this.getNodeToolName()) + .noSelectionTitleExpression(this.getNodeToolName()) + .withSelectionTitleExpression(this.getNodeToolName()) + .descriptionExpression("Create a perform action:") + .noSelectionActionLabelExpression("Create a new perform action") + .noSelectionActionDescriptionExpression("Create a new perform action without reference") + .withSelectionActionLabelExpression("Select an existing action to perform:") + .withSelectionActionDescriptionExpression("Create a new perform action referencing the selected action") + .noSelectionActionStatusMessageExpression("It will create a new perform action without reference") + .selectionRequiredWithoutSelectionStatusMessageExpression("Select one action usage to be referenced by the new perform action") + .selectionRequiredWithSelectionStatusMessageExpression(AQLConstants.AQL + "'It will create a perform action referencing ' + selectedObjects->first().name") + .optional(true) + .build(); + } } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ReferencingPerformActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ReferencingPerformActionNodeToolProvider.java deleted file mode 100644 index bf348e2c6..000000000 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ReferencingPerformActionNodeToolProvider.java +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024, 2026 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.syson.diagram.common.view.tools; - -import org.eclipse.sirius.components.collaborative.diagrams.DiagramContext; -import org.eclipse.sirius.components.core.api.IEditingContext; -import org.eclipse.sirius.components.diagrams.Node; -import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder; -import org.eclipse.sirius.components.view.diagram.NodeTool; -import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter; -import org.eclipse.syson.diagram.common.view.services.ViewCreateService; -import org.eclipse.syson.diagram.common.view.services.ViewToolService; -import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService; -import org.eclipse.syson.model.services.aql.ModelMutationAQLService; -import org.eclipse.syson.sysml.SysmlPackage; -import org.eclipse.syson.util.ServiceMethod; -import org.eclipse.syson.util.SysMLMetamodelHelper; - -/** - * Used to add the 'perform' action in actions body for all diagrams. - * - * @author Jerome Gout - */ -public class ReferencingPerformActionNodeToolProvider extends AbstractCompartmentNodeToolProvider { - - @Override - protected String getServiceCallExpression() { - return ServiceMethod.of0(ViewCreateService::createPerformAction).aqlSelf(); - } - - @Override - protected String getNodeToolName() { - return "New Perform"; - } - - @Override - protected boolean revealOnCreate() { - return false; - } - - @Override - protected String getNodeToolIconURLsExpression() { - return "/icons/full/obj16/PerformActionUsage.svg"; - } - - @Override - public NodeTool create(IViewDiagramElementFinder cache) { - var builder = this.diagramBuilderHelper.newNodeTool(); - - var setReferencedFeature = this.viewBuilderHelper.newSetValue() - .featureName("referencedFeature") - .valueExpression("aql:selectedObject"); - - var changeContextReferenceSubsetting = this.viewBuilderHelper.newChangeContext() - .expression("aql:newRefSubsetting") - .children(setReferencedFeature.build()); - - var initializeReferenceSubsetting = this.viewBuilderHelper.newChangeContext() - .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newRefSubsetting")); - - var createReferenceSubsettingInstance = this.viewBuilderHelper.newCreateInstance() - .typeName(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getReferenceSubsetting())) - .referenceName(SysmlPackage.eINSTANCE.getElement_OwnedRelationship().getName()) - .variableName("newRefSubsetting") - .children(initializeReferenceSubsetting.build(), changeContextReferenceSubsetting.build()); - - var changeContextInitializeNewInstance = this.viewBuilderHelper.newChangeContext() - .expression(ServiceMethod.of0(ViewCreateService::elementInitializer).aql("newInstance")); - - var addToExposedElements = this.viewBuilderHelper.newChangeContext() - .expression(ServiceMethod.of4(DiagramMutationAQLService::expose).aqlSelf(IEditingContext.EDITING_CONTEXT, DiagramContext.DIAGRAM_CONTEXT, Node.SELECTED_NODE, - ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE)); - - var changeContextNewInstance = this.viewBuilderHelper.newChangeContext() - .expression("aql:newInstance") - .children(addToExposedElements.build(), createReferenceSubsettingInstance.build()); - - var createEClassInstance = this.viewBuilderHelper.newCreateInstance() - .typeName(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getPerformActionUsage())) - .referenceName(SysmlPackage.eINSTANCE.getRelationship_OwnedRelatedElement().getName()) - .variableName("newInstance") - .children(changeContextNewInstance.build(), changeContextInitializeNewInstance.build()); - - var selectionDialogTree = this.diagramBuilderHelper.newSelectionDialogTreeDescription() - .elementsExpression(ServiceMethod.of0(ViewToolService::getActionReferenceSelectionDialogElements).aql(IEditingContext.EDITING_CONTEXT)) - .childrenExpression(ServiceMethod.of0(ViewToolService::getActionReferenceSelectionDialogChildren).aqlSelf()) - .build(); - - var selectExistingStateUsage = this.diagramBuilderHelper.newSelectionDialogDescription() - .selectionDialogTreeDescription(selectionDialogTree) - .defaultTitleExpression(this.getNodeToolName()) - .descriptionExpression("Select an existing Action to perform:") - .optional(false); - - var createMembership = this.viewBuilderHelper.newChangeContext() - .expression(ServiceMethod.of0(ModelMutationAQLService::createMembership).aqlSelf()) - .children(createEClassInstance.build()); - - return builder - .name(this.getNodeToolName()) - .iconURLsExpression(this.getNodeToolIconURLsExpression()) - .body(createMembership.build()) - .dialogDescription(selectExistingStateUsage.build()) - .preconditionExpression(this.getPreconditionExpression()) - .build(); - } -} diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/PerformActionsCompartmentNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/PerformActionsCompartmentNodeDescriptionProvider.java index a37097d37..6c1f22ed5 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/PerformActionsCompartmentNodeDescriptionProvider.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/PerformActionsCompartmentNodeDescriptionProvider.java @@ -26,7 +26,6 @@ import org.eclipse.syson.diagram.common.view.nodes.AbstractCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.description.ToolConstants; import org.eclipse.syson.diagram.common.view.tools.PerformActionNodeToolProvider; -import org.eclipse.syson.diagram.common.view.tools.ReferencingPerformActionNodeToolProvider; import org.eclipse.syson.util.IDescriptionNameGenerator; /** @@ -75,7 +74,6 @@ protected NodePalette createCompartmentPalette(IViewDiagramElementFinder cache) var toolSections = this.toolDescriptionService.createDefaultNodeToolSections(); // in perform actions compartment only perform action tools are allowed this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(cache)); - this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(cache)); toolSections.add(this.defaultToolsFactory.createDefaultHideRevealNodeToolSection()); this.toolDescriptionService.removeEmptyNodeToolSections(toolSections); diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/SDVNodeToolSectionSwitch.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/SDVNodeToolSectionSwitch.java index e50b6ee6d..75eb482ca 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/SDVNodeToolSectionSwitch.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/SDVNodeToolSectionSwitch.java @@ -49,7 +49,6 @@ import org.eclipse.syson.diagram.common.view.tools.PartUsageInterfaceNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.PartUsageSubsettingNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.PerformActionNodeToolProvider; -import org.eclipse.syson.diagram.common.view.tools.ReferencingPerformActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.SatisfyNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.SatisfyRequirementNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.SetAsCompositeToolProvider; @@ -164,7 +163,6 @@ public List caseActionDefinition(ActionDefinition object) { new AcceptActionNodeToolProvider(SysmlPackage.eINSTANCE.getActionDefinition(), this.descriptionNameGenerator).create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new AssignmentActionNodeToolProvider(SysmlPackage.eINSTANCE.getActionDefinition(), this.descriptionNameGenerator).create(this.cache)); - this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(this.cache)); if (!(object instanceof StateDefinition)) { // StateDefinition has its own "action" creation tools @@ -215,7 +213,6 @@ public List caseActionUsage(ActionUsage object) { new AcceptActionNodeToolProvider(SysmlPackage.eINSTANCE.getActionUsage(), this.descriptionNameGenerator).create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new AssignmentActionNodeToolProvider(SysmlPackage.eINSTANCE.getActionUsage(), this.descriptionNameGenerator).create(this.cache)); - this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ActionFlowCompartmentNodeToolProvider().create(this.cache)); @@ -521,7 +518,6 @@ public List casePartDefinition(PartDefinition object) { this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ActionFlowCompartmentNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new AssignmentActionNodeToolProvider(SysmlPackage.eINSTANCE.getPartDefinition(), this.descriptionNameGenerator).create(this.cache)); - this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ExhibitStateWithReferenceNodeToolProvider(this.descriptionNameGenerator).create(this.cache)); @@ -582,7 +578,6 @@ public List casePartUsage(PartUsage object) { this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ActionFlowCompartmentNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new AssignmentActionNodeToolProvider(SysmlPackage.eINSTANCE.getPartUsage(), this.descriptionNameGenerator).create(this.cache)); - this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ExhibitStateWithReferenceNodeToolProvider(this.descriptionNameGenerator).create(this.cache)); @@ -650,7 +645,6 @@ public List casePerformActionUsage(PerformActionUsage object) { this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ActionFlowCompartmentNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new AssignmentActionNodeToolProvider(SysmlPackage.eINSTANCE.getPerformActionUsage(), this.descriptionNameGenerator).create(this.cache)); - this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider().create(this.cache)); this.createToolsForCompartmentItem(SysmlPackage.eINSTANCE.getUsage_NestedItem(), sections, this.cache); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, new SetAsCompositeToolProvider().create(this.cache)); diff --git a/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc b/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc index 403d599c9..b387b1760 100644 --- a/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc +++ b/doc/content/modules/user-manual/pages/release-notes/2026.5.0.adoc @@ -37,6 +37,7 @@ image::release-notes-stakeholder-node.png[Default representation of Stakeholder ** Improve the tool to create a `Subject` graphical node by making specialization selection optional. ** Improve the tool to create a `FlowUsage` from a `ConnectionUsage` by making the payload selection optional. ** Merge the two objective creation tools into a single tool by leveraging the updated selection dialog which make the specialization selection optional. +** Merge the two perform action creation tools into a single tool by leveraging the updated selection dialog which make the selection of a referenced action optional. * In the _Explorer_ view: