Skip to content

Commit

Permalink
[2003] Make reconnection tool more robust
Browse files Browse the repository at this point in the history
Delegate the search for the EdgeDescription to
IViewRepresentationDescriptionSearchService so that edge reconnection
can work for applications which customize this service.

Bug: eclipse-sirius#2003
Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr>
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
  • Loading branch information
adaussy authored and pcdavid committed May 30, 2023
1 parent 682eb73 commit 711fa3b
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 18 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Expand Up @@ -95,6 +95,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 so that edge reconnection.

== v2023.4.0

Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand All @@ -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<String, List<String>> parameters = this.urlParser.getParameterValues(diagramDescription.getId());
List<String> values = Optional.ofNullable(parameters.get(IDiagramIdProvider.SOURCE_ID)).orElse(List.of());
Optional<String> 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();

Expand Down

0 comments on commit 711fa3b

Please sign in to comment.