Skip to content
Merged
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
2 changes: 2 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ For example `ViewUsage` elements are no longer rendered in _parts_ compartments.
- https://github.com/eclipse-syson/syson/issues/2039[#2039] [import] Import should unescape backslash in `LiteralString`.
- https://github.com/eclipse-syson/syson/issues/2052[#2052] [diagrams] Fix an issue where it was possible to create a `SatisfyRequirementUsage` from the `SatisfyRequirementUsage` graphical edge tool with a target that is not a `RequirementUsage`.
- https://github.com/eclipse-syson/syson/issues/2031[#2031] [diagrams] Fix an issue where it was not possible to drag and drop a `LibraryPackage` from the _Explorer_ to a diagram.
- https://github.com/eclipse-syson/syson/issues/2050[#2050] [diagrams] Fix an issue where creating a `PerformActionUsage` from the `ActionUsage` graphical node (or any other graphical node that allows to create it) was displaying it in the diagram background and its compartments every time.
It now follows the same rule than all other graphical node: if a compartment that can display the new `PerformActionUsage` is displayed, then the new `PerformActionUsage` is displayed in this compartment, otherwise it is displayed in the diagram background.

=== Improvements

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -632,10 +632,9 @@ public void createReferencingPerformActionUsageInActionUsage() {
Consumer<Object> diagramCheck = assertRefreshedDiagramThat(newDiagram -> {
var initialDiagram = diagram.get();
new CheckDiagramElementCount(this.diagramComparator)
.hasNewNodeCount(3) // 1 visible new PerformActionUsage node + 1 list items (in 'perform actions'
// compartments, now visible) + 1 node in 'action flow' compartment
.hasNewEdgeCount(3) // 1 visible composition edge and 2 visible ReferenceSubsetting edge (one for
// the top-level node, one for the node in "action flow" compartment
.hasNewNodeCount(1) // 1 visible new PerformActionUsage node
.hasNewEdgeCount(2) // 1 visible composition edge and 1 hidden ReferenceSubsetting edge or the node
// in "action flow" compartment
.check(initialDiagram, newDiagram, true);
String freeFormNodeDescription = this.descriptionNameGenerator.getNodeName(SysmlPackage.eINSTANCE.getPerformActionUsage());
new CheckNodeInCompartment(diagramDescriptionIdProvider, this.diagramComparator)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2024, 2025 Obeo.
* Copyright (c) 2024, 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
Expand Down Expand Up @@ -119,8 +119,8 @@ 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(this.eClass, this.getDescriptionNameGenerator()).create(cache));
this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider(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());
toolSections.add(this.toolDescriptionService.relatedElementsNodeToolSection(false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,24 @@ public class CompartmentNodeToolProvider extends AbstractCompartmentNodeToolProv

private final EReference eReference;

private final IDescriptionNameGenerator nameGenerator;
private final IDescriptionNameGenerator descriptionNameGenerator;

private final FeatureDirectionKind featureDirectionKind;

public CompartmentNodeToolProvider(EReference eReference, IDescriptionNameGenerator nameGenerator) {
this(eReference, nameGenerator, null);
public CompartmentNodeToolProvider(EReference eReference, IDescriptionNameGenerator descriptionNameGenerator) {
this(eReference, descriptionNameGenerator, null);
}

public CompartmentNodeToolProvider(EReference eReference, IDescriptionNameGenerator nameGenerator, FeatureDirectionKind featureDirectionKind) {
public CompartmentNodeToolProvider(EReference eReference, IDescriptionNameGenerator descriptionNameGenerator, FeatureDirectionKind featureDirectionKind) {
super();
this.eReference = eReference;
this.nameGenerator = nameGenerator;
this.descriptionNameGenerator = descriptionNameGenerator;
this.featureDirectionKind = featureDirectionKind;
}

public IDescriptionNameGenerator getDescriptionNameGenerator() {
return this.descriptionNameGenerator;
}

@Override
protected String getServiceCallExpression() {
Expand All @@ -57,7 +60,7 @@ protected String getServiceCallExpression() {

@Override
protected String getNodeToolName() {
var toolLabel = this.nameGenerator.getCreationToolName(this.eReference);
var toolLabel = this.descriptionNameGenerator.getCreationToolName(this.eReference);
if (this.featureDirectionKind != null) {
toolLabel += ' ' + StringUtils.capitalize(this.featureDirectionKind.getLiteral());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,41 +12,33 @@
*******************************************************************************/
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;

/**
* Used to add the 'perform action' action in actions body for all diagrams.
*
* @author Jerome Gout
*/
public class PerformActionNodeToolProvider extends AbstractFreeFormCompartmentNodeToolProvider {

public PerformActionNodeToolProvider(EClass ownerEClass, IDescriptionNameGenerator descriptionNameGenerator) {
super(ownerEClass, ActionFlowCompartmentNodeDescriptionProvider.COMPARTMENT_LABEL, descriptionNameGenerator);
}
public class PerformActionNodeToolProvider extends AbstractCompartmentNodeToolProvider {

@Override
protected String getNodeDescriptionName() {
return this.getDescriptionNameGenerator().getNodeName(SysmlPackage.eINSTANCE.getPerformActionUsage());
protected String getServiceCallExpression() {
return ServiceMethod.of0(ViewCreateService::createPerformAction).aqlSelf();
}

@Override
protected String getCreationServiceCallExpression() {
return ServiceMethod.of0(ViewCreateService::createPerformAction).aqlSelf();
protected String getNodeToolName() {
return "New Perform action";
}

@Override
protected String getLabel() {
return "New Perform action";
protected boolean revealOnCreate() {
return false;
}

@Override
protected String getIconPath() {
protected String getNodeToolIconURLsExpression() {
return "/icons/full/obj16/PerformActionUsage.svg";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,17 @@
*******************************************************************************/
package org.eclipse.syson.diagram.common.view.tools;

import org.eclipse.emf.ecore.EClass;
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.emf.diagram.ViewDiagramDescriptionConverter;
import org.eclipse.syson.diagram.common.view.nodes.ActionFlowCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.common.view.services.ViewCreateService;
import org.eclipse.syson.diagram.common.view.services.ViewNodeService;
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.IDescriptionNameGenerator;
import org.eclipse.syson.util.ServiceMethod;
import org.eclipse.syson.util.SysMLMetamodelHelper;

Expand All @@ -35,29 +31,25 @@
*
* @author Jerome Gout
*/
public class ReferencingPerformActionNodeToolProvider extends AbstractFreeFormCompartmentNodeToolProvider {

public ReferencingPerformActionNodeToolProvider(EClass ownerEClass, IDescriptionNameGenerator descriptionNameGenerator) {
super(ownerEClass, ActionFlowCompartmentNodeDescriptionProvider.COMPARTMENT_LABEL, descriptionNameGenerator);
}
public class ReferencingPerformActionNodeToolProvider extends AbstractCompartmentNodeToolProvider {

@Override
protected String getNodeDescriptionName() {
return this.getDescriptionNameGenerator().getNodeName(SysmlPackage.eINSTANCE.getActionUsage());
protected String getServiceCallExpression() {
return ServiceMethod.of0(ViewCreateService::createPerformAction).aqlSelf();
}

@Override
protected String getCreationServiceCallExpression() {
return "";
protected String getNodeToolName() {
return "New Perform";
}

@Override
protected String getLabel() {
return "New Perform";
protected boolean revealOnCreate() {
return false;
}

@Override
protected String getIconPath() {
protected String getNodeToolIconURLsExpression() {
return "/icons/full/obj16/PerformActionUsage.svg";
}

Expand Down Expand Up @@ -89,13 +81,9 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.expression(ServiceMethod.of4(DiagramMutationAQLService::expose).aqlSelf(IEditingContext.EDITING_CONTEXT, DiagramContext.DIAGRAM_CONTEXT, Node.SELECTED_NODE,
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));

var reveal = this.viewBuilderHelper.newChangeContext()
.expression(ServiceMethod.of4(ViewNodeService::revealCompartment).aql(Node.SELECTED_NODE, "newInstance", DiagramContext.DIAGRAM_CONTEXT, IEditingContext.EDITING_CONTEXT,
ViewDiagramDescriptionConverter.CONVERTED_NODES_VARIABLE));

var changeContextNewInstance = this.viewBuilderHelper.newChangeContext()
.expression("aql:newInstance")
.children(addToExposedElements.build(), createReferenceSubsettingInstance.build(), reveal.build());
.children(addToExposedElements.build(), createReferenceSubsettingInstance.build());

var createEClassInstance = this.viewBuilderHelper.newCreateInstance()
.typeName(SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getPerformActionUsage()))
Expand All @@ -118,11 +106,11 @@ public NodeTool create(IViewDiagramElementFinder cache) {
.children(createEClassInstance.build());

return builder
.name(this.getLabel())
.iconURLsExpression(this.getIconPath())
.name(this.getNodeToolName())
.iconURLsExpression(this.getNodeToolIconURLsExpression())
.body(createMembership.build())
.dialogDescription(selectExistingStateUsage.build())
.preconditionExpression(this.getPreconditionServiceCallExpression())
.preconditionExpression(this.getPreconditionExpression())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -816,6 +816,9 @@ private List<IDiagramElementDescriptionProvider<?>> createAllDefinitionOwnedUsag
definitionOwnedUsageEdgeDescriptionProviders
.add(new DefinitionOwnedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPart(), colorProvider,
this.getDescriptionNameGenerator()));
definitionOwnedUsageEdgeDescriptionProviders
.add(new DefinitionOwnedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getPerformActionUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedAction(), colorProvider,
this.getDescriptionNameGenerator()));
definitionOwnedUsageEdgeDescriptionProviders
.add(new DefinitionOwnedUsageEdgeDescriptionProvider(SysmlPackage.eINSTANCE.getPortUsage(), SysmlPackage.eINSTANCE.getDefinition_OwnedPort(), colorProvider,
this.getDescriptionNameGenerator()));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2025 Obeo.
* Copyright (c) 2025, 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
Expand Down Expand Up @@ -74,8 +74,8 @@ protected NodePalette createCompartmentPalette(IViewDiagramElementFinder cache)
var palette = this.diagramBuilderHelper.newNodePalette().dropNodeTool(this.createCompartmentDropFromDiagramTool(cache));
var toolSections = this.toolDescriptionService.createDefaultNodeToolSections();
// in perform actions compartment only perform action tools are allowed
this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new PerformActionNodeToolProvider(this.eClass, this.getDescriptionNameGenerator()).create(cache));
this.toolDescriptionService.addNodeTool(toolSections, ToolConstants.BEHAVIOR, new ReferencingPerformActionNodeToolProvider(this.eClass, this.getDescriptionNameGenerator()).create(cache));
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