Skip to content

Commit

Permalink
[568] Refactor Interconnection View
Browse files Browse the repository at this point in the history
Bug: eclipse-syson#568
Signed-off-by: Gwendal Daniel <gwendal.daniel@obeosoft.com>
  • Loading branch information
gdaniel committed Jul 19, 2024
1 parent 4ef1415 commit 13cb1a2
Show file tree
Hide file tree
Showing 26 changed files with 441 additions and 715 deletions.
9 changes: 8 additions & 1 deletion CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ The changes are:
** add operation "parameterDirection() : FeatureDirectionKind"
* Type
** add operation "directionOfExcluding(Feature, Type[0..\*]) : FeatureDirectionKind"
- https://github.com/eclipse-syson/syson/issues/568[#568] [interconnection-view] The following classes have been deleted, renamed, or merged to simplify the Interconnection View
* Deleted `InterconnectionViewForDefinitionDescriptionProvider`
* Deleted `InterconnectionViewForDefinitionDiagramDescriptionProvider`
* Deleted `InterconnectionViewForUsageDiagramDescriptionProvider`
* Merged `RootUsageNodeDescriptionProvider` and `RootDefinitionNodeDescriptionProvider` into `RootNodeDescriptionProvider`
* Renamed `FirstLevelChildPartUsageNodeDescriptionProvider` to `FirstLevelChildUsageNodeDescriptionProvider`
* Renamed `ChildPartUsageNodeDescriptionProvider` to `ChildUsageNodeDescriptionProvider`

=== Dependency update

Expand All @@ -36,7 +43,7 @@ The changes are:
- https://github.com/eclipse-syson/syson/issues/393[#393] [general-view] Add _ExhibitStates_ on General View diagram
- https://github.com/eclipse-syson/syson/issues/557[#557] [state-transition-view] Allow the creation of a StateTransitionView diagram on a _PartUsage_/_PartDefinition_
- https://github.com/eclipse-syson/syson/issues/558[#558] [state-transition-view] Allow the creation of a StateTransitionView diagram on a _StateUsage_/_StateDefinition_
- https://github.com/eclipse-syson/syson/issues/261[#261] [interconnection-view] The _InterfaceUsage_ created by the New Interface edge tool in the Interconnection View diagram are now created under closest containing _Definition_/_Package_.
- https://github.com/eclipse-syson/syson/issues/568[#568] [interconnection-view] Simplify Interconnection View implementation and remove duplicated code

=== New features

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@
import org.eclipse.syson.diagram.actionflow.view.ActionFlowViewJavaServiceProvider;
import org.eclipse.syson.diagram.general.view.GeneralViewDiagramDescriptionProvider;
import org.eclipse.syson.diagram.general.view.GeneralViewJavaServiceProvider;
import org.eclipse.syson.diagram.interconnection.view.InterconnectionViewForDefinitionDiagramDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.InterconnectionViewForUsageDiagramDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.InterconnectionViewDiagramDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.InterconnectionViewJavaServiceProvider;
import org.eclipse.syson.diagram.statetransition.view.StateTransitionViewDiagramDescriptionProvider;
import org.eclipse.syson.diagram.statetransition.view.StateTransitionViewJavaServiceProvider;
Expand Down Expand Up @@ -60,8 +59,7 @@ public void setUp() {
List<IRepresentationDescriptionProvider> representationDescriptionProviders = List.of(
new ActionFlowViewDiagramDescriptionProvider(),
new GeneralViewDiagramDescriptionProvider(),
new InterconnectionViewForDefinitionDiagramDescriptionProvider(),
new InterconnectionViewForUsageDiagramDescriptionProvider(),
new InterconnectionViewDiagramDescriptionProvider(),
new StateTransitionViewDiagramDescriptionProvider()
);
representationDescriptionProviders.forEach(provider -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*******************************************************************************/
package org.eclipse.syson.diagram.interconnection.view;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.syson.util.DescriptionNameGenerator;

/**
Expand All @@ -24,4 +25,12 @@ public class IVDescriptionNameGenerator extends DescriptionNameGenerator {
public IVDescriptionNameGenerator() {
super("IV");
}

public String getFirstLevelNodeName(EClass eClass) {
return this.getName(this.getDiagramPrefix(), "FirstLevelNode", eClass.getName());
}

public String getChildNodeName(EClass eClass) {
return this.getName(this.getDiagramPrefix(), "ChildNode", eClass.getName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@
* @author arichard
*/
@Service
public class InterconnectionViewForUsageDescriptionProvider implements IViewDescriptionProvider {
public class InterconnectionViewDescriptionProvider implements IViewDescriptionProvider {

public String getViewDiagramId() {
return "InterconnectionViewDiagram";
}

@Override
public IRepresentationDescriptionProvider getRepresentationDescriptionProvider() {
return new InterconnectionViewForUsageDiagramDescriptionProvider();
return new InterconnectionViewDiagramDescriptionProvider();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,19 @@
*******************************************************************************/
package org.eclipse.syson.diagram.interconnection.view;

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

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.sirius.components.view.RepresentationDescription;
import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder;
import org.eclipse.sirius.components.view.builder.generated.DiagramBuilders;
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.builder.providers.IDiagramElementDescriptionProvider;
import org.eclipse.sirius.components.view.builder.providers.IRepresentationDescriptionProvider;
import org.eclipse.sirius.components.view.diagram.DiagramElementDescription;
import org.eclipse.sirius.components.view.diagram.DiagramPalette;
import org.eclipse.syson.diagram.common.view.ViewDiagramElementFinder;
import org.eclipse.syson.diagram.common.view.nodes.CompartmentItemNodeDescriptionProvider;
Expand All @@ -28,64 +33,82 @@
import org.eclipse.syson.diagram.interconnection.view.edges.AllocateEdgeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.edges.BindingConnectorAsUsageEdgeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.edges.InterfaceUsageEdgeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.ChildPartUsageNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.ChildrenPartUsageCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.ChildUsageNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.ChildrenUsageCompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.CompartmentNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.FakeNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.FirstLevelChildPartUsageNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.FirstLevelChildUsageNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.PortUsageBorderNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.RootNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.RootPortUsageBorderNodeDescriptionProvider;
import org.eclipse.syson.diagram.interconnection.view.nodes.RootUsageNodeDescriptionProvider;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.IDescriptionNameGenerator;
import org.eclipse.syson.util.AQLUtils;
import org.eclipse.syson.util.SysMLMetamodelHelper;

/**
* Description of the Interconnection View for Usage diagram using the ViewBuilder API from Sirius Web.
*
* @author arichard
*/
public class InterconnectionViewForUsageDiagramDescriptionProvider implements IRepresentationDescriptionProvider {
public class InterconnectionViewDiagramDescriptionProvider implements IRepresentationDescriptionProvider {

public static final String DESCRIPTION_NAME = "Interconnection View";

public static final Map<EClass, List<EReference>> COMPARTMENTS_WITH_LIST_ITEMS = Map.ofEntries(
Map.entry(SysmlPackage.eINSTANCE.getPartUsage(), List.of(SysmlPackage.eINSTANCE.getElement_Documentation(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute())));

public static final Map<EClass, List<EReference>> COMPARTMENTS_WITH_FREE_FORM_ITEMS = Map.ofEntries(
Map.entry(SysmlPackage.eINSTANCE.getPartUsage(), List.of(SysmlPackage.eINSTANCE.getUsage_NestedPart())));

private final DiagramBuilders diagramBuilderHelper = new DiagramBuilders();

private final IDescriptionNameGenerator nameGenerator = new IVDescriptionNameGenerator();
private final IVDescriptionNameGenerator nameGenerator = new IVDescriptionNameGenerator();

private final ToolDescriptionService toolDescriptionService = new ToolDescriptionService(this.nameGenerator);

@Override
public RepresentationDescription create(IColorProvider colorProvider) {
String domainType = SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getUsage());
String domainType = SysMLMetamodelHelper.buildQualifiedName(SysmlPackage.eINSTANCE.getElement());

var diagramDescriptionBuilder = this.diagramBuilderHelper.newDiagramDescription();
diagramDescriptionBuilder
.autoLayout(false)
.domainType(domainType)
.preconditionExpression(domainType)
.preconditionExpression(AQLUtils.getSelfServiceCallExpression("canCreateDiagram"))
.name(DESCRIPTION_NAME)
.titleExpression(DESCRIPTION_NAME);

var diagramDescription = diagramDescriptionBuilder.build();

var cache = new ViewDiagramElementFinder();
var diagramElementDescriptionProviders = List.of(
var diagramElementDescriptionProviders = new ArrayList<IDiagramElementDescriptionProvider<? extends DiagramElementDescription>>();
diagramElementDescriptionProviders.addAll(List.of(
new FakeNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new RootUsageNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new FirstLevelChildPartUsageNodeDescriptionProvider(SysmlPackage.eINSTANCE.getUsage_NestedPart(), colorProvider, this.getDescriptionNameGenerator()),
new ChildPartUsageNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new CompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), colorProvider, this.getDescriptionNameGenerator()),
new InheritedCompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), colorProvider, this.getDescriptionNameGenerator()),
new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedAttribute(), colorProvider, this.getDescriptionNameGenerator()),
new ChildrenPartUsageCompartmentNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new RootPortUsageBorderNodeDescriptionProvider(SysmlPackage.eINSTANCE.getUsage_NestedPort(), colorProvider, this.getDescriptionNameGenerator()),
new RootNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new FirstLevelChildUsageNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), "getPartUsages", colorProvider, this.getDescriptionNameGenerator()),
new ChildUsageNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(), colorProvider, this.getDescriptionNameGenerator()),
new RootPortUsageBorderNodeDescriptionProvider("getPortUsages", colorProvider, this.getDescriptionNameGenerator()),
new PortUsageBorderNodeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new BindingConnectorAsUsageEdgeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new AllocateEdgeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new InterfaceUsageEdgeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator()),
new CompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getDocumentation(), SysmlPackage.eINSTANCE.getElement_Documentation(), colorProvider, this.getDescriptionNameGenerator()),
new CompartmentItemNodeDescriptionProvider(SysmlPackage.eINSTANCE.getDocumentation(), SysmlPackage.eINSTANCE.getElement_Documentation(), colorProvider, this.getDescriptionNameGenerator())
);
new InterfaceUsageEdgeDescriptionProvider(colorProvider, this.getDescriptionNameGenerator())
));

COMPARTMENTS_WITH_LIST_ITEMS.forEach((eClass, listItems) -> {
listItems.forEach(eReference -> {
diagramElementDescriptionProviders.add(new CompartmentItemNodeDescriptionProvider(eClass, eReference, colorProvider, this.getDescriptionNameGenerator()));
diagramElementDescriptionProviders.add(new CompartmentNodeDescriptionProvider(eClass, eReference, colorProvider, this.getDescriptionNameGenerator()));
diagramElementDescriptionProviders.add(new InheritedCompartmentItemNodeDescriptionProvider(eClass, eReference, colorProvider, this.getDescriptionNameGenerator()));
});
});

COMPARTMENTS_WITH_FREE_FORM_ITEMS.forEach((eClass, listItems) -> {
listItems.forEach(eReference -> {
diagramElementDescriptionProviders.add(new ChildrenUsageCompartmentNodeDescriptionProvider(SysmlPackage.eINSTANCE.getPartUsage(), SysmlPackage.eINSTANCE.getUsage_NestedPart(),
colorProvider, this.getDescriptionNameGenerator()));
});
});

diagramElementDescriptionProviders.stream()
.map(IDiagramElementDescriptionProvider::create)
Expand All @@ -98,7 +121,7 @@ public RepresentationDescription create(IColorProvider colorProvider) {
return diagramDescription;
}

protected IDescriptionNameGenerator getDescriptionNameGenerator() {
protected IVDescriptionNameGenerator getDescriptionNameGenerator() {
return this.nameGenerator;
}

Expand Down

This file was deleted.

Loading

0 comments on commit 13cb1a2

Please sign in to comment.