From 42033b55da546c7a62af9da7b56520b5cf9f9455 Mon Sep 17 00:00:00 2001 From: Pierre-Charles David Date: Tue, 31 Oct 2023 08:14:04 +0100 Subject: [PATCH] [2460] Reference widget default handler/provider do not need to be @Service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In https://github.com/eclipse-sirius/sirius-web/pull/2502 both ReferenceWidgetDefaultCreateElementHandler and ReferenceWidgetDefaultCandidateSearchProvider are defined as Spring Boot services. This means they will always appear in e.g. List along with the "normal" (application-provided) one. They need to return false on canHandle() to be ignored when iterating on these lists, which seems wrong as they actually *can* handle all descriptionId. Then we also inject them (a second time) through their concrete type to use them as fallbacks/actual defaults. Do not mark them as @Services. They can (correctly) return true on canHandle. In the few places where we explictly want these default implementations, create them explicitly. ReferenceWidgetDefaultCandidateSearchProvider has no constructor dependency, ReferenceWidgetDefaultCreateElementHandler only needs the IEditService, which we can get easily. Bug: https://github.com/eclipse-sirius/sirius-web/issues/2460 Signed-off-by: Pierre-Charles David Signed-off-by: Florian ROUËNÉ --- .../ReferenceWidgetDefaultCreateElementHandler.java | 4 +--- .../reference/browser/ModelBrowsersDescriptionProvider.java | 4 ++-- .../ReferenceWidgetDefaultCandidateSearchProvider.java | 4 +--- .../reference/handlers/CreateElementEventHandler.java | 5 +++-- ...eferenceWidgetChildCreationDescriptionsEventHandler.java | 5 +++-- ...ReferenceWidgetRootCreationDescriptionsEventHandler.java | 6 ++++-- .../reference/handlers/CreateElementEventHandlerTests.java | 6 ++---- 7 files changed, 16 insertions(+), 18 deletions(-) diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/ReferenceWidgetDefaultCreateElementHandler.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/ReferenceWidgetDefaultCreateElementHandler.java index 4fa499c605..6cb1235050 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/ReferenceWidgetDefaultCreateElementHandler.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/ReferenceWidgetDefaultCreateElementHandler.java @@ -21,7 +21,6 @@ import org.eclipse.sirius.components.core.api.IEditService; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.widget.reference.IReferenceWidgetCreateElementHandler; -import org.springframework.stereotype.Service; /** * * Default implementation of {@link IReferenceWidgetCreateElementHandler}. @@ -29,7 +28,6 @@ * * @author frouene */ -@Service public class ReferenceWidgetDefaultCreateElementHandler implements IReferenceWidgetCreateElementHandler { private final IEditService editService; @@ -40,7 +38,7 @@ public ReferenceWidgetDefaultCreateElementHandler(IEditService editService) { @Override public boolean canHandle(String descriptionId) { - return false; // Default implementation, it'll be used if no other service can handle the descriptionId + return true; } @Override diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java index fb1d4fb9fe..5083343c79 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ModelBrowsersDescriptionProvider.java @@ -78,12 +78,12 @@ public class ModelBrowsersDescriptionProvider implements IRepresentationDescript private final ReferenceWidgetDefaultCandidateSearchProvider defaultCandidateProvider; - public ModelBrowsersDescriptionProvider(IObjectService objectService, IURLParser urlParser, IEMFKindService emfKindService, List candidateProviders, ReferenceWidgetDefaultCandidateSearchProvider defaultCandidateProvider) { + public ModelBrowsersDescriptionProvider(IObjectService objectService, IURLParser urlParser, IEMFKindService emfKindService, List candidateProviders) { this.objectService = Objects.requireNonNull(objectService); this.urlParser = Objects.requireNonNull(urlParser); this.emfKindService = Objects.requireNonNull(emfKindService); this.candidateProviders = Objects.requireNonNull(candidateProviders); - this.defaultCandidateProvider = Objects.requireNonNull(defaultCandidateProvider); + this.defaultCandidateProvider = new ReferenceWidgetDefaultCandidateSearchProvider(); } @Override diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ReferenceWidgetDefaultCandidateSearchProvider.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ReferenceWidgetDefaultCandidateSearchProvider.java index 8a59090964..05e049de57 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ReferenceWidgetDefaultCandidateSearchProvider.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/browser/ReferenceWidgetDefaultCandidateSearchProvider.java @@ -22,7 +22,6 @@ import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; import org.eclipse.sirius.components.emf.services.EditingContext; import org.eclipse.sirius.components.widget.reference.IReferenceWidgetRootCandidateSearchProvider; -import org.springframework.stereotype.Service; /** * Default implementation of {@link IReferenceWidgetRootCandidateSearchProvider}. @@ -30,12 +29,11 @@ * * @author Arthur Daussy */ -@Service public class ReferenceWidgetDefaultCandidateSearchProvider implements IReferenceWidgetRootCandidateSearchProvider { @Override public boolean canHandle(String descriptionId) { - return false; // Default implementation, it'll be used if no other service can handle the descriptionId + return true; } @Override diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandler.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandler.java index 39479befc4..87e424fac7 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandler.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandler.java @@ -29,6 +29,7 @@ import org.eclipse.sirius.components.collaborative.widget.reference.dto.CreateElementInput; import org.eclipse.sirius.components.collaborative.widget.reference.messages.IReferenceMessageService; import org.eclipse.sirius.components.core.api.ErrorPayload; +import org.eclipse.sirius.components.core.api.IEditService; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IFeedbackMessageService; import org.eclipse.sirius.components.core.api.IObjectService; @@ -65,12 +66,12 @@ public class CreateElementEventHandler implements IFormEventHandler { private final IFeedbackMessageService feedbackMessageService; - public CreateElementEventHandler(IFormQueryService formQueryService, IReferenceMessageService messageService, IObjectService objectService, List referenceWidgetCreateElementHandlers, ReferenceWidgetDefaultCreateElementHandler defaultReferenceWidgetCreateElementHandler, MeterRegistry meterRegistry, IFeedbackMessageService feedbackMessageService) { + public CreateElementEventHandler(IFormQueryService formQueryService, IReferenceMessageService messageService, IObjectService objectService, List referenceWidgetCreateElementHandlers, IEditService editService, MeterRegistry meterRegistry, IFeedbackMessageService feedbackMessageService) { this.formQueryService = Objects.requireNonNull(formQueryService); this.messageService = Objects.requireNonNull(messageService); this.objectService = Objects.requireNonNull(objectService); this.referenceWidgetCreateElementHandlers = Objects.requireNonNull(referenceWidgetCreateElementHandlers); - this.defaultReferenceWidgetCreateElementHandler = Objects.requireNonNull(defaultReferenceWidgetCreateElementHandler); + this.defaultReferenceWidgetCreateElementHandler = new ReferenceWidgetDefaultCreateElementHandler(Objects.requireNonNull(editService)); this.feedbackMessageService = Objects.requireNonNull(feedbackMessageService); this.counter = Counter.builder(Monitoring.EVENT_HANDLER).tag(Monitoring.NAME, this.getClass().getSimpleName()).register(meterRegistry); diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetChildCreationDescriptionsEventHandler.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetChildCreationDescriptionsEventHandler.java index ea8e9e82ad..af5587f69c 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetChildCreationDescriptionsEventHandler.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetChildCreationDescriptionsEventHandler.java @@ -22,6 +22,7 @@ import org.eclipse.sirius.components.collaborative.widget.reference.ReferenceWidgetDefaultCreateElementHandler; import org.eclipse.sirius.components.collaborative.widget.reference.dto.ReferenceWidgetChildCreationDescriptionsInput; import org.eclipse.sirius.components.core.api.ChildCreationDescription; +import org.eclipse.sirius.components.core.api.IEditService; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IInput; import org.eclipse.sirius.components.core.api.IPayload; @@ -46,9 +47,9 @@ public class ReferenceWidgetChildCreationDescriptionsEventHandler implements IEd private final Counter counter; - public ReferenceWidgetChildCreationDescriptionsEventHandler(List referenceWidgetCreateElementHandlers, ReferenceWidgetDefaultCreateElementHandler defaultReferenceWidgetCreateElementHandler, MeterRegistry meterRegistry) { + public ReferenceWidgetChildCreationDescriptionsEventHandler(List referenceWidgetCreateElementHandlers, IEditService editService, MeterRegistry meterRegistry) { this.referenceWidgetCreateElementHandlers = Objects.requireNonNull(referenceWidgetCreateElementHandlers); - this.defaultReferenceWidgetCreateElementHandler = Objects.requireNonNull(defaultReferenceWidgetCreateElementHandler); + this.defaultReferenceWidgetCreateElementHandler = new ReferenceWidgetDefaultCreateElementHandler(Objects.requireNonNull(editService)); this.counter = Counter.builder(Monitoring.EVENT_HANDLER).tag(Monitoring.NAME, this.getClass().getSimpleName()).register(meterRegistry); } diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetRootCreationDescriptionsEventHandler.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetRootCreationDescriptionsEventHandler.java index 5a1cf84ef4..02d971cec5 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetRootCreationDescriptionsEventHandler.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/main/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/ReferenceWidgetRootCreationDescriptionsEventHandler.java @@ -22,6 +22,7 @@ import org.eclipse.sirius.components.collaborative.widget.reference.ReferenceWidgetDefaultCreateElementHandler; import org.eclipse.sirius.components.collaborative.widget.reference.dto.ReferenceWidgetRootCreationDescriptionsInput; import org.eclipse.sirius.components.core.api.ChildCreationDescription; +import org.eclipse.sirius.components.core.api.IEditService; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IInput; import org.eclipse.sirius.components.core.api.IPayload; @@ -43,11 +44,12 @@ public class ReferenceWidgetRootCreationDescriptionsEventHandler implements IEdi private final List referenceWidgetCreateElementHandlers; private final ReferenceWidgetDefaultCreateElementHandler defaultReferenceWidgetCreateElementHandler; + private final Counter counter; - public ReferenceWidgetRootCreationDescriptionsEventHandler(List referenceWidgetCreateElementHandlers, ReferenceWidgetDefaultCreateElementHandler defaultReferenceWidgetCreateElementHandler, MeterRegistry meterRegistry) { + public ReferenceWidgetRootCreationDescriptionsEventHandler(List referenceWidgetCreateElementHandlers, IEditService editService, MeterRegistry meterRegistry) { this.referenceWidgetCreateElementHandlers = Objects.requireNonNull(referenceWidgetCreateElementHandlers); - this.defaultReferenceWidgetCreateElementHandler = Objects.requireNonNull(defaultReferenceWidgetCreateElementHandler); + this.defaultReferenceWidgetCreateElementHandler = new ReferenceWidgetDefaultCreateElementHandler(Objects.requireNonNull(editService)); this.counter = Counter.builder(Monitoring.EVENT_HANDLER).tag(Monitoring.NAME, this.getClass().getSimpleName()).register(meterRegistry); } diff --git a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandlerTests.java b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandlerTests.java index fd548fe6cc..db24cf7da6 100644 --- a/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandlerTests.java +++ b/packages/forms/backend/sirius-components-collaborative-widget-reference/src/test/java/org/eclipse/sirius/components/collaborative/widget/reference/handlers/CreateElementEventHandlerTests.java @@ -23,7 +23,6 @@ import org.eclipse.sirius.components.collaborative.api.ChangeDescription; import org.eclipse.sirius.components.collaborative.api.ChangeKind; import org.eclipse.sirius.components.collaborative.forms.api.IFormQueryService; -import org.eclipse.sirius.components.collaborative.widget.reference.ReferenceWidgetDefaultCreateElementHandler; import org.eclipse.sirius.components.collaborative.widget.reference.dto.CreateElementInReferenceSuccessPayload; import org.eclipse.sirius.components.collaborative.widget.reference.dto.CreateElementInput; import org.eclipse.sirius.components.collaborative.widget.reference.messages.IReferenceMessageService; @@ -124,8 +123,7 @@ public Optional createRootObject(IEditingContext editingContext, UUID do }; CreateElementEventHandler handler = new CreateElementEventHandler(formQueryService, new IReferenceMessageService.NoOp(), objectService, List.of(referenceWidgetCreateElementHandler), - new ReferenceWidgetDefaultCreateElementHandler(new IEditService.NoOp()), new SimpleMeterRegistry(), - new IFeedbackMessageService.NoOp()); + new IEditService.NoOp(), new SimpleMeterRegistry(), new IFeedbackMessageService.NoOp()); assertThat(handler.canHandle(input)).isTrue(); Sinks.Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); @@ -195,7 +193,7 @@ public String unableToEditReadOnlyWidget() { } }; - CreateElementEventHandler handler = new CreateElementEventHandler(formQueryService, messageService, new IObjectService.NoOp(), List.of(), new ReferenceWidgetDefaultCreateElementHandler(new IEditService.NoOp()), new SimpleMeterRegistry(), new IFeedbackMessageService.NoOp()); + CreateElementEventHandler handler = new CreateElementEventHandler(formQueryService, messageService, new IObjectService.NoOp(), List.of(), new IEditService.NoOp(), new SimpleMeterRegistry(), new IFeedbackMessageService.NoOp()); assertThat(handler.canHandle(input)).isTrue(); Sinks.Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer();