From d6d6ce40277fa54cb4eccc40d1466c91283e814d Mon Sep 17 00:00:00 2001 From: Guillaume Coutable Date: Thu, 21 May 2026 16:43:34 +0200 Subject: [PATCH] [2235] Leverage the selection dialog to create framed concern usages Bug: https://github.com/eclipse-syson/syson/issues/2235 Signed-off-by: Guillaume Coutable --- CHANGELOG.adoc | 3 +- .../general/view/GVFramedConcernTests.java | 2 +- .../GVSubNodeRequirementCreationTests.java | 82 ++++++++++++++- .../services/ModelMutationElementService.java | 13 ++- ...amedConcernCompartmentNodeDescription.java | 7 ++ .../view/services/ViewEdgeToolService.java | 2 +- .../common/view/services/ViewToolService.java | 30 ++++++ .../tools/FramedConcernNodeToolProvider.java | 98 ++++++++++++++++++ .../view/SDVDescriptionNameGenerator.java | 3 - .../view/SDVDiagramDescriptionProvider.java | 7 +- .../services/SDVNodeToolSectionSwitch.java | 5 + .../release-notes-framed-concern-tool.png | Bin 50084 -> 45514 bytes .../pages/release-notes/2026.7.0.adoc | 4 +- 13 files changed, 236 insertions(+), 20 deletions(-) create mode 100644 backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index d6ffa3690..c061edd7a 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -29,8 +29,9 @@ - https://github.com/eclipse-syson/syson/issues/2116[#2116] [explorer] In the _Explorer_ view, the items corresponding to the internals of `Expression` elements (syntax tree) are now hidden by default. Disabling the _Hide expression internals_ filter in the _Explorer_ view allows to display them if needed. - https://github.com/eclipse-syson/syson/issues/2112[#2112] [diagrams] Add tools to create _Start_ and _Done_ `StateUsages`, available on `StateUsage` and `StateDefinition` graphical nodes. -- https://github.com/eclipse-syson/syson/issues/2231[#2231] [diagrams] Add a new tools to create a _frame_ `ConcernUsage` from `RequirementUsage` and `RequirementDefinition` graphical nodes. +- https://github.com/eclipse-syson/syson/issues/2231[#2231] [diagrams] Add a new tool to create a _frame_ `ConcernUsage` from `RequirementUsage` and `RequirementDefinition` graphical nodes. - https://github.com/eclipse-syson/syson/issues/2231[#2231] [diagrams] Add the support for the _frames_ compartment graphical node in `RequirementUsage` and `RequirementDefinition` graphical nodes. +- https://github.com/eclipse-syson/syson/issues/2235[#2235] [diagrams] Leverage the selection dialog to improve the graphical node tool creating a _frame_ `ConcernUsage` from `RequirementUsage` and `RequirementDefinition` graphical nodes. == v2026.5.0 diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVFramedConcernTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVFramedConcernTests.java index 5b4c7cf86..859ef3970 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVFramedConcernTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVFramedConcernTests.java @@ -130,7 +130,7 @@ private void createFramedConcernWithEdge(EClass parentEClass, String graphicalSo var edgeCreationToolId = diagramDescriptionIdProvider.getEdgeCreationToolId( this.descriptionNameGenerator.getNodeName(parentEClass), - "New framed Concern"); + "New Framed Concern"); AtomicReference diagram = new AtomicReference<>(); Consumer initialDiagramContentConsumer = assertRefreshedDiagramThat(diagram::set); diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java index ca1cbef7b..e7d87552b 100644 --- a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java +++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVSubNodeRequirementCreationTests.java @@ -30,6 +30,7 @@ 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.core.api.IIdentityService; import org.eclipse.sirius.components.core.api.IObjectSearchService; import org.eclipse.sirius.components.diagrams.Diagram; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; @@ -44,6 +45,7 @@ import org.eclipse.syson.application.controllers.diagrams.testers.ToolTester; import org.eclipse.syson.application.controllers.utils.TestNameGenerator; import org.eclipse.syson.application.data.GeneralViewWithTopNodesTestProjectData; +import org.eclipse.syson.diagram.common.view.nodes.FramedConcernCompartmentItemNodeDescription; import org.eclipse.syson.services.SemanticRunnableFactory; import org.eclipse.syson.services.diagrams.DiagramComparator; import org.eclipse.syson.services.diagrams.DiagramDescriptionIdProvider; @@ -51,8 +53,11 @@ import org.eclipse.syson.services.diagrams.api.IGivenDiagramDescription; import org.eclipse.syson.services.diagrams.api.IGivenDiagramSubscription; import org.eclipse.syson.standard.diagrams.view.SDVDescriptionNameGenerator; +import org.eclipse.syson.sysml.ConcernUsage; import org.eclipse.syson.sysml.Element; +import org.eclipse.syson.sysml.FramedConcernMembership; import org.eclipse.syson.sysml.PartUsage; +import org.eclipse.syson.sysml.ReferenceSubsetting; import org.eclipse.syson.sysml.ReferenceUsage; import org.eclipse.syson.sysml.Specialization; import org.eclipse.syson.sysml.Subsetting; @@ -111,6 +116,9 @@ public class GVSubNodeRequirementCreationTests extends AbstractIntegrationTests @Autowired private DiagramComparator diagramComparator; + @Autowired + private IIdentityService identityService; + private NodeCreationTestsService creationTestsService; private final IDescriptionNameGenerator descriptionNameGenerator = new SDVDescriptionNameGenerator(); @@ -806,10 +814,10 @@ public void createRequirementUsageSiblingNodes(EClass childEClass, EReference co .verify(Duration.ofMinutes(10)); } - @DisplayName("GIVEN a Requirement Usage, WHEN creating a new Framed concern, THEN a new Framed concern is created") + @DisplayName("GIVEN a Requirement Usage, WHEN creating a New Framed Concern without referencing another concern, THEN a New Framed Concern is created") @GivenSysONServer({ GeneralViewWithTopNodesTestProjectData.SCRIPT_PATH }) @Test - public void createRequirementUsageFramedConcern() { + public void createRequirementUsageFramedConcernWithoutSelection() { var flux = this.givenSubscriptionToDiagram(); AtomicReference diagram = new AtomicReference<>(); @@ -821,7 +829,7 @@ public void createRequirementUsageFramedConcern() { EClass parentEClass = SysmlPackage.eINSTANCE.getRequirementUsage(); String targetObjectId = GeneralViewWithTopNodesTestProjectData.SemanticIds.REQUIREMENT_USAGE_ID; - Runnable createNodeRunnable = this.creationTestsService.createNode(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, "New framed Concern"); + Runnable createNodeRunnable = this.creationTestsService.createNodeWithSelectionDialogWithoutSelectionProvided(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, "New Framed Concern"); Consumer diagramCheck = this.diagramCheckerService.siblingNodeGraphicalChecker(diagram, diagramDescriptionIdProvider, SysmlPackage.eINSTANCE.getConcernUsage(), 8, 2); Runnable semanticCheck = this.semanticCheckerService.checkEditingContext(this.semanticCheckerService.getElementInParentSemanticChecker("requirement", SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern(), SysmlPackage.eINSTANCE.getConcernUsage())); @@ -834,6 +842,74 @@ public void createRequirementUsageFramedConcern() { .verify(Duration.ofSeconds(10)); } + @DisplayName("GIVEN a Requirement Usage, WHEN creating a New Framed Concern referencing another concern, THEN a New Framed Concern is created") + @GivenSysONServer({ GeneralViewWithTopNodesTestProjectData.SCRIPT_PATH }) + @Test + public void createRequirementUsageFramedConcernWithSelection() { + var flux = this.givenSubscriptionToDiagram(); + + AtomicReference diagram = new AtomicReference<>(); + Consumer initialDiagramContentConsumer = assertRefreshedDiagramThat(diagram::set); + + var diagramDescription = this.givenDiagramDescription.getDiagramDescription(GeneralViewWithTopNodesTestProjectData.EDITING_CONTEXT_ID, + SysONRepresentationDescriptionIdentifiers.GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID); + var diagramDescriptionIdProvider = new DiagramDescriptionIdProvider(diagramDescription, this.diagramIdProvider); + + EClass parentEClass = SysmlPackage.eINSTANCE.getRequirementUsage(); + String targetObjectId = GeneralViewWithTopNodesTestProjectData.SemanticIds.REQUIREMENT_USAGE_ID; + Runnable createNodeRunnable = this.creationTestsService.createNodeWithSelectionDialogWithSingleSelection(diagramDescriptionIdProvider, diagram, parentEClass, targetObjectId, "New Framed Concern", GeneralViewWithTopNodesTestProjectData.SemanticIds.CONCERN_USAGE_ID); + Consumer diagramCheck = assertRefreshedDiagramThat(newDiagram -> { + new CheckDiagramElementCount(this.diagramComparator) + .hasNewNodeCount(1) + .hasNewEdgeCount(1) + .check(diagram.get(), newDiagram); + + String newNodeDescriptionName = this.descriptionNameGenerator.getCompartmentItemName(SysmlPackage.eINSTANCE.getRequirementUsage(), SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern()) + FramedConcernCompartmentItemNodeDescription.COMPARTMENT_ITEM_NAME; + new CheckNodeInCompartment(diagramDescriptionIdProvider, this.diagramComparator) + .withTargetObjectId(targetObjectId) + .withCompartmentName("frames") + .hasNodeDescriptionName(newNodeDescriptionName) + .hasCompartmentCount(0) + .isHidden() + .check(diagram.get(), newDiagram); + }); + + Consumer additionalCheck = object -> { + assertThat(object).isInstanceOf(List.class) + .asInstanceOf(type(List.class)) + .satisfies(concernUsages -> { + assertThat((List) concernUsages).size().isEqualTo(1); + assertThat(concernUsages.getFirst()) + .isInstanceOf(ConcernUsage.class) + .asInstanceOf(type(ConcernUsage.class)) + .satisfies(concernUsage -> { + assertThat(concernUsage.eContainer()) + .isInstanceOf(FramedConcernMembership.class) + .asInstanceOf(type(FramedConcernMembership.class)) + .satisfies(framedConcernMembership -> { + assertThat(this.identityService.getId(framedConcernMembership.getReferencedConcern())).isEqualTo(GeneralViewWithTopNodesTestProjectData.SemanticIds.CONCERN_USAGE_ID); + assertThat(concernUsage.getOwnedRelationship().getFirst()) + .isInstanceOf(ReferenceSubsetting.class) + .asInstanceOf(type(ReferenceSubsetting.class)) + .satisfies(referenceSubsetting -> { + assertThat(referenceSubsetting.getReferencedFeature()).isEqualTo(framedConcernMembership.getReferencedConcern()); + }); + }); + }); + }); + }; + + Runnable semanticCheck = this.semanticCheckerService.checkEditingContext(this.semanticCheckerService.getElementInParentSemanticChecker("requirement", SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern(), SysmlPackage.eINSTANCE.getConcernUsage(), additionalCheck)); + + StepVerifier.create(flux) + .consumeNextWith(initialDiagramContentConsumer) + .then(createNodeRunnable) + .consumeNextWith(diagramCheck) + .then(semanticCheck) + .thenCancel() + .verify(Duration.ofSeconds(10)); + } + @GivenSysONServer({ GeneralViewWithTopNodesTestProjectData.SCRIPT_PATH }) @ParameterizedTest @MethodSource("requirementUsageChildNodeParameters") diff --git a/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/ModelMutationElementService.java b/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/ModelMutationElementService.java index 34d03616c..e740334af 100644 --- a/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/ModelMutationElementService.java +++ b/backend/services/syson-model-services/src/main/java/org/eclipse/syson/model/services/ModelMutationElementService.java @@ -220,13 +220,16 @@ public FramedConcernMembership createFramedConcern(Type type, ConcernUsage conce var newConcernUsage = SysmlFactory.eINSTANCE.createConcernUsage(); newFramedConcernMembership.getOwnedRelatedElement().add(newConcernUsage); - var newReferenceSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting(); - newConcernUsage.getOwnedRelationship().add(newReferenceSubsetting); - newReferenceSubsetting.setReferencedFeature(concernUsage); - this.metamodelMutationElementService.initialize(newFramedConcernMembership); this.metamodelMutationElementService.initialize(newConcernUsage); - this.metamodelMutationElementService.initialize(newReferenceSubsetting); + + if (concernUsage != null) { + var newReferenceSubsetting = SysmlFactory.eINSTANCE.createReferenceSubsetting(); + newConcernUsage.getOwnedRelationship().add(newReferenceSubsetting); + newReferenceSubsetting.setReferencedFeature(concernUsage); + this.metamodelMutationElementService.initialize(newReferenceSubsetting); + } + return newFramedConcernMembership; } return null; diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/FramedConcernCompartmentNodeDescription.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/FramedConcernCompartmentNodeDescription.java index 955536cec..b38f95b84 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/FramedConcernCompartmentNodeDescription.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/FramedConcernCompartmentNodeDescription.java @@ -18,8 +18,10 @@ import org.eclipse.emf.ecore.EReference; import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder; import org.eclipse.sirius.components.view.builder.providers.IColorProvider; +import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider; import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.NodeDescription; +import org.eclipse.syson.diagram.common.view.tools.FramedConcernNodeToolProvider; import org.eclipse.syson.util.IDescriptionNameGenerator; /** @@ -54,6 +56,11 @@ public void link(DiagramDescription diagramDescription, IViewDiagramElementFinde }); } + @Override + protected List getItemCreationToolProviders() { + return List.of(new FramedConcernNodeToolProvider()); + } + @Override protected List getDroppableNodes(IViewDiagramElementFinder cache) { return List.of(); diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java index 1bc3c8d3e..23872290c 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewEdgeToolService.java @@ -676,7 +676,7 @@ public EdgeTool createFramedConcernEdgeTool() { .ifPresent(targetNodeDescriptions::add); return builder - .name(this.nameGenerator.getCreationToolName("New framed ", SysmlPackage.eINSTANCE.getConcernUsage())) + .name(this.nameGenerator.getCreationToolName("New Framed ", SysmlPackage.eINSTANCE.getConcernUsage())) .iconURLsExpression(METAMODEL_ICONS_PATH + SysmlPackage.eINSTANCE.getFramedConcernMembership().getName() + SVG) .body(body.build()) .targetElementDescriptions(targetNodeDescriptions.toArray(NodeDescription[]::new)) diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java index 2fd70e55e..226c5af5c 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/services/ViewToolService.java @@ -607,6 +607,36 @@ public List getExhibitStateSelectionDialogChildren(Object sele return this.getChildrenWithInstancesOf(selectionDialogTreeElement, editingContext, expandedIds, List.of(SysmlPackage.eINSTANCE.getStateUsage())); } + /** + * Provides the root elements in the tree of the selection dialog for presenting all existing ConcernUsage. + * + * @param editingContext + * the (non-{@code null}) {@link IEditingContext}. + * @return the (non-{@code null}) {@link List} of all {@link Resource} and {@link ISysONExplorerFragment} that + * contain at least one {@link org.eclipse.syson.sysml.ConcernUsage}. + */ + public List getConcernReferenceSelectionDialogElements(IEditingContext editingContext) { + return this.getAllResourcesWithInstancesOf(editingContext, List.of(SysmlPackage.eINSTANCE.getConcernUsage())); + } + + /** + * Provides the children of element in the tree of the selection dialog for presenting all existing ConcernUsage. + * + * @param selectionDialogTreeElement + * a (non-{@code null}) selection dialog tree element. + * @param editingContext + * the (non-{@code null}) {@link IEditingContext}. + * @param expandedIds + * the list of already expanded treeItems, by their Ids. + * @return the (non-{@code null}) {@link List} of all children that contain (possibly indirectly) an + * {@link org.eclipse.syson.sysml.ConcernUsage}. + */ + public List getConcernReferenceSelectionDialogChildren(Object selectionDialogTreeElement, IEditingContext editingContext, List expandedIds) { + return this.getChildrenWithInstancesOf(selectionDialogTreeElement, editingContext, expandedIds, List.of(SysmlPackage.eINSTANCE.getConcernUsage())); + } + + + /** * Provides the root elements in the tree of the selection dialog for the any creation tool. * diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java new file mode 100644 index 000000000..6ae05a681 --- /dev/null +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/FramedConcernNodeToolProvider.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 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.trees.renderer.TreeRenderer; +import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder; +import org.eclipse.sirius.components.view.builder.generated.diagram.DiagramBuilders; +import org.eclipse.sirius.components.view.builder.generated.view.ViewBuilders; +import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider; +import org.eclipse.sirius.components.view.diagram.DialogDescription; +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.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.AQLConstants; +import org.eclipse.syson.util.ServiceMethod; +import org.eclipse.syson.util.SysMLMetamodelHelper; + +/** + * Used to create a Framed {@link org.eclipse.syson.sysml.ConcernUsage} in a {@link org.eclipse.syson.sysml.RequirementUsage} or a {@link org.eclipse.syson.sysml.RequirementDefinition}. + * + * @author gcoutable + */ +public class FramedConcernNodeToolProvider implements INodeToolProvider { + + private final DiagramBuilders diagramBuilderHelper = new DiagramBuilders(); + + private final ViewBuilders viewBuilderHelper = new ViewBuilders(); + + @Override + public NodeTool create(IViewDiagramElementFinder cache) { + var builder = this.diagramBuilderHelper.newNodeTool(); + + var updateExposedElements = this.viewBuilderHelper.newChangeContext() + .expression(ServiceMethod.of4(DiagramMutationAQLService::expose).aqlSelf(IEditingContext.EDITING_CONTEXT, DiagramContext.DIAGRAM_CONTEXT, Node.SELECTED_NODE, + ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE)); + + var selectedElementToExpose = this.viewBuilderHelper.newChangeContext() + .expression(AQLConstants.AQL_SELF + "." + SysmlPackage.eINSTANCE.getFramedConcernMembership_ReferencedConcern().getName()) + .children(updateExposedElements.build()); + + var body = this.viewBuilderHelper.newChangeContext() + .expression(ServiceMethod.of1(ModelMutationAQLService::createFramedConcern).aqlSelf("selectedObject")) + .children(selectedElementToExpose.build()); + + return builder + .name(this.getToolName()) + .iconURLsExpression("/icons/full/obj16/ConcernUsage.svg") + .body(body.build()) + .dialogDescription(this.getSelectionDialogDescription()) + .build(); + } + + private String getToolName() { + return "New Framed Concern"; + } + + private DialogDescription getSelectionDialogDescription() { + String concernUsageType = SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getConcernUsage()); + + var selectionDialogTree = this.diagramBuilderHelper.newSelectionDialogTreeDescription() + .isSelectableExpression(AQLConstants.AQL_SELF + ".oclIsKindOf(" + concernUsageType + ")") + .elementsExpression(ServiceMethod.of0(ViewToolService::getConcernReferenceSelectionDialogElements).aql(IEditingContext.EDITING_CONTEXT)) + .childrenExpression(ServiceMethod.of2(ViewToolService::getConcernReferenceSelectionDialogChildren).aqlSelf(IEditingContext.EDITING_CONTEXT, TreeRenderer.EXPANDED)) + .build(); + + return this.diagramBuilderHelper.newSelectionDialogDescription() + .selectionDialogTreeDescription(selectionDialogTree) + .defaultTitleExpression(this.getToolName()) + .noSelectionTitleExpression(this.getToolName()) + .withSelectionTitleExpression(this.getToolName()) + .descriptionExpression("Create a Framed Concern") + .noSelectionActionLabelExpression("Create a New Framed Concern") + .noSelectionActionDescriptionExpression("Create a New Framed Concern without referencing an existing Concern") + .withSelectionActionLabelExpression("Select an existing Concern to frame") + .withSelectionActionDescriptionExpression("Create a New Framed Concern referencing the selected Concern") + .noSelectionActionStatusMessageExpression("It will create a New Framed Concern without referencing an existing Concern") + .selectionRequiredWithoutSelectionStatusMessageExpression("Select on Concern to frame") + .selectionRequiredWithSelectionStatusMessageExpression(AQLConstants.AQL + "'It will create a new Concern referencing ' + selectedObjects->first().name") + .optional(true) + .build(); + } +} diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionNameGenerator.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionNameGenerator.java index 6a13879ea..8ad77a1df 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionNameGenerator.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDescriptionNameGenerator.java @@ -42,9 +42,6 @@ public String getCreationToolName(EReference eReference) { } else if (SysmlPackage.eINSTANCE.getRequirementUsage_RequiredConstraint().equals(eReference) || SysmlPackage.eINSTANCE.getRequirementDefinition_RequiredConstraint().equals(eReference)) { name = "New Require constraint"; - } else if (SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern().equals(eReference) - || SysmlPackage.eINSTANCE.getRequirementDefinition_FramedConcern().equals(eReference)) { - name = "New framed Concern"; } return name; } diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java index d707f999c..00e3626df 100644 --- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java +++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/SDVDiagramDescriptionProvider.java @@ -231,8 +231,8 @@ public class SDVDiagramDescriptionProvider implements IRepresentationDescription Map.entry(SysmlPackage.eINSTANCE.getPerformActionUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedItem(), SysmlPackage.eINSTANCE.getUsage_NestedAction())), Map.entry(SysmlPackage.eINSTANCE.getPortDefinition(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getDefinition_OwnedAttribute(), SysmlPackage.eINSTANCE.getDefinition_OwnedPort(), SysmlPackage.eINSTANCE.getDefinition_OwnedReference(), SysmlPackage.eINSTANCE.getDefinition_OwnedItem())), Map.entry(SysmlPackage.eINSTANCE.getPortUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), SysmlPackage.eINSTANCE.getUsage_NestedReference(), SysmlPackage.eINSTANCE.getUsage_NestedPort(), SysmlPackage.eINSTANCE.getUsage_NestedItem())), - Map.entry(SysmlPackage.eINSTANCE.getRequirementDefinition(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getDefinition_OwnedAttribute(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), SysmlPackage.eINSTANCE.getDefinition_OwnedRequirement(), SysmlPackage.eINSTANCE.getRequirementDefinition_AssumedConstraint(), SysmlPackage.eINSTANCE.getRequirementDefinition_RequiredConstraint(), SysmlPackage.eINSTANCE.getRequirementDefinition_FramedConcern())), - Map.entry(SysmlPackage.eINSTANCE.getRequirementUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), SysmlPackage.eINSTANCE.getRequirementUsage_AssumedConstraint(), SysmlPackage.eINSTANCE.getRequirementUsage_RequiredConstraint(), SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern(), SysmlPackage.eINSTANCE.getUsage_NestedPort())), + Map.entry(SysmlPackage.eINSTANCE.getRequirementDefinition(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getDefinition_OwnedAttribute(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), SysmlPackage.eINSTANCE.getDefinition_OwnedRequirement(), SysmlPackage.eINSTANCE.getRequirementDefinition_AssumedConstraint(), SysmlPackage.eINSTANCE.getRequirementDefinition_RequiredConstraint())), + Map.entry(SysmlPackage.eINSTANCE.getRequirementUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), SysmlPackage.eINSTANCE.getRequirementUsage_ActorParameter(), SysmlPackage.eINSTANCE.getRequirementUsage_AssumedConstraint(), SysmlPackage.eINSTANCE.getRequirementUsage_RequiredConstraint(), SysmlPackage.eINSTANCE.getUsage_NestedPort())), Map.entry(SysmlPackage.eINSTANCE.getSatisfyRequirementUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), SysmlPackage.eINSTANCE.getRequirementUsage_AssumedConstraint(), SysmlPackage.eINSTANCE.getRequirementUsage_RequiredConstraint(), SysmlPackage.eINSTANCE.getUsage_NestedPort())), Map.entry(SysmlPackage.eINSTANCE.getStateDefinition(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), SysmlPackage.eINSTANCE.getDefinition_OwnedState())), Map.entry(SysmlPackage.eINSTANCE.getStateUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), SysmlPackage.eINSTANCE.getUsage_NestedState())), @@ -639,9 +639,6 @@ private List> createCompartmentsForListIte } else if (SysmlPackage.eINSTANCE.getPortUsage().equals(eClass) && SysmlPackage.eINSTANCE.getUsage_NestedItem().equals(eReference)) { compartmentNodeDescriptionProviders.add(new CompartmentNodeDescriptionProvider(eClass, eReference, colorProvider)); compartmentNodeDescriptionProviders.add(new PortUsageNestedItemCompartmentItemNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator())); - } else if (SysmlPackage.eINSTANCE.getRequirementDefinition().equals(eClass) && SysmlPackage.eINSTANCE.getRequirementDefinition_FramedConcern().equals(eReference) - || SysmlPackage.eINSTANCE.getRequirementUsage().equals(eClass) && SysmlPackage.eINSTANCE.getRequirementUsage_FramedConcern().equals(eReference)) { - compartmentNodeDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(eClass, eReference, colorProvider, this.getDescriptionNameGenerator())); } else { compartmentNodeDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(eClass, eReference, colorProvider, this.getDescriptionNameGenerator())); compartmentNodeDescriptionProviders.add(new CompartmentNodeDescriptionProvider(eClass, eReference, colorProvider)); 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 4d13515ec..b44f8f24c 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 @@ -37,6 +37,7 @@ import org.eclipse.syson.diagram.common.view.tools.DoneStateNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.ExhibitStateNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.ForkActionNodeToolProvider; +import org.eclipse.syson.diagram.common.view.tools.FramedConcernNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.InterfaceDefinitionEndCompartmentNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.JoinActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.MergeActionNodeToolProvider; @@ -698,6 +699,8 @@ public List caseRequirementUsage(RequirementUsage object) { this.toolDescriptionService.createNodeTool(this.getNodeDescription(SysmlPackage.eINSTANCE.getPartUsage()), SysmlPackage.eINSTANCE.getPartUsage())); this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.toolDescriptionService.createNodeTool(this.getNodeDescription(SysmlPackage.eINSTANCE.getRequirementUsage()), SysmlPackage.eINSTANCE.getRequirementUsage())); + this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, + new FramedConcernNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool()); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool()); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewStakeholderNodeTool()); @@ -718,6 +721,8 @@ public List caseRequirementUsage(RequirementUsage object) { @Override public List caseRequirementDefinition(RequirementDefinition object) { var sections = this.toolDescriptionService.createDefaultNodeToolSections(); + this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, + new FramedConcernNodeToolProvider().create(this.cache)); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool()); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool()); this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewStakeholderNodeTool()); diff --git a/doc/content/modules/user-manual/assets/images/release-notes-framed-concern-tool.png b/doc/content/modules/user-manual/assets/images/release-notes-framed-concern-tool.png index aaf269a36840acb66c615f8e3ee29f0ebd25c49a..1f6c846b77648dfa83cf800c1bc983e1b1b43c6c 100644 GIT binary patch literal 45514 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 H8~6VM56iTA literal 50084 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
3Ju=2(o|z?lQ=l|H>_#bo^CpMT>$~QuskU%w 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 z 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 CJfltk diff --git a/doc/content/modules/user-manual/pages/release-notes/2026.7.0.adoc b/doc/content/modules/user-manual/pages/release-notes/2026.7.0.adoc index 8baf5785c..5caee155a 100644 --- a/doc/content/modules/user-manual/pages/release-notes/2026.7.0.adoc +++ b/doc/content/modules/user-manual/pages/release-notes/2026.7.0.adoc @@ -19,7 +19,7 @@ image::release-notes-frame-edge.png[Frame edge between a RequirementUsage and a + image::release-notes-start-done-states.png[Tool to create a start and done, width=60%,height=60%] -** Add a new tools to create a _frame_ `ConcernUsage` from `RequirementUsage` and `RequirementDefinition` graphical nodes. +** Add a new tool to create a _frame_ `ConcernUsage` from `RequirementUsage` and `RequirementDefinition` graphical nodes. + image::release-notes-framed-concern-tool.png[Tool to create a _frame_ concern usage, width=60%,height=60%] @@ -27,6 +27,8 @@ image::release-notes-framed-concern-tool.png[Tool to create a _frame_ concern us + image::release-notes-frames-compartment.png[frames compartment displaying concern usages of a requirement, width=60%,height=60%] +** Leverage the selection dialog to improve the graphical node tool creating a _frame_ `ConcernUsage` from `RequirementUsage` and `RequirementDefinition` graphical nodes. + * In the _Explorer_ view: ** The tree items corresponding to the internals of `Expression` elements (syntax tree) are now hidden by default.