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
5 changes: 3 additions & 2 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@

=== New features

- https://github.com/eclipse-syson/syson/issues/1581[#1581] [diagrams] Display inherited `PortUsages` as border nodes in diagrams
- https://github.com/eclipse-syson/syson/issues/1589[#1589] [explorer] Add a filter to hide expose elements in `ViewUsage`
- https://github.com/eclipse-syson/syson/issues/1581[#1581] [diagrams] Display inherited `PortUsages` as graphical border nodes in diagrams.
- https://github.com/eclipse-syson/syson/issues/1581[#1581] [diagrams] Redefine inherited `PortUsages` when connected as graphical border nodes.
- https://github.com/eclipse-syson/syson/issues/1589[#1589] [explorer] Add a filter to hide expose elements in `ViewUsage`.

== v2025.10.0

Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ public boolean removeFromExposedElements(Element element, Node selectedNode, IEd

protected Node getParentNode(IDiagramElement diagramElement, Node nodeContainer) {
List<Node> nodes = nodeContainer.getChildNodes();
nodes.addAll(nodeContainer.getBorderNodes());
if (nodes.contains(diagramElement)) {
return nodeContainer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class AQLConstants {

public static final String AQL_SELF = "aql:self";

public static final String SELF = "self";

public static final String AQL_TRUE = "aql:true";

public static final String AQL_FALSE = "aql:false";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import java.util.List;
import java.util.Objects;

import org.eclipse.sirius.components.diagrams.description.EdgeDescription;
import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder;
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.ConditionalNodeStyle;
Expand All @@ -41,6 +40,8 @@
*/
public abstract class AbstractPortUsageBorderNodeDescriptionProvider extends AbstractNodeDescriptionProvider {

protected static final String REDEFINE_PORT_PREFIX_TOOL_NAME = "Redefine Port And ";

protected final IDescriptionNameGenerator nameGenerator;

public AbstractPortUsageBorderNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator nameGenerator) {
Expand All @@ -55,6 +56,17 @@ public AbstractPortUsageBorderNodeDescriptionProvider(IColorProvider colorProvid
*/
protected abstract String getSemanticCandidatesExpression();

/**
* Implementers should provide the list of edge tool descriptions used inside this {@link NodeDescription}.
*
* @param cache
* the cache used to retrieve node descriptions.
* @param nodeDescription
* the actual Usage node description.
* @return the list of edge tool descriptions.
*/
protected abstract List<EdgeTool> getEdgeTools(IViewDiagramElementFinder cache, NodeDescription nodeDescription);

protected abstract OutsideLabelDescription createOutsideLabelDescription();

protected abstract String getName();
Expand Down Expand Up @@ -145,56 +157,8 @@ private NodePalette createNodePalette(IViewDiagramElementFinder cache, NodeDescr
.build();
}

private List<EdgeTool> getEdgeTools(IViewDiagramElementFinder cache, NodeDescription nodeDescription) {
if (cache.getNodeDescription(this.getName()).isPresent()) {
NodeDescription portBorderNode = cache.getNodeDescription(this.getName()).get();
return List.of(this.createBindingConnectorAsUsageEdgeTool(List.of(nodeDescription, portBorderNode)),
this.createInterfaceUsageEdgeTool(List.of(nodeDescription, portBorderNode)),
this.createFlowUsageEdgeTool(List.of(nodeDescription, portBorderNode)));
}
return List.of();
}

private EdgeTool createBindingConnectorAsUsageEdgeTool(List<NodeDescription> targetElementDescriptions) {
var builder = this.diagramBuilderHelper.newEdgeTool();

var body = this.viewBuilderHelper.newChangeContext()
.expression(AQLUtils.getServiceCallExpression(EdgeDescription.SEMANTIC_EDGE_SOURCE, "createBindingConnectorAsUsage", EdgeDescription.SEMANTIC_EDGE_TARGET));

return builder
.name(this.nameGenerator.getCreationToolName(SysmlPackage.eINSTANCE.getBindingConnectorAsUsage()) + " (bind)")
.iconURLsExpression("/icons/full/obj16/" + SysmlPackage.eINSTANCE.getBindingConnectorAsUsage().getName() + ".svg")
.body(body.build())
.targetElementDescriptions(targetElementDescriptions.toArray(NodeDescription[]::new))
.build();
}

private EdgeTool createInterfaceUsageEdgeTool(List<NodeDescription> targetElementDescriptions) {
var builder = this.diagramBuilderHelper.newEdgeTool();

var body = this.viewBuilderHelper.newChangeContext()
.expression(AQLUtils.getServiceCallExpression(EdgeDescription.SEMANTIC_EDGE_SOURCE, "createInterfaceUsage", EdgeDescription.SEMANTIC_EDGE_TARGET));

return builder
.name(this.nameGenerator.getCreationToolName(SysmlPackage.eINSTANCE.getInterfaceUsage()) + " (connect)")
.iconURLsExpression("/icons/full/obj16/" + SysmlPackage.eINSTANCE.getInterfaceUsage().getName() + ".svg")
.body(body.build())
.targetElementDescriptions(targetElementDescriptions.toArray(NodeDescription[]::new))
.build();
}

private EdgeTool createFlowUsageEdgeTool(List<NodeDescription> targetElementDescriptions) {
var builder = this.diagramBuilderHelper.newEdgeTool();

var body = this.viewBuilderHelper.newChangeContext()
.expression(AQLUtils.getServiceCallExpression(EdgeDescription.SEMANTIC_EDGE_SOURCE, "createFlowUsage", EdgeDescription.SEMANTIC_EDGE_TARGET));

return builder
.name(this.nameGenerator.getCreationToolName(SysmlPackage.eINSTANCE.getFlowUsage()) + " (flow)")
.iconURLsExpression("/icons/full/obj16/" + SysmlPackage.eINSTANCE.getFlowUsage().getName() + ".svg")
.body(body.build())
.targetElementDescriptions(targetElementDescriptions.toArray(NodeDescription[]::new))
.build();
protected String getToolIconURLsExpression(String elementName) {
return "/icons/full/obj16/" + elementName + ".svg";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.eclipse.sirius.components.core.api.IObjectSearchService;
import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService;
import org.eclipse.sirius.components.diagrams.Diagram;
import org.eclipse.sirius.components.diagrams.IDiagramElement;
import org.eclipse.sirius.components.diagrams.Node;
import org.eclipse.sirius.components.diagrams.ViewCreationRequest;
import org.eclipse.sirius.components.diagrams.ViewDeletionRequest;
Expand Down Expand Up @@ -70,6 +71,7 @@
import org.eclipse.syson.sysml.Definition;
import org.eclipse.syson.sysml.Documentation;
import org.eclipse.syson.sysml.Element;
import org.eclipse.syson.sysml.Feature;
import org.eclipse.syson.sysml.FeatureMembership;
import org.eclipse.syson.sysml.Membership;
import org.eclipse.syson.sysml.Namespace;
Expand All @@ -78,6 +80,8 @@
import org.eclipse.syson.sysml.Package;
import org.eclipse.syson.sysml.PartDefinition;
import org.eclipse.syson.sysml.PartUsage;
import org.eclipse.syson.sysml.PortUsage;
import org.eclipse.syson.sysml.Redefinition;
import org.eclipse.syson.sysml.RequirementConstraintKind;
import org.eclipse.syson.sysml.RequirementDefinition;
import org.eclipse.syson.sysml.RequirementUsage;
Expand Down Expand Up @@ -746,6 +750,44 @@ public List<? extends Object> getActionReferenceSelectionDialogChildren(Object s
return this.getChildrenWithInstancesOf(selectionDialogTreeElement, SysmlPackage.eINSTANCE.getActionUsage());
}

/**
* Redefine an inherited port.
*
* @param inheritedFeature
* semantic inherited port
* @param inheritedGraphicalPort
* graphical inherited port
* @param editingContext
* the (non-{@code null}) {@link IEditingContext}.
* @param diagramContext
* the {@link DiagramContext} of the tool. It corresponds to a variable accessible from the variable
* manager.
* @return the new {@link PartUsage} that redefines the inherited one.
*/
public PortUsage redefineInheritedPort(Feature inheritedFeature, IDiagramElement inheritedGraphicalPort, IEditingContext editingContext, DiagramContext diagramContext) {
Object parentNode = this.getParentNode(inheritedFeature, inheritedGraphicalPort, diagramContext);
if (parentNode instanceof Node node) {
var type = this.objectSearchService.getObject(editingContext, node.getTargetObjectId())
.filter(Type.class::isInstance)
.map(Type.class::cast)
.orElse(null);
if (type != null) {
PortUsage portUsage = SysmlFactory.eINSTANCE.createPortUsage();
Membership membership = SysmlFactory.eINSTANCE.createFeatureMembership();
membership.getOwnedRelatedElement().add(portUsage);
type.getOwnedRelationship().add(membership);

Redefinition redefinition = SysmlFactory.eINSTANCE.createRedefinition();
redefinition.setRedefinedFeature(inheritedFeature);
redefinition.setRedefiningFeature(portUsage);

portUsage.getOwnedRelationship().add(redefinition);
return portUsage;
}
}
return null;
}

/**
* Drops the provided {@code sourceElement} from the explorer on the given {@code selectedNode} on the diagram.
* <p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ protected List<NodeDescription> getSourceNodes(IViewDiagramElementFinder cache)
List<NodeDescription> nodes = new ArrayList<>();
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getItemUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
return nodes;
}

Expand All @@ -57,6 +58,7 @@ protected List<NodeDescription> getTargetNodes(IViewDiagramElementFinder cache)
List<NodeDescription> nodes = new ArrayList<>();
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getItemUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
return nodes;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ protected List<NodeDescription> getSourceNodes(IViewDiagramElementFinder cache)
List<NodeDescription> nodes = new ArrayList<>();
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getItemUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
return nodes;
}

Expand All @@ -57,6 +58,7 @@ protected List<NodeDescription> getTargetNodes(IViewDiagramElementFinder cache)
List<NodeDescription> nodes = new ArrayList<>();
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getItemUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(nodes::add);
return nodes;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ protected List<NodeDescription> getSourceNodes(IViewDiagramElementFinder cache)
var sources = new ArrayList<NodeDescription>();

cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(sources::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(sources::add);
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getItemUsage())).ifPresent(sources::add);
return sources;
}
Expand All @@ -57,6 +58,7 @@ protected List<NodeDescription> getSourceNodes(IViewDiagramElementFinder cache)
protected List<NodeDescription> getTargetNodes(IViewDiagramElementFinder cache) {
var targets = new ArrayList<NodeDescription>();
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(targets::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(targets::add);
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getItemUsage())).ifPresent(targets::add);
return targets;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*******************************************************************************/
package org.eclipse.syson.standard.diagrams.view.edges;

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

Expand Down Expand Up @@ -44,14 +45,19 @@ public String getName() {

@Override
protected List<NodeDescription> getSourceNodes(IViewDiagramElementFinder cache) {
var optPortUsageBorderNodeDescription = cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage()));
return optPortUsageBorderNodeDescription.map(List::of).orElseGet(List::of);
var sources = new ArrayList<NodeDescription>();

cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(sources::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(sources::add);
return sources;
}

@Override
protected List<NodeDescription> getTargetNodes(IViewDiagramElementFinder cache) {
var optPortUsageBorderNodeDescription = cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage()));
return optPortUsageBorderNodeDescription.map(List::of).orElseGet(List::of);
var targets = new ArrayList<NodeDescription>();
cache.getNodeDescription(this.descriptionNameGenerator.getBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(targets::add);
cache.getNodeDescription(this.descriptionNameGenerator.getInheritedBorderNodeName(SysmlPackage.eINSTANCE.getPortUsage())).ifPresent(targets::add);
return targets;
}

}
Loading
Loading