From 11b23ccb4caadcfc72f0e181829ea4bba1049e21 Mon Sep 17 00:00:00 2001 From: Arthur Daussy Date: Fri, 26 May 2023 17:28:07 +0200 Subject: [PATCH] [2003] Make reconnection tool more robust Delegate the search for the EdgeDescription to IViewRepresentationDescriptionSearchService so that edge reconnection can work for applications which customize this service. Bug: https://github.com/eclipse-sirius/sirius-components/issues/2003 Signed-off-by: Arthur Daussy Signed-off-by: Pierre-Charles David --- CHANGELOG.adoc | 1 + .../ViewReconnectionToolsExecutor.java | 19 +------------------ 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 24e184c782..ff2b687d9e 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -99,6 +99,7 @@ Navigate to the parent with the left arrow if a node is collapsed - https://github.com/eclipse-sirius/sirius-components/issues/1975[#1975] [emf] The getContents method from the ObjectService will use the eObject's IEditingDomainItemProvider if it exists. - https://github.com/eclipse-sirius/sirius-components/issues/1916[#1916] [sirius-web] We supply an example of how to provide your own _Details_ view definition for specific elements using a View-based FormDescription. See `org.eclipse.sirius.web.sample.configuration.DomainPropertiesConfigurer` and `org.eclipse.sirius.web.sample.services.DomainAttributeServices` for a working example that can be easily adapted. +- https://github.com/eclipse-sirius/sirius-components/issues/2003[#2003] [view] Make reconnection tool more robust for applications which use a custom IViewRepresentationDescriptionSearchService. == v2023.4.0 diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java index 7f6403a057..d269e5d1dc 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EPackage.Registry; @@ -25,7 +24,6 @@ import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IFeedbackMessageService; import org.eclipse.sirius.components.core.api.IObjectService; -import org.eclipse.sirius.components.core.api.IURLParser; import org.eclipse.sirius.components.diagrams.Edge; import org.eclipse.sirius.components.diagrams.description.DiagramDescription; import org.eclipse.sirius.components.diagrams.description.EdgeDescription; @@ -66,8 +64,6 @@ public class ViewReconnectionToolsExecutor implements IReconnectionToolsExecutor private final IViewRepresentationDescriptionPredicate viewRepresentationDescriptionPredicate; - private final IURLParser urlParser; - private final IFeedbackMessageService feedbackMessageService; private final ApplicationContext applicationContext; @@ -81,7 +77,6 @@ public ViewReconnectionToolsExecutor(ViewToolConfiguration configuration, IEditS this.viewRepresentationDescriptionSearchService = Objects.requireNonNull(configuration.getViewRepresentationDescriptionSearchService()); this.javaServiceProviders = Objects.requireNonNull(javaServiceProviders); this.viewRepresentationDescriptionPredicate = Objects.requireNonNull(configuration.getViewRepresentationDescriptionPredicate()); - this.urlParser = Objects.requireNonNull(configuration.getUrlParser()); this.applicationContext = Objects.requireNonNull(applicationContext); this.feedbackMessageService = feedbackMessageService; } @@ -101,20 +96,8 @@ public IStatus execute(IEditingContext editingContext, ReconnectionToolInterpret .map(org.eclipse.sirius.components.view.DiagramDescription.class::cast); if (optionalDiagramDescription.isPresent()) { org.eclipse.sirius.components.view.DiagramDescription viewDiagramDescription = optionalDiagramDescription.get(); - var optionalViewEdgeDescription = viewDiagramDescription.getEdgeDescriptions().stream().filter(viewEdgeDescription -> { - Map> parameters = this.urlParser.getParameterValues(diagramDescription.getId()); - List values = Optional.ofNullable(parameters.get(IDiagramIdProvider.SOURCE_ID)).orElse(List.of()); - Optional sourceId = values.stream().findFirst(); - - if (sourceId.isPresent()) { - String sourceElementId = this.objectService.getId(viewEdgeDescription); - String formattedEdgeDescriptionId = IDiagramIdProvider.EDGE_DESCRIPTION_KIND + '?' + IDiagramIdProvider.SOURCE_KIND + '=' + IDiagramIdProvider.VIEW_SOURCE_KIND + '&' + IDiagramIdProvider.SOURCE_ID + '=' + sourceId.get() + '&' + IDiagramIdProvider.SOURCE_ELEMENT_ID + '=' + sourceElementId; - return edge.getDescriptionId().equals(formattedEdgeDescriptionId); - } else { - return false; - } - }).findFirst(); + var optionalViewEdgeDescription = this.viewRepresentationDescriptionSearchService.findViewEdgeDescriptionById(edgeDescription.getId()); if (optionalViewEdgeDescription.isPresent()) { var viewEdgeDescription = optionalViewEdgeDescription.get();