diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index dfcf7dfb027..079d38fcea7 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 048c81a458b..41131a93658 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 @@ -18,10 +18,10 @@ import org.eclipse.sirius.components.collaborative.forms.services.api.IPropertiesDescriptionRegistry; 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.api.ISiriusRepresentationDescriptionConverter; 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 +37,32 @@ * @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 ISiriusRepresentationDescriptionConverter representationDescriptionProvider; - public SiriusRepresentationDescriptionRegistryConfigurer(List siriusConfigurations, ODesignReader oDesignReader, - SiriusRepresentationDescriptionProvider representationDescriptionProvider) { + public SiriusRepresentationDescriptionProvider(List siriusConfigurations, ODesignReader oDesignReader, ISiriusRepresentationDescriptionConverter 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/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/api/ISiriusRepresentationDescriptionConverter.java similarity index 53% rename from packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistryConfigurer.java rename to packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/api/ISiriusRepresentationDescriptionConverter.java index ecd82a7ff1a..ac9c92e31d7 100644 --- a/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/configuration/IRepresentationDescriptionRegistryConfigurer.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/api/ISiriusRepresentationDescriptionConverter.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,18 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.core.configuration; +package org.eclipse.sirius.components.compatibility.services.api; -import org.eclipse.sirius.components.annotations.PublicApi; +import java.util.List; + +import org.eclipse.sirius.components.representations.IRepresentationDescription; +import org.eclipse.sirius.viewpoint.description.Group; /** - * Interface to be implemented as a Spring configuration in order to configure the representation description registry. + * Used to convert Sirius representation descriptions. * * @author sbegaudeau */ -@PublicApi -public interface IRepresentationDescriptionRegistryConfigurer { - void addRepresentationDescriptions(IRepresentationDescriptionRegistry registry); +public interface ISiriusRepresentationDescriptionConverter { + List getRepresentationDescriptions(Group group); } diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/representations/SiriusRepresentationDescriptionProvider.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/representations/SiriusRepresentationDescriptionConverter.java similarity index 92% rename from packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/representations/SiriusRepresentationDescriptionProvider.java rename to packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/representations/SiriusRepresentationDescriptionConverter.java index e0c48d31180..590529d4094 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/representations/SiriusRepresentationDescriptionProvider.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/services/representations/SiriusRepresentationDescriptionConverter.java @@ -20,6 +20,7 @@ import java.util.stream.Stream; import org.eclipse.sirius.components.compatibility.services.SelectModelElementVariableProvider; +import org.eclipse.sirius.components.compatibility.services.api.ISiriusRepresentationDescriptionConverter; import org.eclipse.sirius.components.compatibility.services.diagrams.api.IDiagramDescriptionConverter; import org.eclipse.sirius.components.compatibility.services.forms.api.IViewExtensionDescriptionConverter; import org.eclipse.sirius.components.compatibility.services.selection.api.ISelectModelElementVariableConverter; @@ -42,7 +43,7 @@ * @author sbegaudeau */ @Service -public class SiriusRepresentationDescriptionProvider { +public class SiriusRepresentationDescriptionConverter implements ISiriusRepresentationDescriptionConverter { private final IDiagramDescriptionConverter diagramDescriptionConverter; @@ -50,13 +51,14 @@ public class SiriusRepresentationDescriptionProvider { private final ISelectModelElementVariableConverter selectModelElementVariableConverter; - public SiriusRepresentationDescriptionProvider(IDiagramDescriptionConverter diagramDescriptionConverter, IViewExtensionDescriptionConverter viewExtensionDescriptionConverter, - ISelectModelElementVariableConverter selectModelElementVariableConverter) { + public SiriusRepresentationDescriptionConverter(IDiagramDescriptionConverter diagramDescriptionConverter, IViewExtensionDescriptionConverter viewExtensionDescriptionConverter, + ISelectModelElementVariableConverter selectModelElementVariableConverter) { this.diagramDescriptionConverter = Objects.requireNonNull(diagramDescriptionConverter); this.viewExtensionDescriptionConverter = Objects.requireNonNull(viewExtensionDescriptionConverter); this.selectModelElementVariableConverter = Objects.requireNonNull(selectModelElementVariableConverter); } + @Override public List getRepresentationDescriptions(Group group) { List viewpoints = group.getOwnedViewpoints(); diff --git a/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/api/IEditingContextRepresentationDescriptionProvider.java b/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/api/IEditingContextRepresentationDescriptionProvider.java new file mode 100644 index 00000000000..f443f7a14cb --- /dev/null +++ b/packages/core/backend/sirius-components-core/src/main/java/org/eclipse/sirius/components/core/api/IEditingContextRepresentationDescriptionProvider.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * 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 + * 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.api; + +import java.util.List; + +import org.eclipse.sirius.components.representations.IRepresentationDescription; + +/** + * Used to provide the representation description of the editing context. + * + * Note: This interface will soon be moved into sirius-web-application + * + * @author sbegaudeau + */ +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 fd39494c8e5..00000000000 --- 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 7dbf0bde41b..bf20d311550 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 1c28e19d288..ea72cf247f5 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 551e495918a..2ee9cb55766 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 aa5941baef0..c684cb61ea8 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 c6402174dc8..f4db084cf7d 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 0e4a613014a..580c0c0bd4a 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 d8954d4fec9..7dcc726133a 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 cc85da242ff..6edd025b1b2 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 84e526e7660..fcf388e2232 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 59614d13411..628a4fdc143 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 f806c795711..00000000000 --- 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 ae87b467f09..eda0a326d49 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,32 @@ 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; +import org.springframework.stereotype.Service; /** * Register the Flow diagram in the application. * * @author frouene */ -@Configuration -public class FlowViewRegistryConfiguration implements IRepresentationDescriptionRegistryConfigurer { +@Service +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 +87,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 +100,6 @@ private ColorPalette createColorPalette() { colorPalette.getColors().add(this.createFixedColor("Flow_Black", "#002B3C")); colorPalette.getColors().add(this.createFixedColor("Flow_LightGray", "#F0F0F0")); - return colorPalette; } diff --git a/packages/web/backend/sirius-components-web/src/main/java/org/eclipse/sirius/components/web/controller/ParametricSVGImageController.java b/packages/web/backend/sirius-components-web/src/main/java/org/eclipse/sirius/components/web/controller/ParametricSVGImageController.java deleted file mode 100644 index ced67abc37c..00000000000 --- a/packages/web/backend/sirius-components-web/src/main/java/org/eclipse/sirius/components/web/controller/ParametricSVGImageController.java +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2022, 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.web.controller; - -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.EnumMap; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.TimeUnit; - -import jakarta.servlet.http.HttpServletRequest; - -import org.eclipse.sirius.components.collaborative.diagrams.api.IParametricSVGImageFactory; -import org.eclipse.sirius.components.collaborative.diagrams.api.SVGAttribute; -import org.springframework.core.io.ByteArrayResource; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Timer; - -/** - * The entry point of the HTTP API to get SVG images that will be dynamically computed. - *

- * This endpoint will be available on the API base path prefix with image segment and followed by the image path used as - * a suffix. As such, users will be able to send image request to the following URL: - *

- * - *
- * PROTOCOL://DOMAIN.TLD(:PORT)/API_BASE_PATH/svgimages/SVG_ID
- * 
- * - *

- * In a development environment, the URL will most likely be: - *

- * - *
- * http://localhost:8080/api/parametricsvgs/SVG_ID
- * 
- * - * @author lfasani - */ -@Controller -@RequestMapping(URLConstants.PARAMETRIC_IMAGE_BASE_PATH + "/*") -public class ParametricSVGImageController { - - private static final MediaType IMAGE_SVG = MediaType.valueOf("image/svg+xml"); - - private static final String TIMER = "sirius-components_parametricsvg"; - - private final List svgImageFactories; - - private final Timer timer; - - public ParametricSVGImageController(List svgImageFactories, MeterRegistry meterRegistry) { - this.svgImageFactories = Objects.requireNonNull(svgImageFactories); - - this.timer = Timer.builder(TIMER).register(meterRegistry); - } - - @GetMapping - @ResponseBody - public ResponseEntity getImage(HttpServletRequest request) { - ResponseEntity response = new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.NOT_FOUND); - - long start = System.currentTimeMillis(); - - String requestURI = request.getRequestURI(); - String imageType = URLDecoder.decode(requestURI.substring(URLConstants.PARAMETRIC_IMAGE_BASE_PATH.length() + 1), StandardCharsets.UTF_8); - EnumMap attributesValues = new EnumMap<>(SVGAttribute.class); - for (SVGAttribute attribute : SVGAttribute.values()) { - Object attributeValue = request.getParameter(attribute.getLabel()); - if (attributeValue instanceof String) { - attributesValues.put(attribute, (String) attributeValue); - } - } - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(IMAGE_SVG); - - // @formatter:off - response = this.svgImageFactories.stream() - .map(factory -> factory.createSvg(imageType, attributesValues)) - .filter(Optional::isPresent) - .findFirst() - .map(Optional::get) - .map(ByteArrayResource::new) - .map(resource -> new ResponseEntity<>(resource, headers, HttpStatus.OK)) - .orElse(new ResponseEntity(null, new HttpHeaders(), HttpStatus.NOT_FOUND)); - // @formatter:on - - long end = System.currentTimeMillis(); - this.timer.record(end - start, TimeUnit.MILLISECONDS); - - return response; - } -}