From de69c16323476bad7d4fbd187d11241727d26828 Mon Sep 17 00:00:00 2001 From: Jerome Gout Date: Wed, 17 Jun 2026 17:18:37 +0200 Subject: [PATCH] [2113] Handle control node graphical nodes on AFV diagram background Bug:https://github.com/eclipse-syson/syson/issues/2113 Signed-off-by: Jerome Gout --- ...trolNodeActionNodeDescriptionProvider.java | 3 +-- .../AbstractFakeNodeDescriptionProvider.java | 12 ---------- ...DecisionActionNodeDescriptionProvider.java | 2 +- .../DoneActionNodeDescriptionProvider.java | 3 +-- .../ForkActionNodeDescriptionProvider.java | 2 +- .../JoinActionNodeDescriptionProvider.java | 2 +- .../MergeActionNodeDescriptionProvider.java | 2 +- .../StartActionNodeDescriptionProvider.java | 3 +-- .../common/view/services/ViewToolService.java | 11 +++++++++ ...ctFreeFormCompartmentNodeToolProvider.java | 24 +++++++++++++++---- .../tools/DecisionActionNodeToolProvider.java | 7 ++++++ .../tools/DoneActionNodeToolProvider.java | 7 ++++++ .../tools/ForkActionNodeToolProvider.java | 7 ++++++ .../tools/JoinActionNodeToolProvider.java | 7 ++++++ .../tools/MergeActionNodeToolProvider.java | 7 ++++++ .../tools/StartActionNodeToolProvider.java | 7 ++++++ .../view/SDVDiagramDescriptionProvider.java | 20 ++++++++++++++++ 17 files changed, 99 insertions(+), 27 deletions(-) diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractControlNodeActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractControlNodeActionNodeDescriptionProvider.java index eb8cafb55..3393bc4cc 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractControlNodeActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractControlNodeActionNodeDescriptionProvider.java @@ -129,9 +129,8 @@ private OutsideLabelStyle createOutsideLabelStyle() { @Override public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) { - // this nodeDescription has not been added to the diagramDescription children but to the fakeNodeDescription - // children instead cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(this.getNodeDescriptionName())).ifPresent(nodeDescription -> { + diagramDescription.getNodeDescriptions().add(nodeDescription); nodeDescription.setPalette(this.createNodePalette(cache)); }); } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractFakeNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractFakeNodeDescriptionProvider.java index 5e378b53f..fc2dd2ad1 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractFakeNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractFakeNodeDescriptionProvider.java @@ -112,18 +112,6 @@ protected NodeStyleDescription createFakeNodeStyle() { } protected void addReusableCustomNodes(IViewDiagramElementFinder cache, List childrenNodes) { - cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DecisionActionNodeDescriptionProvider.DECISION_ACTION_NAME)) - .ifPresent(childrenNodes::add); - cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(ForkActionNodeDescriptionProvider.FORK_ACTION_NAME)) - .ifPresent(childrenNodes::add); - cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(JoinActionNodeDescriptionProvider.JOIN_ACTION_NAME)) - .ifPresent(childrenNodes::add); - cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(MergeActionNodeDescriptionProvider.MERGE_ACTION_NAME)) - .ifPresent(childrenNodes::add); - cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(StartActionNodeDescriptionProvider.START_ACTION_NAME)) - .ifPresent(childrenNodes::add); - cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DoneActionNodeDescriptionProvider.DONE_ACTION_NAME)) - .ifPresent(childrenNodes::add); cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(StartStateNodeDescriptionProvider.START_STATE_NAME)) .ifPresent(childrenNodes::add); cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DoneStateNodeDescriptionProvider.DONE_STATE_NAME)) diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DecisionActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DecisionActionNodeDescriptionProvider.java index f33c99465..2eafcf81e 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DecisionActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DecisionActionNodeDescriptionProvider.java @@ -26,7 +26,7 @@ */ public class DecisionActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider { - public static final String DECISION_ACTION_NAME = "DecisionAction"; + public static final String DECISION_ACTION_NAME = SysmlPackage.eINSTANCE.getDecisionNode().getName(); public DecisionActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) { super(colorProvider, descriptionNameGenerator); diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DoneActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DoneActionNodeDescriptionProvider.java index 90d45bba2..0f85e3923 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DoneActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/DoneActionNodeDescriptionProvider.java @@ -61,9 +61,8 @@ public NodeDescription create() { @Override public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) { - // this nodeDescription has not been added to the diagramDescription children but to the fakeNodeDescription - // children instead cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(DONE_ACTION_NAME)).ifPresent(nodeDescription -> { + diagramDescription.getNodeDescriptions().add(nodeDescription); nodeDescription.setPalette(this.createNodePalette()); }); } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ForkActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ForkActionNodeDescriptionProvider.java index d2335b9e8..96c93efab 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ForkActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/ForkActionNodeDescriptionProvider.java @@ -26,7 +26,7 @@ */ public class ForkActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider { - public static final String FORK_ACTION_NAME = "ForkAction"; + public static final String FORK_ACTION_NAME = SysmlPackage.eINSTANCE.getForkNode().getName(); public ForkActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) { super(colorProvider, descriptionNameGenerator); diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/JoinActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/JoinActionNodeDescriptionProvider.java index b51a0f841..01774f0e3 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/JoinActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/JoinActionNodeDescriptionProvider.java @@ -26,7 +26,7 @@ */ public class JoinActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider { - public static final String JOIN_ACTION_NAME = "JoinAction"; + public static final String JOIN_ACTION_NAME = SysmlPackage.eINSTANCE.getJoinNode().getName(); public JoinActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) { super(colorProvider, descriptionNameGenerator); diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/MergeActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/MergeActionNodeDescriptionProvider.java index f087cbcaf..709591dd5 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/MergeActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/MergeActionNodeDescriptionProvider.java @@ -26,7 +26,7 @@ */ public class MergeActionNodeDescriptionProvider extends AbstractControlNodeActionNodeDescriptionProvider { - public static final String MERGE_ACTION_NAME = "MergeAction"; + public static final String MERGE_ACTION_NAME = SysmlPackage.eINSTANCE.getMergeNode().getName(); public MergeActionNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) { super(colorProvider, descriptionNameGenerator); diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java index 2f556ccf8..9d2a9f5b4 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/StartActionNodeDescriptionProvider.java @@ -68,9 +68,8 @@ public NodeDescription create() { @Override public void link(DiagramDescription diagramDescription, IViewDiagramElementFinder cache) { - // this nodeDescription has not been added to the diagramDescription children but to the fakeNodeDescription - // children instead cache.getNodeDescription(this.descriptionNameGenerator.getNodeName(START_ACTION_NAME)).ifPresent(nodeDescription -> { + diagramDescription.getNodeDescriptions().add(nodeDescription); nodeDescription.setPalette(this.createNodePalette(cache)); }); } 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 06d27d6cf..c9ff8d646 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 @@ -98,6 +98,17 @@ public ViewToolService(IIdentityService identityService, IObjectSearchService ob this.labelService = Objects.requireNonNull(labelService); } + /** + * Check if a tool that will create a control node action (start, done, decision, fork, join, merge) should be available or not. + * @param element the given {@link Element}. + * @return true if the tool should be available, false otherwise. + */ + public boolean isControlNodeActionCreationToolInsideActionOnAFV(Element element, IEditingContext editingContext) { + ViewDefinitionKind viewDefinitionKind = this.utilService.getViewDefinitionKind(element, List.of(), editingContext); + var owner = this.utilService.getViewUsageOwner(element); + return viewDefinitionKind == ViewDefinitionKind.ACTION_FLOW_VIEW && (owner instanceof ActionUsage || owner instanceof ActionDefinition); + } + /** * Check if a tool that will create an instance of the given type should be available for a diagram associated to * the given {@link Element}. diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AbstractFreeFormCompartmentNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AbstractFreeFormCompartmentNodeToolProvider.java index 663a72ca1..0b301aa75 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AbstractFreeFormCompartmentNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/AbstractFreeFormCompartmentNodeToolProvider.java @@ -25,6 +25,8 @@ import org.eclipse.sirius.components.view.diagram.NodeTool; import org.eclipse.sirius.components.view.emf.diagram.ViewDiagramDescriptionConverter; import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService; +import org.eclipse.syson.services.UtilService; +import org.eclipse.syson.util.AQLConstants; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -115,18 +117,30 @@ public NodeTool create(IViewDiagramElementFinder cache) { ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE)); var revealOperation = this.viewBuilderHelper.newChangeContext() - .expression(ServiceMethod.of4(DiagramMutationAQLService::revealCompartment) - .aql(Node.SELECTED_NODE, "self", DiagramContext.DIAGRAM_CONTEXT, IEditingContext.EDITING_CONTEXT, ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE)); + .expression(ServiceMethod.of4(DiagramMutationAQLService::revealCompartment).aql(Node.SELECTED_NODE, AQLConstants.SELF, DiagramContext.DIAGRAM_CONTEXT, IEditingContext.EDITING_CONTEXT, + ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE)); + + var conditionalRevealOperation = this.viewBuilderHelper.newIf() + .conditionExpression(AQLConstants.AQL + Node.SELECTED_NODE + " <> null") + .children(revealOperation.build()); - var creationServiceCall = this.viewBuilderHelper.newChangeContext() + var changeContextCreateInstance = this.viewBuilderHelper.newChangeContext() .expression(this.getCreationServiceCallExpression()) - .children(addToExposedElements.build(), revealOperation.build()); + .children(conditionalRevealOperation.build(), addToExposedElements.build()); + + var changeContextViewUsageOwner = this.viewBuilderHelper.newChangeContext() + .expression(ServiceMethod.of0(UtilService::getViewUsageOwner).aqlSelf()) + .children(changeContextCreateInstance.build()); + + var changeContextRoot = this.viewBuilderHelper.newChangeContext() + .expression(AQLConstants.AQL_SELF) + .children(changeContextViewUsageOwner.build()); String preconditionExpression = this.getPreconditionServiceCallExpression(); return builder.name(this.getLabel()) .iconURLsExpression(this.getIconPath()) - .body(creationServiceCall.build()) + .body(changeContextRoot.build()) .preconditionExpression(preconditionExpression) .build(); } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java index 45690c332..0504ff773 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DecisionActionNodeToolProvider.java @@ -13,9 +13,11 @@ package org.eclipse.syson.diagram.common.view.tools; import org.eclipse.emf.ecore.EClass; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.DecisionActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -49,4 +51,9 @@ protected String getLabel() { protected String getIconPath() { return "/icons/full/obj16/DecisionNode.svg"; } + + @Override + protected String getPreconditionServiceCallExpression() { + return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT); + } } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java index 6bd9f8396..46cf65412 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/DoneActionNodeToolProvider.java @@ -13,9 +13,11 @@ package org.eclipse.syson.diagram.common.view.tools; import org.eclipse.emf.ecore.EClass; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.DoneActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -49,4 +51,9 @@ protected String getLabel() { protected String getIconPath() { return "/icons/done_action.svg"; } + + @Override + protected String getPreconditionServiceCallExpression() { + return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT); + } } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java index dd369a2de..e8e6b85d4 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ForkActionNodeToolProvider.java @@ -13,9 +13,11 @@ package org.eclipse.syson.diagram.common.view.tools; import org.eclipse.emf.ecore.EClass; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.ForkActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -49,4 +51,9 @@ protected String getLabel() { protected String getIconPath() { return "/icons/full/obj16/ForkNode.svg"; } + + @Override + protected String getPreconditionServiceCallExpression() { + return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT); + } } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java index b68b8fb7f..8a78a64db 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/JoinActionNodeToolProvider.java @@ -13,9 +13,11 @@ package org.eclipse.syson.diagram.common.view.tools; import org.eclipse.emf.ecore.EClass; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.JoinActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -49,4 +51,9 @@ protected String getLabel() { protected String getIconPath() { return "/icons/full/obj16/JoinNode.svg"; } + + @Override + protected String getPreconditionServiceCallExpression() { + return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT); + } } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java index 682bbf7c9..2949409aa 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/MergeActionNodeToolProvider.java @@ -13,9 +13,11 @@ package org.eclipse.syson.diagram.common.view.tools; import org.eclipse.emf.ecore.EClass; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.MergeActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -49,4 +51,9 @@ protected String getLabel() { protected String getIconPath() { return "/icons/full/obj16/MergeNode.svg"; } + + @Override + protected String getPreconditionServiceCallExpression() { + return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT); + } } diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java index 52af78d04..30733d520 100644 --- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java +++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/StartActionNodeToolProvider.java @@ -13,9 +13,11 @@ package org.eclipse.syson.diagram.common.view.tools; import org.eclipse.emf.ecore.EClass; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.nodes.StartActionNodeDescriptionProvider; import org.eclipse.syson.diagram.common.view.services.ViewCreateService; +import org.eclipse.syson.diagram.common.view.services.ViewToolService; import org.eclipse.syson.util.IDescriptionNameGenerator; import org.eclipse.syson.util.ServiceMethod; @@ -49,4 +51,9 @@ protected String getLabel() { protected String getIconPath() { return "/icons/start_action.svg"; } + + @Override + protected String getPreconditionServiceCallExpression() { + return ServiceMethod.of1(ViewToolService::isControlNodeActionCreationToolInsideActionOnAFV).aqlSelf(IEditingContext.EDITING_CONTEXT); + } } 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 ce2d2bd5d..99a4becd0 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 @@ -73,9 +73,15 @@ import org.eclipse.syson.diagram.common.view.services.ViewCreateService; import org.eclipse.syson.diagram.common.view.services.description.ToolConstants; import org.eclipse.syson.diagram.common.view.services.description.ToolDescriptionService; +import org.eclipse.syson.diagram.common.view.tools.DecisionActionNodeToolProvider; +import org.eclipse.syson.diagram.common.view.tools.DoneActionNodeToolProvider; 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.JoinActionNodeToolProvider; +import org.eclipse.syson.diagram.common.view.tools.MergeActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.NamespaceImportNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.SetAsViewToolProvider; +import org.eclipse.syson.diagram.common.view.tools.StartActionNodeToolProvider; import org.eclipse.syson.diagram.common.view.tools.ToolSectionDescription; import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService; import org.eclipse.syson.standard.diagrams.view.edges.AllocateEdgeDescriptionProvider; @@ -1101,6 +1107,14 @@ private List> createAllUsageBehaviorCompos colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getActionUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), colorProvider, this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getDecisionNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), + colorProvider, this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getForkNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), + colorProvider, this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getJoinNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), + colorProvider, this.getDescriptionNameGenerator())); + usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getMergeNode(), SysmlPackage.eINSTANCE.getUsage_NestedAction(), + colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getAllocationUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAllocation(), colorProvider, this.getDescriptionNameGenerator())); usageCompositeEdgeDescriptionProviders.add(new UsageNestedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getExhibitStateUsage(), SysmlPackage.eINSTANCE.getUsage_NestedState(), @@ -1629,6 +1643,12 @@ private List addCustomTools(IViewDiagramElementFinder cache, String se if (BEHAVIOR_TOOL_SECTION.name().equals(sectionName)) { nodeTools.add(new ExhibitStateNodeToolProvider(false).create(cache)); nodeTools.add(new ExhibitStateNodeToolProvider(true).create(cache)); + nodeTools.add(new StartActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache)); + nodeTools.add(new DoneActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache)); + nodeTools.add(new JoinActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache)); + nodeTools.add(new DecisionActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache)); + nodeTools.add(new ForkActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache)); + nodeTools.add(new MergeActionNodeToolProvider(null, this.getDescriptionNameGenerator()).create(cache)); } else if (STRUCTURE_TOOL_SECTION.name().equals(sectionName)) { NodeDescription nodeDescription = cache.getNodeDescription(this.getDescriptionNameGenerator().getNodeName(SysmlPackage.eINSTANCE.getNamespaceImport())).orElse(null); nodeTools.add(new NamespaceImportNodeToolProvider(nodeDescription, this.getDescriptionNameGenerator()).create(cache));