Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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() {
Expand All @@ -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<ToolVariable> 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<Object> diagramCheck = assertRefreshedDiagramThat(newDiagram -> {
var initialDiagram = diagram.get();
Expand Down Expand Up @@ -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() {
Expand All @@ -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<Object> diagramCheck = assertRefreshedDiagramThat(newDiagram -> {
var initialDiagram = diagram.get();
int createdNodesExpectedCount = 13;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -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);
Expand Down
Loading
Loading