Skip to content

Commit 4737e0b

Browse files
gcoutableAxelRICHARD
authored andcommitted
[2137] Merge the two objective requirement creation tools
Bug: #2137 Signed-off-by: Guillaume Coutable <guillaume.coutable@obeo.fr>
1 parent 5a9f183 commit 4737e0b

11 files changed

Lines changed: 389 additions & 90 deletions

File tree

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ Stakeholders are by default represented with a dedicated graphical node connecte
6868
- https://github.com/eclipse-syson/syson/issues/2122[#2122] [diagrams] Leverage the latest change of the selection dialog to allow creating a `Subject` graphical node without specialization.
6969
- 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`
7070
- https://github.com/eclipse-syson/syson/issues/2105[#2105] [explorer] In the _Explorer_ view, `Expression` elements now display their full textual representation.
71+
- 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.
7172

7273
=== New features
7374

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVObjectiveDocumentationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
import reactor.test.StepVerifier;
5656

5757
/**
58-
* Objective compartment related tests.
58+
* Objective documentation compartment related tests.
5959
*
6060
* @author arichard
6161
*/

backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/diagrams/general/view/GVObjectiveTests.java

Lines changed: 355 additions & 0 deletions
Large diffs are not rendered by default.

backend/application/syson-application/src/test/resources/scripts/database-content/GeneralView-IncludeUseCaseUsage.sql

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

backend/application/syson-application/src/test/resources/scripts/database-content/SysON-Studio.sql

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ObjectiveRequirementCompartmentNodeToolProvider.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@
1212
*******************************************************************************/
1313
package org.eclipse.syson.diagram.common.view.tools;
1414

15+
import org.eclipse.sirius.components.view.diagram.SelectionDialogDescription;
1516
import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
17+
import org.eclipse.syson.diagram.services.aql.DiagramQueryAQLService;
1618
import org.eclipse.syson.sysml.RequirementUsage;
19+
import org.eclipse.syson.util.AQLConstants;
1720
import org.eclipse.syson.util.ServiceMethod;
1821

1922
/**
2023
* Node tool provider for objective compartment in the element that need such compartment.
24+
*
2125
* <p>
22-
* This tool creates a new {@link RequirementUsage} and sets it as the objective of the containing element.
26+
* This tool opens a selection dialog to create a {@link RequirementUsage} that serves as an objective.
27+
* The user can choose to create it as a standalone element or select an existing requirement to be set as its type or subset.
2328
* </p>
2429
*
2530
* @author Jerome Gout
@@ -28,7 +33,29 @@ public class ObjectiveRequirementCompartmentNodeToolProvider extends AbstractCom
2833

2934
@Override
3035
protected String getServiceCallExpression() {
31-
return ServiceMethod.of1(ViewCreateService::createRequirementUsageAsObjectiveRequirement).aqlSelf("null");
36+
return ServiceMethod.of1(ViewCreateService::createRequirementUsageAsObjectiveRequirement).aqlSelf("selectedObject");
37+
}
38+
39+
@Override
40+
protected SelectionDialogDescription getSelectionDialogDescription() {
41+
var selectionDialogTree = this.diagramBuilderHelper.newSelectionDialogTreeDescription()
42+
.elementsExpression(ServiceMethod.of0(DiagramQueryAQLService::getAllReachableRequirements).aqlSelf())
43+
.build();
44+
return this.diagramBuilderHelper.newSelectionDialogDescription()
45+
.selectionDialogTreeDescription(selectionDialogTree)
46+
.defaultTitleExpression(this.getNodeToolName())
47+
.noSelectionTitleExpression(this.getNodeToolName())
48+
.withSelectionTitleExpression(this.getNodeToolName())
49+
.descriptionExpression("Create an objective:")
50+
.noSelectionActionLabelExpression("Create a new objective")
51+
.noSelectionActionDescriptionExpression("Create a new objective without specialization")
52+
.withSelectionActionLabelExpression("Select an existing Element as objective")
53+
.withSelectionActionDescriptionExpression("Create a new specialized objective")
54+
.noSelectionActionStatusMessageExpression("It will create a new objective without specialization")
55+
.selectionRequiredWithoutSelectionStatusMessageExpression("Select one Element to specialize the new objective")
56+
.selectionRequiredWithSelectionStatusMessageExpression(AQLConstants.AQL + "'It will create an objective specialized with ' + selectedObjects->first().name")
57+
.optional(true)
58+
.build();
3259
}
3360

3461
@Override

backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/tools/ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider.java

Lines changed: 0 additions & 70 deletions
This file was deleted.

backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/CaseDefinitionObjectiveRequirementCompartmentNodeDescriptionProvider.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.eclipse.syson.diagram.common.view.nodes.AbstractCompartmentNodeDescriptionProvider;
2727
import org.eclipse.syson.diagram.common.view.tools.ObjectiveDocumentationNodeToolProvider;
2828
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementCompartmentNodeToolProvider;
29-
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider;
3029
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
3130
import org.eclipse.syson.sysml.SysmlPackage;
3231
import org.eclipse.syson.util.IDescriptionNameGenerator;
@@ -80,7 +79,6 @@ protected String getDropElementFromDiagramExpression() {
8079
protected List<INodeToolProvider> getItemCreationToolProviders() {
8180
List<INodeToolProvider> creationToolProviders = new ArrayList<>();
8281
creationToolProviders.add(new ObjectiveRequirementCompartmentNodeToolProvider());
83-
creationToolProviders.add(new ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider());
8482
creationToolProviders.add(new ObjectiveDocumentationNodeToolProvider(SysmlPackage.eINSTANCE.getCaseDefinition_ObjectiveRequirement()));
8583
return creationToolProviders;
8684
}

backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/CaseUsageObjectiveRequirementCompartmentNodeDescriptionProvider.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.eclipse.syson.diagram.common.view.nodes.AbstractCompartmentNodeDescriptionProvider;
2727
import org.eclipse.syson.diagram.common.view.tools.ObjectiveDocumentationNodeToolProvider;
2828
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementCompartmentNodeToolProvider;
29-
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider;
3029
import org.eclipse.syson.diagram.services.aql.DiagramMutationAQLService;
3130
import org.eclipse.syson.sysml.SysmlPackage;
3231
import org.eclipse.syson.util.IDescriptionNameGenerator;
@@ -80,7 +79,6 @@ protected String getDropElementFromDiagramExpression() {
8079
protected List<INodeToolProvider> getItemCreationToolProviders() {
8180
List<INodeToolProvider> creationToolProviders = new ArrayList<>();
8281
creationToolProviders.add(new ObjectiveRequirementCompartmentNodeToolProvider());
83-
creationToolProviders.add(new ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider());
8482
creationToolProviders.add(new ObjectiveDocumentationNodeToolProvider(SysmlPackage.eINSTANCE.getCaseUsage_ObjectiveRequirement()));
8583
return creationToolProviders;
8684
}

backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/services/SDVNodeToolSectionSwitch.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.eclipse.syson.diagram.common.view.tools.JoinActionNodeToolProvider;
4141
import org.eclipse.syson.diagram.common.view.tools.MergeActionNodeToolProvider;
4242
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementCompartmentNodeToolProvider;
43-
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider;
4443
import org.eclipse.syson.diagram.common.view.tools.OccurrenceUsageSnapshotNodeToolProvider;
4544
import org.eclipse.syson.diagram.common.view.tools.OccurrenceUsageTimesliceNodeToolProvider;
4645
import org.eclipse.syson.diagram.common.view.tools.ParameterCompartmentNodeToolProvider;
@@ -249,7 +248,6 @@ public List<NodeToolSection> caseCaseDefinition(CaseDefinition object) {
249248
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool());
250249
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool());
251250
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.createRequirementUsageAsObjectiveRequirementNodeTool());
252-
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.creatRequirementUsageAsObjectiveWithBaseRequirementNodeTool());
253251

254252
this.toolDescriptionService.addNodeTool(sections, ToolConstants.VIEW_AS,
255253
new ViewNodeAsToolProvider(AQLUtils.aqlString(StandardDiagramsConstants.GV_QN), StandardDiagramsConstants.GV).create(this.cache));
@@ -278,7 +276,6 @@ public List<NodeToolSection> caseCaseUsage(CaseUsage object) {
278276
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool());
279277
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool());
280278
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.createRequirementUsageAsObjectiveRequirementNodeTool());
281-
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.creatRequirementUsageAsObjectiveWithBaseRequirementNodeTool());
282279
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, new SetAsCompositeToolProvider().create(this.cache));
283280
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, new SetAsRefToolProvider().create(this.cache));
284281

@@ -812,7 +809,6 @@ public List<NodeToolSection> caseUseCaseDefinition(UseCaseDefinition object) {
812809
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool());
813810
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool());
814811
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.createRequirementUsageAsObjectiveRequirementNodeTool());
815-
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.creatRequirementUsageAsObjectiveWithBaseRequirementNodeTool());
816812

817813
this.toolDescriptionService.addNodeTool(sections, ToolConstants.VIEW_AS,
818814
new ViewNodeAsToolProvider(AQLUtils.aqlString(StandardDiagramsConstants.GV_QN), StandardDiagramsConstants.GV).create(this.cache));
@@ -841,7 +837,6 @@ public List<NodeToolSection> caseUseCaseUsage(UseCaseUsage object) {
841837
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool());
842838
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool());
843839
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.createRequirementUsageAsObjectiveRequirementNodeTool());
844-
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.creatRequirementUsageAsObjectiveWithBaseRequirementNodeTool());
845840
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, new SetAsCompositeToolProvider().create(this.cache));
846841
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, new SetAsRefToolProvider().create(this.cache));
847842

@@ -862,7 +857,6 @@ public List<NodeToolSection> caseViewUsage(ViewUsage object) {
862857
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewSubjectNodeTool());
863858
this.toolDescriptionService.addNodeTool(sections, ToolConstants.STRUCTURE, this.createNewActorNodeTool());
864859
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.createRequirementUsageAsObjectiveRequirementNodeTool());
865-
this.toolDescriptionService.addNodeTool(sections, ToolConstants.REQUIREMENTS, this.creatRequirementUsageAsObjectiveWithBaseRequirementNodeTool());
866860
this.toolDescriptionService.addNodeTool(sections, ToolConstants.VIEW_AS,
867861
new SetAsViewToolProvider(AQLUtils.aqlString(StandardDiagramsConstants.GV_QN), StandardDiagramsConstants.GV).create(this.cache));
868862
this.toolDescriptionService.addNodeTool(sections, ToolConstants.VIEW_AS,
@@ -934,11 +928,6 @@ private NodeTool createRequirementUsageAsObjectiveRequirementNodeTool() {
934928
return objectiveRequirementCompartmentNodeToolProvider.create(this.cache);
935929
}
936930

937-
private NodeTool creatRequirementUsageAsObjectiveWithBaseRequirementNodeTool() {
938-
var objectiveRequirementWithBaseRequirementCompartmentNodeToolProvider = new ObjectiveRequirementWithBaseRequirementCompartmentNodeToolProvider();
939-
return objectiveRequirementWithBaseRequirementCompartmentNodeToolProvider.create(this.cache);
940-
}
941-
942931
private NodeTool createPayloadNodeTool(EClass payloadType) {
943932
var payloadNodeToolProvider = new AcceptActionPayloadNodeToolProvider(payloadType, this.descriptionNameGenerator);
944933
return payloadNodeToolProvider.create(this.cache);

0 commit comments

Comments
 (0)