Skip to content

Commit

Permalink
[183] Expand nodes in diagrams when a compartment item is created
Browse files Browse the repository at this point in the history
Bug: #183
Signed-off-by: Axel RICHARD <axel.richard@obeo.fr>
  • Loading branch information
AxelRICHARD committed Apr 12, 2024
1 parent afb77e6 commit 1de294d
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 16 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
- https://github.com/eclipse-syson/syson/issues/169[#169] [general-view] Handle UseCaseDefinition and UseCaseUsage in General View diagram
- https://github.com/eclipse-syson/syson/issues/177[#177] [diagrams] Add reconnect tools for composition edges
- https://github.com/eclipse-syson/syson/issues/182[#182] [diagrams] Make Definition/Usage node collapsed by default in general-view & actionflow-view diagrams
- https://github.com/eclipse-syson/syson/issues/183[#183] [diagrams] Expand Definition/Usage nodes in general-view & actionflow-view when a compartment item is created

=== New features

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,16 @@
*******************************************************************************/
package org.eclipse.syson.diagram.common.view.tools;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.sirius.components.view.Operation;
import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder;
import org.eclipse.sirius.components.view.builder.generated.DiagramBuilders;
import org.eclipse.sirius.components.view.builder.generated.ViewBuilders;
import org.eclipse.sirius.components.view.builder.providers.INodeToolProvider;
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.syson.util.AQLConstants;

/**
* Node tool provider for elements inside compartments.
Expand All @@ -25,9 +30,9 @@
*/
public abstract class AbstractCompartmentNodeToolProvider implements INodeToolProvider {

private DiagramBuilders diagramBuilderHelper = new DiagramBuilders();
private final DiagramBuilders diagramBuilderHelper = new DiagramBuilders();

private ViewBuilders viewBuilderHelper = new ViewBuilders();
private final ViewBuilders viewBuilderHelper = new ViewBuilders();

public AbstractCompartmentNodeToolProvider() { }

Expand Down Expand Up @@ -55,6 +60,13 @@ protected String getPreconditionExpression() {
return null;
}

/**
* Whether the tool will expand the selected node after its execution or not.
*
* @return if <code>true</code>, the tool will expand the selected node after the execution of the tool.
*/
protected abstract boolean expandOnCreate();

/**
* Return the node tool icon URL expression to retrieve the icon of the tool visible in the compartment palette.
*
Expand All @@ -66,12 +78,28 @@ protected String getPreconditionExpression() {
public NodeTool create(IViewDiagramElementFinder cache) {
var builder = this.diagramBuilderHelper.newNodeTool();

List<Operation> allOperations = new ArrayList<>();

var creationCompartmentItemServiceCall = this.viewBuilderHelper.newChangeContext()
.expression(this.getServiceCallExpression());
.expression(this.getServiceCallExpression())
.build();
allOperations.add(creationCompartmentItemServiceCall);

if (this.expandOnCreate()) {
var expandOperation = this.viewBuilderHelper.newChangeContext()
.expression("aql:diagramServices.expand(Sequence{selectedNode})")
.build();
allOperations.add(expandOperation);
}

var rootChangContext = this.viewBuilderHelper.newChangeContext()
.expression(AQLConstants.AQL_SELF)
.children(allOperations.toArray(Operation[]::new))
.build();

return builder.name(this.getNodeToolName())
.iconURLsExpression(this.getNodeToolIconURLsExpression())
.body(creationCompartmentItemServiceCall.build())
.body(rootChangContext)
.preconditionExpression(this.getPreconditionExpression())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,9 @@ protected String getNodeToolName() {
protected String getNodeToolIconURLsExpression() {
return "/icons/full/obj16/" + this.eReference.getEType().getName() + ".svg";
}

@Override
protected boolean expandOnCreate() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,9 @@ protected String getNodeToolIconURLsExpression() {
protected String getPreconditionExpression() {
return "aql:self.isEmptyObjectiveRequirementCompartment()";
}

@Override
protected boolean expandOnCreate() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,9 @@ protected String getNodeToolIconURLsExpression() {
protected String getPreconditionExpression() {
return "aql:self.isEmptySubjectCompartment()";
}

@Override
protected boolean expandOnCreate() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import org.eclipse.sirius.components.view.diagram.NodeTool;
import org.eclipse.sirius.components.view.diagram.NodeToolSection;
import org.eclipse.syson.diagram.common.view.tools.CompartmentNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.ObjectiveRequirementCompartmentNodeToolProvider;
import org.eclipse.syson.diagram.common.view.tools.SubjectCompartmentNodeToolProvider;
import org.eclipse.syson.diagram.general.view.GVDescriptionNameGenerator;
import org.eclipse.syson.diagram.general.view.GeneralViewDiagramDescriptionProvider;
import org.eclipse.syson.sysml.ActionUsage;
Expand Down Expand Up @@ -198,21 +200,13 @@ private NodeToolSection buildCreateSection(NodeTool... nodeTools) {
}

private NodeTool createPartUsageAsSubjectNodeTool() {
var serviceCall = this.viewBuilderHelper.newChangeContext().expression("aql:self.createPartUsageAsSubject(self.eContainer().eContainer())");
return this.diagramBuilderHelper.newNodeTool()
.name("New Subject")
.iconURLsExpression("/icons/full/obj16/Subject.svg")
.preconditionExpression("aql:self.isEmptySubjectCompartment()")
.body(serviceCall.build()).build();
var subjectCompartmentNodeToolProvider = new SubjectCompartmentNodeToolProvider();
return subjectCompartmentNodeToolProvider.create(null);
}

private NodeTool createRequirementUsageAsObjectiveRequirementNodeTool() {
var serviceCall = this.viewBuilderHelper.newChangeContext().expression("aql:self.createRequirementUsageAsObjectiveRequirement()");
return this.diagramBuilderHelper.newNodeTool()
.name("New Ojbective")
.iconURLsExpression("/icons/full/obj16/Objective.svg")
.preconditionExpression("aql:self.isEmptyObjectiveRequirementCompartment()")
.body(serviceCall.build()).build();
var objectiveRequirementCompartmentNodeToolProvider = new ObjectiveRequirementCompartmentNodeToolProvider();
return objectiveRequirementCompartmentNodeToolProvider.create(null);
}

private NodeToolSection createPartDefinitionElementsToolSection() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,9 @@ protected String getNodeToolName() {
protected String getNodeToolIconURLsExpression() {
return "/icons/full/obj16/PartUsage.svg";
}

@Override
protected boolean expandOnCreate() {
return false;
}
}

0 comments on commit 1de294d

Please sign in to comment.