diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index dfcf7dfb02..079d38fcea 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -45,6 +45,9 @@ Yet we are recommending using each individual services since this aggregated one If you want to add your own custom behaviour, please use the new services, see the related ADR for more details. - https://github.com/eclipse-sirius/sirius-web/issues/3066[#3066] [core] `IObjectSearchService`, `IIdentityService`, `ILabelService` now can also find/resolve representations. This changes a core assumption from before where an element known to those services (i.e. an element for which `IIdentityService.getId` returned a non-null value) was a "semantic element" and thus *could not be* a representation. +- https://github.com/eclipse-sirius/sirius-web/issues/3021[#3021] [sirius-web] Remove the interfaces `IRepresentationDescriptionRegistry` and `IRepresentationDescriptionRegistryConfigurer` to replace them with `IEditingContextRepresentationDescriptionProvider` which provides the same feature but also gives access to the editing context for conditional registration of representation descriptions. +This new interface will move in the near future from `sirius-components-core` to `sirius-web-application`. +It's current location is only there to simplify the transition to the new Sirius Web architecture. === Dependency update @@ -65,6 +68,7 @@ This changes a core assumption from before where an element known to those servi - https://github.com/eclipse-sirius/sirius-web/issues/3063[#3063] [selection] Ensure Selections are always refreshed using the _current_ version of their target element - https://github.com/eclipse-sirius/sirius-web/issues/2721[#2721] [diagram] Prevent labels to exceed their container - https://github.com/eclipse-sirius/sirius-web/issues/3100[#3100] [diagram] Add support for drop on `IconLabelNode` +- === New Features diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/configuration/SiriusRepresentationDescriptionRegistryConfigurer.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/configuration/SiriusRepresentationDescriptionProvider.java similarity index 77% rename from packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/configuration/SiriusRepresentationDescriptionRegistryConfigurer.java rename to packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/configuration/SiriusRepresentationDescriptionProvider.java index 048c81a458..ed4d840526 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/configuration/SiriusRepresentationDescriptionRegistryConfigurer.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/configuration/SiriusRepresentationDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -19,9 +19,8 @@ import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistryConfigurer; import org.eclipse.sirius.components.compatibility.services.api.ISiriusConfiguration; import org.eclipse.sirius.components.compatibility.services.representations.ODesignReader; -import org.eclipse.sirius.components.compatibility.services.representations.SiriusRepresentationDescriptionProvider; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.diagrams.description.DiagramDescription; import org.eclipse.sirius.components.forms.description.FormDescription; import org.eclipse.sirius.components.representations.IRepresentationDescription; @@ -37,33 +36,33 @@ * @author hmarchadour */ @Configuration -public class SiriusRepresentationDescriptionRegistryConfigurer implements IRepresentationDescriptionRegistryConfigurer, IPropertiesDescriptionRegistryConfigurer { +public class SiriusRepresentationDescriptionProvider implements IEditingContextRepresentationDescriptionProvider, IPropertiesDescriptionRegistryConfigurer { private final List siriusConfigurations; private final ODesignReader oDesignReader; - private final SiriusRepresentationDescriptionProvider representationDescriptionProvider; + private final org.eclipse.sirius.components.compatibility.services.representations.SiriusRepresentationDescriptionProvider representationDescriptionProvider; - public SiriusRepresentationDescriptionRegistryConfigurer(List siriusConfigurations, ODesignReader oDesignReader, - SiriusRepresentationDescriptionProvider representationDescriptionProvider) { + public SiriusRepresentationDescriptionProvider(List siriusConfigurations, ODesignReader oDesignReader, + org.eclipse.sirius.components.compatibility.services.representations.SiriusRepresentationDescriptionProvider representationDescriptionProvider) { this.siriusConfigurations = Objects.requireNonNull(siriusConfigurations); this.oDesignReader = Objects.requireNonNull(oDesignReader); this.representationDescriptionProvider = Objects.requireNonNull(representationDescriptionProvider); } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { + public List getRepresentationDescriptions(IEditingContext editingContext) { // We should probably not filter only diagram and selection representations but instead of // opening the floodgates, we will be conservative for now - this.siriusConfigurations.stream() + return this.siriusConfigurations.stream() .map(ISiriusConfiguration::getODesignPaths) .flatMap(List::stream) .map(this::getRepresentationDescriptions) .flatMap(List::stream) .filter(description -> description instanceof DiagramDescription || description instanceof SelectionDescription) - .forEach(registry::add); + .toList(); } @Override diff --git a/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistryConfigurer.java b/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/api/IEditingContextRepresentationDescriptionProvider.java similarity index 51% rename from packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistryConfigurer.java rename to packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/api/IEditingContextRepresentationDescriptionProvider.java index ecd82a7ff1..f443f7a14c 100644 --- a/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistryConfigurer.java +++ b/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/api/IEditingContextRepresentationDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2020 Obeo. + * Copyright (c) 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -10,16 +10,19 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.core.configuration; +package org.eclipse.sirius.components.core.api; -import org.eclipse.sirius.components.annotations.PublicApi; +import java.util.List; + +import org.eclipse.sirius.components.representations.IRepresentationDescription; /** - * Interface to be implemented as a Spring configuration in order to configure the representation description registry. + * Used to provide the representation description of the editing context. + * + * Note: This interface will soon be moved into sirius-web-application * * @author sbegaudeau */ -@PublicApi -public interface IRepresentationDescriptionRegistryConfigurer { - void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry); +public interface IEditingContextRepresentationDescriptionProvider { + List getRepresentationDescriptions(IEditingContext editingContext); } diff --git a/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistry.java b/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistry.java deleted file mode 100644 index fd39494c8e..0000000000 --- a/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistry.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.components.core.configuration; - -import org.eclipse.sirius.components.annotations.PublicApi; -import org.eclipse.sirius.components.representations.IRepresentationDescription; - -/** - * The registry of all the representation descriptions. - * - * @author sbegaudeau - */ -@PublicApi -public interface IRepresentationDescriptionRegistry { - void add(IRepresentationDescription representationDescription); - - /** - * Implementation which does nothing, used for mocks in unit tests. - * - * @author sbegaudeau - */ - class NoOp implements IRepresentationDescriptionRegistry { - @Override - public void add(IRepresentationDescription representationDescription) { - // Do nothing - } - } -} diff --git a/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/configuration/FormDescriptionEditorDescriptionRegistryConfigurer.java b/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/configuration/FormDescriptionEditorDescriptionProvider.java similarity index 79% rename from packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/configuration/FormDescriptionEditorDescriptionRegistryConfigurer.java rename to packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/configuration/FormDescriptionEditorDescriptionProvider.java index 7dbf0bde41..bf20d31155 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/configuration/FormDescriptionEditorDescriptionRegistryConfigurer.java +++ b/packages/formdescriptioneditors/backend/sirius-components-formdescriptioneditors/src/main/java/org/eclipse/sirius/components/formdescriptioneditors/configuration/FormDescriptionEditorDescriptionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2022, 2023 Obeo. + * Copyright (c) 2022, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -12,14 +12,15 @@ *******************************************************************************/ package org.eclipse.sirius.components.formdescriptioneditors.configuration; +import java.util.List; import java.util.Objects; import java.util.UUID; import java.util.function.Function; import java.util.function.Predicate; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.core.api.IObjectService; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; import org.eclipse.sirius.components.formdescriptioneditors.description.FormDescriptionEditorDescription; import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.representations.VariableManager; @@ -32,16 +33,16 @@ * @author arichard */ @Configuration -public class FormDescriptionEditorDescriptionRegistryConfigurer implements IRepresentationDescriptionRegistryConfigurer { +public class FormDescriptionEditorDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { private final IObjectService objectService; - public FormDescriptionEditorDescriptionRegistryConfigurer(IObjectService objectService) { + public FormDescriptionEditorDescriptionProvider(IObjectService objectService) { this.objectService = Objects.requireNonNull(objectService); } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { + public List getRepresentationDescriptions(IEditingContext editingContext) { UUID id = UUID.nameUUIDFromBytes("FormDescriptionEditor".getBytes()); String label = "FormDescriptionEditor"; @@ -59,7 +60,6 @@ public void addRepresentationDescriptions(IRepresentationDescriptionRegistry reg .canCreatePredicate(canCreatePredicate) .build(); - registry.add(formDescriptionEditorDescription); - // @formatter:on + return List.of(formDescriptionEditorDescription); } } 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 1c28e19d28..ea72cf247f 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 @@ -35,16 +35,16 @@ import org.eclipse.sirius.components.compatibility.services.ImageConstants; import org.eclipse.sirius.components.core.URLParser; import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.core.api.IURLParser; import org.eclipse.sirius.components.core.api.SemanticKindConstants; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; import org.eclipse.sirius.components.emf.services.api.IEMFKindService; import org.eclipse.sirius.components.representations.Failure; import org.eclipse.sirius.components.representations.GetOrCreateRandomIdProvider; +import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.representations.IStatus; import org.eclipse.sirius.components.representations.VariableManager; import org.eclipse.sirius.components.trees.description.TreeDescription; @@ -58,7 +58,7 @@ * @author pcdavid */ @Service -public class ModelBrowsersDescriptionProvider implements IRepresentationDescriptionRegistryConfigurer { +public class ModelBrowsersDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { public static final String CONTAINER_DESCRIPTION_ID = UUID.nameUUIDFromBytes("model_browser_container_tree_description".getBytes()).toString(); @@ -87,18 +87,27 @@ public ModelBrowsersDescriptionProvider(IObjectService objectService, IURLParser } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { - registry.add(this.getModelBrowserDescription(CONTAINER_DESCRIPTION_ID, - variableManager -> variableManager.get("treeId", String.class).map(treeId -> treeId.startsWith("modelBrowser://container")).orElse(false), variableManager -> { - EClass referenceKind = this.resolveReferenceEClass(variableManager).orElse(null); - return this.isContainerSelectable(variableManager, referenceKind); - }, this::getCreationScopeElements)); - registry.add(this.getModelBrowserDescription(REFERENCE_DESCRIPTION_ID, - variableManager -> variableManager.get("treeId", String.class).map(treeId -> treeId.startsWith("modelBrowser://reference")).orElse(false), variableManager -> { - EClass targetType = this.resolveTargetType(variableManager).orElse(null); - boolean isContainment = this.resolveIsContainment(variableManager); - return this.isTypeSelectable(variableManager, targetType, isContainment); - }, this::getSearchScopeElements)); + public List getRepresentationDescriptions(IEditingContext editingContext) { + Predicate containerDescriptionCanCreatePredicate = variableManager -> variableManager.get("treeId", String.class) + .map(treeId -> treeId.startsWith("modelBrowser://container")) + .orElse(false); + Function containerDescriptionIsSelectableProvider = variableManager -> { + EClass referenceKind = this.resolveReferenceEClass(variableManager).orElse(null); + return this.isContainerSelectable(variableManager, referenceKind); + }; + var containerDescription = this.getModelBrowserDescription(CONTAINER_DESCRIPTION_ID, containerDescriptionCanCreatePredicate, containerDescriptionIsSelectableProvider, this::getCreationScopeElements); + + Predicate referenceDescriptionCanCreatePredicate = variableManager -> variableManager.get("treeId", String.class) + .map(treeId -> treeId.startsWith("modelBrowser://reference")) + .orElse(false); + Function referenceDescriptionIsSelectableProvider = variableManager -> { + EClass targetType = this.resolveTargetType(variableManager).orElse(null); + boolean isContainment = this.resolveIsContainment(variableManager); + return this.isTypeSelectable(variableManager, targetType, isContainment); + }; + var referenceDescription = this.getModelBrowserDescription(REFERENCE_DESCRIPTION_ID, referenceDescriptionCanCreatePredicate, referenceDescriptionIsSelectableProvider, this::getSearchScopeElements); + + return List.of(containerDescription, referenceDescription); } public TreeDescription getModelBrowserDescription(String descriptionId, Predicate canCreatePredicate, Function isSelectableProvider, diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceViewRepresentationDescriptionRegistryConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceViewRepresentationDescriptionProvider.java similarity index 81% rename from packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceViewRepresentationDescriptionRegistryConfigurer.java rename to packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceViewRepresentationDescriptionProvider.java index 551e495918..2ee9cb5576 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceViewRepresentationDescriptionRegistryConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceViewRepresentationDescriptionProvider.java @@ -27,11 +27,12 @@ import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.emf.services.IDAdapter; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; import org.eclipse.sirius.components.emf.utils.EMFResourceUtils; +import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.view.View; import org.eclipse.sirius.components.view.ViewPackage; import org.eclipse.sirius.components.view.emf.IViewConverter; @@ -45,21 +46,21 @@ * @author pcdavid */ @Configuration -public class ReferenceViewRepresentationDescriptionRegistryConfigurer implements IRepresentationDescriptionRegistryConfigurer { +public class ReferenceViewRepresentationDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { private final IViewConverter viewConverter; private final EPackage.Registry ePackagesRegistry; private final IInMemoryViewRegistry inMemoryViewRegistry; - public ReferenceViewRepresentationDescriptionRegistryConfigurer(IViewConverter viewConverter, Registry ePackagesRegistry, IInMemoryViewRegistry inMemoryViewRegistry) { + public ReferenceViewRepresentationDescriptionProvider(IViewConverter viewConverter, Registry ePackagesRegistry, IInMemoryViewRegistry inMemoryViewRegistry) { this.viewConverter = viewConverter; this.ePackagesRegistry = ePackagesRegistry; this.inMemoryViewRegistry = inMemoryViewRegistry; } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { + public List getRepresentationDescriptions(IEditingContext editingContext) { Optional optionalView = this.load(new ClassPathResource("Reference_Test_Form.view"), List.of(ViewPackage.eINSTANCE), View.class); if (optionalView.isPresent()) { @@ -71,11 +72,14 @@ public void addRepresentationDescriptions(IRepresentationDescriptionRegistry reg this.inMemoryViewRegistry.register(view); - List staticEPackages = this.ePackagesRegistry.values().stream().filter(EPackage.class::isInstance).map(EPackage.class::cast).collect(Collectors.toList()); + List staticEPackages = this.ePackagesRegistry.values().stream() + .filter(EPackage.class::isInstance) + .map(EPackage.class::cast) + .collect(Collectors.toList()); - var representationDescriptions = this.viewConverter.convert(List.of(view), staticEPackages); - representationDescriptions.forEach(registry::add); + return this.viewConverter.convert(List.of(view), staticEPackages); } + return List.of(); } private Optional load(ClassPathResource classPathResource, List requiredEPackages, Class rootElementType) { diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceWidgetIntegrationTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceWidgetIntegrationTests.java index aa5941baef..c684cb61ea 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceWidgetIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ReferenceWidgetIntegrationTests.java @@ -58,7 +58,7 @@ /** * Integration tests for the Slider custom widget. Depends on - * {@link ReferenceViewRepresentationDescriptionRegistryConfigurer} to register the "Reference Widget Test" form description. + * {@link ReferenceViewRepresentationDescriptionProvider} to register the "Reference Widget Test" form description. * * @author pcdavid */ diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderViewRepresentationDescriptionRegistryConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderViewRepresentationDescriptionProvider.java similarity index 85% rename from packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderViewRepresentationDescriptionRegistryConfigurer.java rename to packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderViewRepresentationDescriptionProvider.java index c6402174dc..f4db084cf7 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderViewRepresentationDescriptionRegistryConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderViewRepresentationDescriptionProvider.java @@ -27,11 +27,12 @@ import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.emf.services.IDAdapter; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; import org.eclipse.sirius.components.emf.utils.EMFResourceUtils; +import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.view.View; import org.eclipse.sirius.components.view.ViewPackage; import org.eclipse.sirius.components.view.emf.IViewConverter; @@ -46,21 +47,21 @@ * @author pcdavid */ @Configuration -public class SliderViewRepresentationDescriptionRegistryConfigurer implements IRepresentationDescriptionRegistryConfigurer { +public class SliderViewRepresentationDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { private final IViewConverter viewConverter; private final EPackage.Registry ePackagesRegistry; private final IInMemoryViewRegistry inMemoryViewRegistry; - public SliderViewRepresentationDescriptionRegistryConfigurer(IViewConverter viewConverter, Registry ePackagesRegistry, IInMemoryViewRegistry inMemoryViewRegistry) { + public SliderViewRepresentationDescriptionProvider(IViewConverter viewConverter, Registry ePackagesRegistry, IInMemoryViewRegistry inMemoryViewRegistry) { this.viewConverter = viewConverter; this.ePackagesRegistry = ePackagesRegistry; this.inMemoryViewRegistry = inMemoryViewRegistry; } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { + public List getRepresentationDescriptions(IEditingContext editingContext) { Optional optionalView = this.load(new ClassPathResource("Slider_Test_Form.view"), List.of(ViewPackage.eINSTANCE, FormPackage.eINSTANCE), View.class); if (optionalView.isPresent()) { @@ -74,9 +75,9 @@ public void addRepresentationDescriptions(IRepresentationDescriptionRegistry reg List staticEPackages = this.ePackagesRegistry.values().stream().filter(EPackage.class::isInstance).map(EPackage.class::cast).collect(Collectors.toList()); - var representationDescriptions = this.viewConverter.convert(List.of(view), staticEPackages); - representationDescriptions.forEach(registry::add); + return this.viewConverter.convert(List.of(view), staticEPackages); } + return List.of(); } private Optional load(ClassPathResource classPathResource, List requiredEPackages, Class rootElementType) { diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderWidgetIntegrationTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderWidgetIntegrationTests.java index 0e4a613014..580c0c0bd4 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderWidgetIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/SliderWidgetIntegrationTests.java @@ -58,7 +58,7 @@ /** * Integration tests for the Slider custom widget. Depends on - * {@link SliderViewRepresentationDescriptionRegistryConfigurer} to register the "Slider Widget Test" form description. + * {@link SliderViewRepresentationDescriptionProvider} to register the "Slider Widget Test" form description. * * @author pcdavid */ diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ViewFormIdFormatTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ViewFormIdFormatTests.java index d8954d4fec..7dcc726133 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ViewFormIdFormatTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/view/ViewFormIdFormatTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Obeo. + * Copyright (c) 2023, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -23,13 +23,13 @@ import org.eclipse.sirius.components.collaborative.forms.services.PropertiesDescriptionRegistry; import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistryConfigurer; import org.eclipse.sirius.components.core.URLParser; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.forms.description.AbstractControlDescription; import org.eclipse.sirius.components.forms.description.FormDescription; import org.eclipse.sirius.components.forms.description.PageDescription; import org.eclipse.sirius.components.view.emf.form.IFormIdProvider; import org.eclipse.sirius.web.sample.tests.integration.AbstractIntegrationTests; -import org.eclipse.sirius.web.services.representations.RepresentationDescriptionRegistry; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.springframework.beans.factory.annotation.Autowired; @@ -49,20 +49,19 @@ public class ViewFormIdFormatTests extends AbstractIntegrationTests { private final URLParser urlParser = new URLParser(); @Autowired - private List configurers; + private List representationDescriptionProviders; @Autowired private List propertyConfigurers; @Test public void checkRepresentationFormIdFormat() { - var registry = new RepresentationDescriptionRegistry(); - this.configurers.forEach(configurer -> configurer.addRepresentationDescriptions(registry)); - - registry.getRepresentationDescriptions().stream() - .filter(FormDescription.class::isInstance) - .map(FormDescription.class::cast) - .forEach(this::checkIds); + this.representationDescriptionProviders.stream() + .map(representationDescriptionProvider -> representationDescriptionProvider.getRepresentationDescriptions(new IEditingContext.NoOp())) + .flatMap(List::stream) + .filter(FormDescription.class::isInstance) + .map(FormDescription.class::cast) + .forEach(this::checkIds); } @Test diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchService.java index cc85da242f..6edd025b1b 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchService.java @@ -27,8 +27,8 @@ import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IEditingContextProcessor; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.core.api.IEditingContextSearchService; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; import org.eclipse.sirius.components.emf.services.EditingContextCrossReferenceAdapter; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; @@ -39,7 +39,6 @@ import org.eclipse.sirius.web.persistence.repositories.IProjectRepository; import org.eclipse.sirius.web.services.api.id.IDParser; import org.eclipse.sirius.web.services.editingcontext.api.IEditingDomainFactoryService; -import org.eclipse.sirius.web.services.representations.RepresentationDescriptionRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -65,18 +64,18 @@ public class EditingContextSearchService implements IEditingContextSearchService private final IEditingDomainFactoryService editingDomainFactoryService; - private final List configurers; + private final List representationDescriptionProviders; private final List editingContextProcessors; private final Timer timer; public EditingContextSearchService(IProjectRepository projectRepository, IDocumentRepository documentRepository, IEditingDomainFactoryService editingDomainFactoryService, - List configurers, List editingContextProcessors, MeterRegistry meterRegistry) { + List representationDescriptionProviders, List editingContextProcessors, MeterRegistry meterRegistry) { this.projectRepository = Objects.requireNonNull(projectRepository); this.documentRepository = Objects.requireNonNull(documentRepository); this.editingDomainFactoryService = Objects.requireNonNull(editingDomainFactoryService); - this.configurers = Objects.requireNonNull(configurers); + this.representationDescriptionProviders = Objects.requireNonNull(representationDescriptionProviders); this.editingContextProcessors = Objects.requireNonNull(editingContextProcessors); this.timer = Timer.builder(TIMER_NAME).register(meterRegistry); } @@ -126,7 +125,10 @@ public Optional findById(String editingContextId) { this.logger.debug("{} documents loaded for the editing context {}", resourceSet.getResources().size(), editingContextId); - this.computeRepresentationDescriptions(editingContext); + this.representationDescriptionProviders.forEach(representationDescriptionProvider -> { + var representationDescriptions = representationDescriptionProvider.getRepresentationDescriptions(editingContext); + representationDescriptions.forEach(representationDescription -> editingContext.getRepresentationDescriptions().put(representationDescription.getId(), representationDescription)); + }); this.editingContextProcessors.forEach(processor -> processor.postProcess(editingContext)); @@ -135,10 +137,4 @@ public Optional findById(String editingContextId) { return Optional.of(editingContext); } - - private void computeRepresentationDescriptions(EditingContext editingContext) { - var registry = new RepresentationDescriptionRegistry(); - this.configurers.forEach(configurer -> configurer.addRepresentationDescriptions(registry)); - registry.getRepresentationDescriptions().forEach(representationDescription -> editingContext.getRepresentationDescriptions().put(representationDescription.getId(), representationDescription)); - } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/explorer/ExplorerDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/explorer/ExplorerDescriptionProvider.java index 84e526e766..fcf388e223 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/explorer/ExplorerDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/explorer/ExplorerDescriptionProvider.java @@ -29,15 +29,15 @@ import org.eclipse.sirius.components.compatibility.services.ImageConstants; import org.eclipse.sirius.components.core.RepresentationMetadata; import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.core.api.IURLParser; import org.eclipse.sirius.components.core.api.SemanticKindConstants; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; import org.eclipse.sirius.components.representations.Failure; import org.eclipse.sirius.components.representations.GetOrCreateRandomIdProvider; +import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.representations.IStatus; import org.eclipse.sirius.components.representations.VariableManager; import org.eclipse.sirius.components.trees.TreeItem; @@ -55,7 +55,7 @@ * @author hmarchadour */ @Service -public class ExplorerDescriptionProvider implements IRepresentationDescriptionRegistryConfigurer { +public class ExplorerDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { public static final String DESCRIPTION_ID = UUID.nameUUIDFromBytes("explorer_tree_description".getBytes()).toString(); @@ -84,8 +84,8 @@ public ExplorerDescriptionProvider(IObjectService objectService, IURLParser urlP } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { - registry.add(this.getExplorerDescription()); + public List getRepresentationDescriptions(IEditingContext editingContext) { + return List.of(this.getExplorerDescription()); } public TreeDescription getExplorerDescription() { diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/portals/PortalsDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/portals/PortalsDescriptionProvider.java index 59614d1341..628a4fdc14 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/portals/PortalsDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/portals/PortalsDescriptionProvider.java @@ -12,14 +12,17 @@ *******************************************************************************/ package org.eclipse.sirius.web.services.portals; +import java.util.List; import java.util.Objects; import java.util.UUID; +import java.util.function.Function; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.core.api.IObjectService; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; import org.eclipse.sirius.components.portals.description.PortalDescription; import org.eclipse.sirius.components.representations.GetOrCreateRandomIdProvider; +import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.representations.VariableManager; import org.springframework.stereotype.Service; @@ -29,7 +32,7 @@ * @author pcdavid */ @Service -public class PortalsDescriptionProvider implements IRepresentationDescriptionRegistryConfigurer { +public class PortalsDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { public static final String DESCRIPTION_ID = UUID.nameUUIDFromBytes("portals_description".getBytes()).toString(); private final IObjectService objectService; @@ -39,13 +42,22 @@ public PortalsDescriptionProvider(IObjectService objectService) { } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { - registry.add(PortalDescription.newPortalDescription(DESCRIPTION_ID) + public List getRepresentationDescriptions(IEditingContext editingContext) { + Function labelProvider = variableManager -> variableManager.get("name", String.class) + .orElse("Portal"); + + Function targetObjectIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class) + .map(this.objectService::getId) + .orElse(""); + + var portalDescription = PortalDescription.newPortalDescription(DESCRIPTION_ID) .label("Portal") .idProvider(new GetOrCreateRandomIdProvider()) - .labelProvider(variableManager -> variableManager.get("name", String.class).orElse("Portal")) - .targetObjectIdProvider(variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse("")) + .labelProvider(labelProvider) + .targetObjectIdProvider(targetObjectIdProvider) .canCreatePredicate(variableManager -> true) - .build()); + .build(); + + return List.of(portalDescription); } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationDescriptionRegistry.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationDescriptionRegistry.java deleted file mode 100644 index f806c79571..0000000000 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationDescriptionRegistry.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.services.representations; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.representations.IRepresentationDescription; - -/** - * Registry containing all the representation descriptions. - * - * @author sbegaudeau - */ -public class RepresentationDescriptionRegistry implements IRepresentationDescriptionRegistry { - - private final Map id2representationDescriptions = new HashMap<>(); - - @Override - public void add(IRepresentationDescription representationDescription) { - this.id2representationDescriptions.put(representationDescription.getId(), representationDescription); - } - - public Optional getRepresentationDescription(String id) { - return Optional.ofNullable(this.id2representationDescriptions.get(id)); - } - - public List getRepresentationDescriptions() { - return this.id2representationDescriptions.values().stream().toList(); - } - -} diff --git a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/configuration/FlowViewRegistryConfiguration.java b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/configuration/FlowRepresentationDescriptionProvider.java similarity index 85% rename from packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/configuration/FlowViewRegistryConfiguration.java rename to packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/configuration/FlowRepresentationDescriptionProvider.java index ae87b467f0..939f9c09c2 100644 --- a/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/configuration/FlowViewRegistryConfiguration.java +++ b/packages/starters/backend/sirius-components-flow-starter/src/main/java/org/eclipse/sirius/components/flow/starter/configuration/FlowRepresentationDescriptionProvider.java @@ -18,8 +18,8 @@ import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistry; -import org.eclipse.sirius.components.core.configuration.IRepresentationDescriptionRegistryConfigurer; +import org.eclipse.sirius.components.core.api.IEditingContext; +import org.eclipse.sirius.components.core.api.IEditingContextRepresentationDescriptionProvider; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; import org.eclipse.sirius.components.emf.services.IDAdapter; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; @@ -27,6 +27,7 @@ import org.eclipse.sirius.components.flow.starter.view.FlowTopographyUnsynchronizedViewDiagramDescriptionProvider; import org.eclipse.sirius.components.flow.starter.view.FlowTopographyViewDiagramDescriptionProvider; import org.eclipse.sirius.components.flow.starter.view.FlowTopographyWithAutoLayoutViewDiagramDescriptionProvider; +import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.eclipse.sirius.components.view.ColorPalette; import org.eclipse.sirius.components.view.FixedColor; import org.eclipse.sirius.components.view.View; @@ -36,31 +37,30 @@ import org.eclipse.sirius.components.view.emf.IViewConverter; import org.eclipse.sirius.emfjson.resource.JsonResource; import org.eclipse.sirius.web.services.api.representations.IInMemoryViewRegistry; -import org.springframework.context.annotation.Configuration; /** * Register the Flow diagram in the application. * * @author frouene */ -@Configuration -public class FlowViewRegistryConfiguration implements IRepresentationDescriptionRegistryConfigurer { +public class FlowRepresentationDescriptionProvider implements IEditingContextRepresentationDescriptionProvider { private static final String FLOW_VIEW_DIAGRAM_ID = "FlowDiagram"; + private final IViewConverter viewConverter; private final EPackage.Registry ePackagesRegistry; + private final IInMemoryViewRegistry inMemoryViewRegistry; - public FlowViewRegistryConfiguration(IViewConverter viewConverter, EPackage.Registry ePackagesRegistry, IInMemoryViewRegistry inMemoryViewRegistry) { + public FlowRepresentationDescriptionProvider(IViewConverter viewConverter, EPackage.Registry ePackagesRegistry, IInMemoryViewRegistry inMemoryViewRegistry) { this.viewConverter = Objects.requireNonNull(viewConverter); this.ePackagesRegistry = Objects.requireNonNull(ePackagesRegistry); this.inMemoryViewRegistry = Objects.requireNonNull(inMemoryViewRegistry); } @Override - public void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry) { - + public List getRepresentationDescriptions(IEditingContext editingContext) { ViewBuilder viewBuilder = new ViewBuilder(); View view = viewBuilder.build(); IColorProvider colorProvider = new ColorProvider(view); @@ -85,16 +85,12 @@ public void addRepresentationDescriptions(IRepresentationDescriptionRegistry reg // Convert org.eclipse.sirius.components.view.RepresentationDescription to org.eclipse.sirius.components.representations.IRepresentationDescription List staticEPackages = this.ePackagesRegistry.values().stream().filter(EPackage.class::isInstance).map(EPackage.class::cast).toList(); - var representationDescriptions = this.viewConverter.convert(List.of(view), staticEPackages); - - // Register org.eclipse.sirius.components.representations.IRepresentationDescription - representationDescriptions.forEach(registry::add); + return this.viewConverter.convert(List.of(view), staticEPackages); } private ColorPalette createColorPalette() { var colorPalette = ViewFactory.eINSTANCE.createColorPalette(); - colorPalette.getColors().add(this.createFixedColor("Flow_White", "#FFFFFF")); colorPalette.getColors().add(this.createFixedColor("Flow_Gray", "#B1BCBE")); colorPalette.getColors().add(this.createFixedColor("Flow_Orange", "#FBA600")); @@ -102,7 +98,6 @@ private ColorPalette createColorPalette() { colorPalette.getColors().add(this.createFixedColor("Flow_Black", "#002B3C")); colorPalette.getColors().add(this.createFixedColor("Flow_LightGray", "#F0F0F0")); - return colorPalette; }