diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 67c9d0376a..04fe3c5370 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -76,6 +76,9 @@ The GraphQL type `NodeDescription` has a new field `childNodeDescriptionIds`, re The GraphQL type `NodeDescription` has a new field `borderNodeDescriptionIds`, returning a list of Ids and replacing the field `borderNodeDescriptions` which has been deleted. - https://github.com/eclipse-sirius/sirius-web/issues/2872[#2872] [diagram] Change the signature of the node converters in order to leverage the diagram description to resolve the reuse descriptions. Additional changes to this interface will propably occur in the near future in order to support more complex use cases. +- https://github.com/eclipse-sirius/sirius-web/issues/2889[#2889] [emf] Remove the default implementation of the editing context from the `sirius-components-emf` module. +The default implementation of the editing context for Sirius Web, which had Sirius Web specific code already, will be owned by `sirius-web-services`. +This default implementation will now also contain all the view models properly loaded which should be considered during the lifecycle of the editing context. === Dependency update @@ -142,6 +145,9 @@ This is a preliminary work to add some proper support for outside labels in the - https://github.com/eclipse-sirius/sirius-web/issues/2889[#2889] [emf] Add the `IEMFEditingContext` interface in order to let any editing context be an EMF aware one. After this change, we will be able to delete the `EditingContext` class from `sirius-components-emf` and add new interfaces to describe the various capabilities of an editing context. Among those capabilities, we should find the list of view models to consider during the lifecycle of the editing context. +- https://github.com/eclipse-sirius/sirius-web/issues/2889[#2889] [view] Load view models only once during the lifecycle of the editing context. +This change makes the editing context the single source of truth for the state of the view models. + == v2023.12.0 diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/DynamicWidgetsTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/DynamicWidgetsTests.java index a5ba4cc1d7..7449f74272 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/DynamicWidgetsTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/DynamicWidgetsTests.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 @@ -43,7 +43,7 @@ import org.eclipse.sirius.components.core.services.ComposedObjectService; import org.eclipse.sirius.components.emf.services.DefaultObjectService; import org.eclipse.sirius.components.emf.services.EMFKindService; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.components.emf.services.IDAdapter; import org.eclipse.sirius.components.emf.services.LabelFeatureProviderRegistry; import org.eclipse.sirius.components.emf.utils.EMFResourceUtils; @@ -100,7 +100,7 @@ public void setup() { editingDomain.setAdapterFactory(this.composedAdapterFactory); editingDomain.getResourceSet().getPackageRegistry().put(FlowPackage.eNS_URI, FlowPackage.eINSTANCE); - this.editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + this.editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); this.system = FlowFactory.eINSTANCE.createSystem(); this.system.setName("Robot"); diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/ViewDetailsRenderingIntegrationTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/ViewDetailsRenderingIntegrationTests.java index 95fc13b9df..4e5251b4a9 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/ViewDetailsRenderingIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/ViewDetailsRenderingIntegrationTests.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 @@ -44,7 +44,7 @@ import org.eclipse.sirius.components.core.services.ComposedObjectService; import org.eclipse.sirius.components.emf.services.DefaultObjectService; import org.eclipse.sirius.components.emf.services.EMFKindService; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.components.emf.services.LabelFeatureProviderRegistry; import org.eclipse.sirius.components.emf.services.messages.IEMFMessageService; import org.eclipse.sirius.components.emf.utils.EMFResourceUtils; @@ -104,7 +104,7 @@ public void setup() { this.editingDomain.setAdapterFactory(composedAdapterFactory); this.editingDomain.getResourceSet().getPackageRegistry().put(FlowPackage.eNS_URI, FlowPackage.eINSTANCE); - this.editingContext = new EditingContext(UUID.randomUUID().toString(), this.editingDomain, Map.of()); + this.editingContext = new EditingContext(UUID.randomUUID().toString(), this.editingDomain, Map.of(), List.of()); this.view = this.loadFixture("ViewCompletionFixture.xmi"); diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/DynamicRepresentationDescriptionService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/DynamicRepresentationDescriptionService.java deleted file mode 100644 index 35f2e98a91..0000000000 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/DynamicRepresentationDescriptionService.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2021, 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.web.services.editingcontext; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.edit.domain.EditingDomain; -import org.eclipse.sirius.components.representations.IRepresentationDescription; -import org.eclipse.sirius.components.view.View; -import org.eclipse.sirius.components.view.emf.IViewConverter; -import org.eclipse.sirius.web.services.editingcontext.api.IDynamicRepresentationDescriptionService; -import org.eclipse.sirius.web.services.editingcontext.api.IViewLoader; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -/** - * Service to discover diagram descriptions dynamically from the existing user-defined documents. - * - * @author pcdavid - */ -@Service -public class DynamicRepresentationDescriptionService implements IDynamicRepresentationDescriptionService { - - private final IViewLoader viewLoader; - - private final IViewConverter viewConverter; - - private final boolean isStudioDefinitionEnabled; - - public DynamicRepresentationDescriptionService(IViewLoader viewLoader, IViewConverter viewConverter, @Value("${org.eclipse.sirius.web.features.studioDefinition:false}") boolean isStudioDefinitionEnabled) { - this.viewLoader = Objects.requireNonNull(viewLoader); - this.viewConverter = Objects.requireNonNull(viewConverter); - this.isStudioDefinitionEnabled = isStudioDefinitionEnabled; - } - - @Override - public List findDynamicRepresentationDescriptions(String editingContextId, EditingDomain editingDomain) { - List dynamicRepresentationDescriptions = new ArrayList<>(); - if (this.isStudioDefinitionEnabled) { - List views = this.viewLoader.load(); - - List accessibleEPackages = this.getAccessibleEPackages(editingDomain); - this.viewConverter.convert(views, accessibleEPackages).stream() - .filter(Objects::nonNull) - .forEach(dynamicRepresentationDescriptions::add); - } - return dynamicRepresentationDescriptions; - } - - private List getAccessibleEPackages(EditingDomain editingDomain) { - var packageRegistry = editingDomain.getResourceSet().getPackageRegistry(); - - return packageRegistry.values().stream() - .filter(EPackage.class::isInstance) - .map(EPackage.class::cast) - .toList(); - } -} diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditingContext.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContext.java similarity index 82% rename from packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditingContext.java rename to packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContext.java index bf78c3efb4..a9dda9cbc0 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditingContext.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/EditingContext.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 @@ -10,14 +10,16 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.components.emf.services; +package org.eclipse.sirius.web.services.editingcontext; +import java.util.List; import java.util.Map; import java.util.Objects; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; import org.eclipse.sirius.components.representations.IRepresentationDescription; +import org.eclipse.sirius.components.view.View; /** * Implementation of the editing context. @@ -32,10 +34,13 @@ public class EditingContext implements IEMFEditingContext { private final Map representationDescriptions; - public EditingContext(String id, AdapterFactoryEditingDomain editingDomain, Map representationDescriptions) { + private final List views; + + public EditingContext(String id, AdapterFactoryEditingDomain editingDomain, Map representationDescriptions, List views) { this.id = Objects.requireNonNull(id); this.editingDomain = Objects.requireNonNull(editingDomain); this.representationDescriptions = Objects.requireNonNull(representationDescriptions); + this.views = Objects.requireNonNull(views); } @Override @@ -52,4 +57,8 @@ public Map getRepresentationDescriptions() { return this.representationDescriptions; } + public List getViews() { + return this.views; + } + } 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 90e9d3017d..3f70e4eb87 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021, 2023 Obeo. + * Copyright (c) 2021, 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 @@ -21,26 +21,29 @@ import java.util.Optional; import java.util.concurrent.TimeUnit; +import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.util.BasicExtendedMetaData; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; +import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.sirius.components.core.api.IEditingContext; 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.EditingContext; import org.eclipse.sirius.components.emf.services.EditingContextCrossReferenceAdapter; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; import org.eclipse.sirius.components.representations.IRepresentationDescription; +import org.eclipse.sirius.components.view.View; +import org.eclipse.sirius.components.view.emf.IViewConverter; import org.eclipse.sirius.components.view.util.services.ColorPaletteService; import org.eclipse.sirius.emfjson.resource.JsonResource; import org.eclipse.sirius.web.persistence.entities.DocumentEntity; import org.eclipse.sirius.web.persistence.repositories.IDocumentRepository; 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.IDynamicRepresentationDescriptionService; import org.eclipse.sirius.web.services.editingcontext.api.IEditingDomainFactoryService; +import org.eclipse.sirius.web.services.editingcontext.api.IViewLoader; import org.eclipse.sirius.web.services.representations.RepresentationDescriptionRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,24 +72,27 @@ public class EditingContextSearchService implements IEditingContextSearchService private final List configurers; - private final IDynamicRepresentationDescriptionService dynamicRepresentationDescriptionService; + private final IViewLoader viewLoader; + + private final IViewConverter viewConverter; private final Timer timer; public EditingContextSearchService(IProjectRepository projectRepository, IDocumentRepository documentRepository, IEditingDomainFactoryService editingDomainFactoryService, - List configurers, IDynamicRepresentationDescriptionService dynamicRepresentationDescriptionService, MeterRegistry meterRegistry) { + List configurers, IViewLoader viewLoader, IViewConverter viewConverter, MeterRegistry meterRegistry) { this.projectRepository = Objects.requireNonNull(projectRepository); this.documentRepository = Objects.requireNonNull(documentRepository); this.editingDomainFactoryService = Objects.requireNonNull(editingDomainFactoryService); this.configurers = Objects.requireNonNull(configurers); - this.dynamicRepresentationDescriptionService = Objects.requireNonNull(dynamicRepresentationDescriptionService); + this.viewLoader = Objects.requireNonNull(viewLoader); + this.viewConverter = Objects.requireNonNull(viewConverter); this.timer = Timer.builder(TIMER_NAME).register(meterRegistry); } @Override public boolean existsById(String editingContextId) { - return new IDParser().parse(editingContextId).map(editingContextUUID -> this.projectRepository.existsById(editingContextUUID)).orElse(false); + return new IDParser().parse(editingContextId).map(this.projectRepository::existsById).orElse(false); } @Override @@ -126,17 +132,36 @@ public Optional findById(String editingContextId) { this.logger.debug("{} documents loaded for the editing context {}", resourceSet.getResources().size(), editingContextId); + var views = this.viewLoader.load(); + Map representationDescriptions = this.getRepresentationDescriptions(editingDomain, views); + + long end = System.currentTimeMillis(); + this.timer.record(end - start, TimeUnit.MILLISECONDS); + + return Optional.of(new EditingContext(editingContextId, editingDomain, representationDescriptions, views)); + } + + private Map getRepresentationDescriptions(EditingDomain editingDomain, List views) { Map representationDescriptions = new LinkedHashMap<>(); var registry = new RepresentationDescriptionRegistry(); this.configurers.forEach(configurer -> configurer.addRepresentationDescriptions(registry)); registry.getRepresentationDescriptions().forEach(representationDescription -> representationDescriptions.put(representationDescription.getId(), representationDescription)); - this.dynamicRepresentationDescriptionService.findDynamicRepresentationDescriptions(editingContextId, editingDomain) + + List accessibleEPackages = this.getAccessibleEPackages(editingDomain); + this.viewConverter.convert(views, accessibleEPackages).stream() + .filter(Objects::nonNull) .forEach(representationDescription -> representationDescriptions.put(representationDescription.getId(), representationDescription)); - long end = System.currentTimeMillis(); - this.timer.record(end - start, TimeUnit.MILLISECONDS); + return representationDescriptions; + } + + private List getAccessibleEPackages(EditingDomain editingDomain) { + var packageRegistry = editingDomain.getResourceSet().getPackageRegistry(); - return Optional.of(new EditingContext(editingContextId, editingDomain, representationDescriptions)); + return packageRegistry.values().stream() + .filter(EPackage.class::isInstance) + .map(EPackage.class::cast) + .toList(); } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/RepresentationDescriptionSearchService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/RepresentationDescriptionSearchService.java index 03653df463..898d3832b0 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/RepresentationDescriptionSearchService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/RepresentationDescriptionSearchService.java @@ -17,7 +17,6 @@ import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService; -import org.eclipse.sirius.components.emf.services.EditingContext; import org.eclipse.sirius.components.representations.IRepresentationDescription; import org.springframework.stereotype.Service; diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/ViewLoader.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/ViewLoader.java index 7d9f360465..f68bbb0b19 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/ViewLoader.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/ViewLoader.java @@ -37,6 +37,7 @@ import org.eclipse.sirius.web.services.editingcontext.api.IViewLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; @@ -52,11 +53,14 @@ public class ViewLoader implements IViewLoader { private final EPackage.Registry ePackageRegistry; + private final boolean isStudioDefinitionEnabled; + private final Logger logger = LoggerFactory.getLogger(ViewLoader.class); - public ViewLoader(IDocumentRepository documentRepository, EPackage.Registry ePackageRegistry) { + public ViewLoader(IDocumentRepository documentRepository, EPackage.Registry ePackageRegistry, @Value("${org.eclipse.sirius.web.features.studioDefinition:false}") boolean isStudioDefinitionEnabled) { this.documentRepository = Objects.requireNonNull(documentRepository); this.ePackageRegistry = Objects.requireNonNull(ePackageRegistry); + this.isStudioDefinitionEnabled = isStudioDefinitionEnabled; } @@ -64,13 +68,15 @@ public ViewLoader(IDocumentRepository documentRepository, EPackage.Registry ePac public List load() { List views = new ArrayList<>(); - var resourceSet = this.createResourceSet(); - this.loadStudioColorPalettes(resourceSet); + if (this.isStudioDefinitionEnabled) { + var resourceSet = this.createResourceSet(); + this.loadStudioColorPalettes(resourceSet); - this.documentRepository.findAllByType(ViewPackage.eNAME, ViewPackage.eNS_URI).forEach(documentEntity -> { - Resource resource = this.loadDocument(documentEntity, resourceSet); - views.addAll(this.getViewDefinitions(resource).toList()); - }); + this.documentRepository.findAllByType(ViewPackage.eNAME, ViewPackage.eNS_URI).forEach(documentEntity -> { + Resource resource = this.loadDocument(documentEntity, resourceSet); + views.addAll(this.getViewDefinitions(resource).toList()); + }); + } return views; } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IDynamicRepresentationDescriptionService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IDynamicRepresentationDescriptionService.java deleted file mode 100644 index 698331bcb0..0000000000 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IDynamicRepresentationDescriptionService.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2021, 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.editingcontext.api; - -import java.util.List; - -import org.eclipse.emf.edit.domain.EditingDomain; -import org.eclipse.sirius.components.representations.IRepresentationDescription; - -/** - * Service to discover representation descriptions dynamically from the existing user-defined documents. - * - * @author pcdavid - */ -public interface IDynamicRepresentationDescriptionService { - List findDynamicRepresentationDescriptions(String editingContextId, EditingDomain editingDomain); - - /** - * Implementation which does nothing, used for mocks in unit tests. - * - * @author sbegaudeau - */ - class NoOp implements IDynamicRepresentationDescriptionService { - @Override - public List findDynamicRepresentationDescriptions(String editingContextId, EditingDomain editingDomain) { - return List.of(); - } - } -} diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IViewLoader.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IViewLoader.java index ab86d678a8..b9d4cdb73e 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IViewLoader.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/editingcontext/api/IViewLoader.java @@ -23,4 +23,16 @@ */ public interface IViewLoader { List load(); + + /** + * Implementation which does nothing, used for mocks in unit tests. + * + * @author sbegaudeau + */ + class NoOp implements IViewLoader { + @Override + public List load() { + return List.of(); + } + } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchService.java index 2ac6471a86..328a023738 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchService.java @@ -23,6 +23,7 @@ import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.core.api.IURLParser; import org.eclipse.sirius.components.view.RepresentationDescription; @@ -31,6 +32,7 @@ import org.eclipse.sirius.components.view.diagram.DiagramDescription; import org.eclipse.sirius.components.view.diagram.EdgeDescription; import org.eclipse.sirius.components.view.diagram.NodeDescription; +import org.eclipse.sirius.components.view.emf.IRepresentationDescriptionIdProvider; import org.eclipse.sirius.components.view.emf.IViewRepresentationDescriptionSearchService; import org.eclipse.sirius.components.view.emf.diagram.IDiagramIdProvider; import org.eclipse.sirius.components.view.emf.form.IFormIdProvider; @@ -40,7 +42,7 @@ import org.eclipse.sirius.components.view.form.FormElementDescription; import org.eclipse.sirius.components.view.gantt.GanttDescription; import org.eclipse.sirius.web.services.api.representations.IInMemoryViewRegistry; -import org.eclipse.sirius.web.services.editingcontext.api.IViewLoader; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; @@ -52,8 +54,6 @@ @Service @ConditionalOnProperty(prefix = "org.eclipse.sirius.web.features", name = "studioDefinition") public class ViewRepresentationDescriptionSearchService implements IViewRepresentationDescriptionSearchService { - private final IViewLoader viewLoader; - private final IInMemoryViewRegistry inMemoryViewRegistry; private final IDiagramIdProvider diagramIdProvider; @@ -70,7 +70,6 @@ public class ViewRepresentationDescriptionSearchService implements IViewRepresen public ViewRepresentationDescriptionSearchService(ViewRepresentationDescriptionSearchServiceParameters parameters, IInMemoryViewRegistry inMemoryViewRegistry) { this.urlParser = Objects.requireNonNull(parameters.getUrlParser()); - this.viewLoader = Objects.requireNonNull(parameters.getViewLoader()); this.diagramIdProvider = Objects.requireNonNull(parameters.getDiagramIdProvider()); this.formIdProvider = Objects.requireNonNull(parameters.getFormIdProvider()); this.objectService = Objects.requireNonNull(parameters.getObjectService()); @@ -80,10 +79,10 @@ public ViewRepresentationDescriptionSearchService(ViewRepresentationDescriptionS } @Override - public Optional findById(String representationDescriptionId) { + public Optional findById(IEditingContext editingContext, String representationDescriptionId) { Optional sourceId = this.getSourceId(representationDescriptionId); if (sourceId.isPresent()) { - List views = this.getViewsFromSourceId(sourceId.get()); + List views = this.getViewsFromSourceId(editingContext, sourceId.get()); if (!views.isEmpty()) { var searchedView = views.stream() .flatMap(view -> view.getDescriptions().stream()) @@ -98,11 +97,11 @@ public Optional findById(String representationDescrip } @Override - public Optional findViewNodeDescriptionById(String nodeDescriptionId) { + public Optional findViewNodeDescriptionById(IEditingContext editingContext, String nodeDescriptionId) { Optional sourceId = this.getSourceId(nodeDescriptionId); Optional sourceElementId = this.getSourceElementId(nodeDescriptionId); if (sourceId.isPresent() && sourceElementId.isPresent()) { - List views = this.getViewsFromSourceId(sourceId.get()); + List views = this.getViewsFromSourceId(editingContext, sourceId.get()); if (!views.isEmpty()) { return views.stream() .flatMap(view -> view.getDescriptions().stream()) @@ -117,11 +116,11 @@ public Optional findViewNodeDescriptionById(String nodeDescript } @Override - public Optional findViewEdgeDescriptionById(String edgeDescriptionId) { + public Optional findViewEdgeDescriptionById(IEditingContext editingContext, String edgeDescriptionId) { Optional sourceId = this.getSourceId(edgeDescriptionId); Optional sourceElementId = this.getSourceElementId(edgeDescriptionId); if (sourceId.isPresent() && sourceElementId.isPresent()) { - List views = this.getViewsFromSourceId(sourceId.get()); + List views = this.getViewsFromSourceId(editingContext, sourceId.get()); if (!views.isEmpty()) { return views.stream() .flatMap(view -> view.getDescriptions().stream()) @@ -136,11 +135,11 @@ public Optional findViewEdgeDescriptionById(String edgeDescript } @Override - public Optional findViewFormElementDescriptionById(String formDescriptionId) { + public Optional findViewFormElementDescriptionById(IEditingContext editingContext, String formDescriptionId) { Optional sourceId = this.getSourceId(formDescriptionId); Optional sourceElementId = this.getSourceElementId(formDescriptionId); if (sourceId.isPresent() && sourceElementId.isPresent()) { - List views = this.getViewsFromSourceId(sourceId.get()); + List views = this.getViewsFromSourceId(editingContext, sourceId.get()); if (!views.isEmpty()) { return views.stream() .flatMap(view -> view.getDescriptions().stream()) @@ -154,13 +153,19 @@ public Optional findViewFormElementDescriptionById(Strin return Optional.empty(); } - private List getViewsFromSourceId(String sourceId) { - List views = this.inMemoryViewRegistry.findViewById(sourceId).stream().toList(); - if (!views.isEmpty()) { - return views; + private List getViewsFromSourceId(IEditingContext editingContext, String sourceId) { + List inMemoryViews = this.inMemoryViewRegistry.findViewById(sourceId).stream().toList(); + if (!inMemoryViews.isEmpty()) { + return inMemoryViews; } - return this.viewLoader.load().stream() + var views = Optional.of(editingContext) + .filter(EditingContext.class::isInstance) + .map(EditingContext.class::cast) + .map(EditingContext::getViews) + .orElse(List.of()); + + return views.stream() .filter(view -> view.eResource().getURI().segment(0).equals(sourceId)) .toList(); } @@ -218,12 +223,12 @@ private Optional findFormElementDescriptionById(FormDesc private Optional getSourceElementId(String descriptionId) { var parameters = this.urlParser.getParameterValues(descriptionId); - return Optional.ofNullable(parameters.get(IDiagramIdProvider.SOURCE_ELEMENT_ID)).orElse(List.of()).stream().findFirst(); + return Optional.ofNullable(parameters.get(IRepresentationDescriptionIdProvider.SOURCE_ELEMENT_ID)).orElse(List.of()).stream().findFirst(); } private Optional getSourceId(String descriptionId) { var parameters = this.urlParser.getParameterValues(descriptionId); - return Optional.ofNullable(parameters.get(IDiagramIdProvider.SOURCE_ID)).orElse(List.of()).stream().findFirst(); + return Optional.ofNullable(parameters.get(IRepresentationDescriptionIdProvider.SOURCE_ID)).orElse(List.of()).stream().findFirst(); } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchServiceParameters.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchServiceParameters.java index 198e8c47c0..0140ddff89 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchServiceParameters.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/ViewRepresentationDescriptionSearchServiceParameters.java @@ -21,7 +21,6 @@ import org.eclipse.sirius.components.view.emf.form.IFormIdProvider; import org.eclipse.sirius.components.view.emf.task.IDeckIdProvider; import org.eclipse.sirius.components.view.emf.task.IGanttIdProvider; -import org.eclipse.sirius.web.services.editingcontext.api.IViewLoader; import org.springframework.stereotype.Service; /** @@ -32,8 +31,6 @@ @Service public final class ViewRepresentationDescriptionSearchServiceParameters { - private final IViewLoader viewLoader; - private final IDiagramIdProvider diagramIdProvider; private final IURLParser urlParser; @@ -46,11 +43,10 @@ public final class ViewRepresentationDescriptionSearchServiceParameters { private final IObjectService objectService; - public ViewRepresentationDescriptionSearchServiceParameters(IViewLoader viewLoader, EPackage.Registry ePackageRegistry, IURLParser urlParser, IObjectService objectService, + public ViewRepresentationDescriptionSearchServiceParameters(EPackage.Registry ePackageRegistry, IURLParser urlParser, IObjectService objectService, ViewRepresentationIdParameters representationIdParameters) { Objects.requireNonNull(representationIdParameters); this.urlParser = Objects.requireNonNull(urlParser); - this.viewLoader = Objects.requireNonNull(viewLoader); this.diagramIdProvider = Objects.requireNonNull(representationIdParameters.getDiagramIdProvider()); this.formIdProvider = Objects.requireNonNull(representationIdParameters.getFormIdProvider()); this.ganttIdProvider = Objects.requireNonNull(representationIdParameters.getGanttIdProvider()); @@ -58,10 +54,6 @@ public ViewRepresentationDescriptionSearchServiceParameters(IViewLoader viewLoad this.objectService = Objects.requireNonNull(objectService); } - public IViewLoader getViewLoader() { - return this.viewLoader; - } - public IDiagramIdProvider getDiagramIdProvider() { return this.diagramIdProvider; } diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/CreateDocumentEventHandlerTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/CreateDocumentEventHandlerTests.java index 11f0f524bc..1f8e9ec650 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/CreateDocumentEventHandlerTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/CreateDocumentEventHandlerTests.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 @@ -14,6 +14,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -25,7 +26,7 @@ import org.eclipse.sirius.components.core.api.IPayload; import org.eclipse.sirius.components.core.configuration.StereotypeDescription; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.web.services.api.document.CreateDocumentInput; import org.eclipse.sirius.web.services.api.document.CreateDocumentSuccessPayload; import org.eclipse.sirius.web.services.api.document.Document; @@ -102,7 +103,7 @@ public Optional getStereotypeDescriptionById(String editi var input = new CreateDocumentInput(UUID.randomUUID(), UUID.randomUUID().toString(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID); AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create(); - EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); One payloadSink = Sinks.one(); @@ -138,7 +139,7 @@ public Optional getStereotypeDescriptionById(String editi }; IServicesMessageService messageService = new NoOpServicesMessageService(); AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create(); - EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); CreateDocumentEventHandler handler = new CreateDocumentEventHandler(documentService, stereotypeDescriptionService, messageService, new SimpleMeterRegistry()); Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/DeleteDocumentEventHandlerTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/DeleteDocumentEventHandlerTests.java index d5bd605c8a..8af60e776d 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/DeleteDocumentEventHandlerTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/DeleteDocumentEventHandlerTests.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 @@ -14,6 +14,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -25,7 +26,7 @@ import org.eclipse.sirius.components.collaborative.dto.DeleteDocumentInput; import org.eclipse.sirius.components.core.api.IPayload; import org.eclipse.sirius.components.core.api.SuccessPayload; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; import org.eclipse.sirius.web.services.api.document.Document; import org.eclipse.sirius.web.services.api.document.IDocumentService; @@ -63,7 +64,7 @@ public Optional getDocument(UUID documentId) { Resource resource = new JSONResourceFactory().createResourceFromPath(document.getId().toString()); editingDomain.getResourceSet().getResources().add(resource); - EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + var editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); One payloadSink = Sinks.one(); diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/RenameDocumentEventHandlerTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/RenameDocumentEventHandlerTests.java index a8c17979e9..2dbcff1550 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/RenameDocumentEventHandlerTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/RenameDocumentEventHandlerTests.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 @@ -14,6 +14,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -28,7 +29,7 @@ import org.eclipse.sirius.components.core.api.IPayload; import org.eclipse.sirius.components.core.api.SuccessPayload; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; import org.eclipse.sirius.web.services.api.document.Document; import org.eclipse.sirius.web.services.api.document.IDocumentService; @@ -74,7 +75,7 @@ public Optional rename(UUID documentId, String newName) { assertThat(editingDomain.getResourceSet().getResources().size()).isEqualTo(1); assertThat(adapter.getName()).isEqualTo(OLD_NAME); - IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); One payloadSink = Sinks.one(); diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/UploadDocumentEventHandlerTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/UploadDocumentEventHandlerTests.java index 1a35608fc0..5dc897c37d 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/UploadDocumentEventHandlerTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/documents/UploadDocumentEventHandlerTests.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 @@ -43,7 +43,7 @@ import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IPayload; import org.eclipse.sirius.components.emf.services.EObjectIDManager; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; import org.eclipse.sirius.components.graphql.api.UploadFile; import org.eclipse.sirius.emfjson.resource.JsonResource; @@ -176,7 +176,7 @@ public Optional createDocument(String projectId, String name, String c AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create(); - IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); One payloadSink = Sinks.one(); @@ -256,7 +256,7 @@ public Optional createDocument(String projectId, String name, String c var input = new UploadDocumentInput(UUID.randomUUID(), UUID.randomUUID().toString(), file, false); - IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); Many changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer(); One payloadSink = Sinks.one(); diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextPersistenceServiceTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextPersistenceServiceTests.java index 563e0ad4d5..f81c4d8a1b 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextPersistenceServiceTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextPersistenceServiceTests.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 @@ -23,10 +23,7 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EcoreFactory; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; -import org.eclipse.sirius.components.core.api.IEditingContext; -import org.eclipse.sirius.components.core.api.IEditingContextPersistenceService; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; -import org.eclipse.sirius.components.emf.services.EditingContext; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; import org.eclipse.sirius.emfjson.resource.JsonResource; import org.eclipse.sirius.web.persistence.entities.DocumentEntity; @@ -72,13 +69,10 @@ public Optional findById(UUID id) { }; IProjectRepository projectRepository = new NoOpProjectRepository(); - IEditingContextPersistenceService editingContextPersistenceService = new EditingContextPersistenceService(documentRepository, - projectRepository, - new NoOpApplicationEventPublisher(), - new SimpleMeterRegistry()); + var editingContextPersistenceService = new EditingContextPersistenceService(documentRepository, projectRepository, new NoOpApplicationEventPublisher(), new SimpleMeterRegistry()); assertThat(entities).hasSize(0); - IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + var editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); editingContextPersistenceService.persist(editingContext); assertThat(entities).hasSize(1); @@ -123,14 +117,11 @@ public Optional findById(UUID id) { } }; - IEditingContextPersistenceService editingContextPersistenceService = new EditingContextPersistenceService(documentRepository, - projectRepository, - new NoOpApplicationEventPublisher(), - new SimpleMeterRegistry()); + var editingContextPersistenceService = new EditingContextPersistenceService(documentRepository, projectRepository, new NoOpApplicationEventPublisher(), new SimpleMeterRegistry()); assertThat(entities).hasSize(0); - IEditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + var editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); editingContextPersistenceService.persist(editingContext); assertThat(entities).hasSize(1); diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchServiceTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchServiceTests.java index 6875de7c84..267b3cb538 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchServiceTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/editingcontext/EditingContextSearchServiceTests.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 @@ -28,15 +28,15 @@ import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IEditingContextSearchService; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; -import org.eclipse.sirius.components.emf.services.EditingContext; import org.eclipse.sirius.components.emf.services.IEditingContextEPackageService; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; +import org.eclipse.sirius.components.view.emf.IViewConverter; import org.eclipse.sirius.web.persistence.entities.DocumentEntity; import org.eclipse.sirius.web.persistence.entities.ProjectEntity; import org.eclipse.sirius.web.persistence.repositories.IDocumentRepository; import org.eclipse.sirius.web.persistence.repositories.IProjectRepository; -import org.eclipse.sirius.web.services.editingcontext.api.IDynamicRepresentationDescriptionService; import org.eclipse.sirius.web.services.editingcontext.api.IEditingDomainFactoryService; +import org.eclipse.sirius.web.services.editingcontext.api.IViewLoader; import org.eclipse.sirius.web.services.projects.api.EditingContextMetadata; import org.eclipse.sirius.web.services.projects.api.IEditingContextMetadataProvider; import org.junit.jupiter.api.Test; @@ -100,7 +100,7 @@ public void testEditingContextWithNoDocuments() { IEditingDomainFactoryService editingDomainFactoryService = new EditingDomainFactoryService(editingContextEPackageService, editingContextMetadataProvider, composedAdapterFactory, ePackageRegistry, Optional.empty()); IEditingContextSearchService editingContextSearchService = new EditingContextSearchService(projectRepository, documentRepository, editingDomainFactoryService, List.of(), - new IDynamicRepresentationDescriptionService.NoOp(), new SimpleMeterRegistry()); + new IViewLoader.NoOp(), new IViewConverter.NoOp(), new SimpleMeterRegistry()); IEditingContext editingContext = editingContextSearchService.findById(projectId).get(); assertThat(editingContext).isInstanceOf(EditingContext.class); @@ -148,7 +148,7 @@ public List findAllByProjectId(UUID projectId) { IEditingDomainFactoryService editingDomainFactoryService = new EditingDomainFactoryService(editingContextEPackageService, editingContextMetadataProvider, composedAdapterFactory, ePackageRegistry, Optional.empty()); IEditingContextSearchService editingContextSearchService = new EditingContextSearchService(projectRepository, documentRepository, editingDomainFactoryService, List.of(), - new IDynamicRepresentationDescriptionService.NoOp(), new SimpleMeterRegistry()); + new IViewLoader.NoOp(), new IViewConverter.NoOp(), new SimpleMeterRegistry()); IEditingContext editingContext = editingContextSearchService.findById(projectId.toString()).get(); assertThat(editingContext).isInstanceOf(EditingContext.class); diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/explorer/ExpandAllTreePathProviderTests.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/explorer/ExpandAllTreePathProviderTests.java index ef7043002a..f90b9f53ef 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/explorer/ExpandAllTreePathProviderTests.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/explorer/ExpandAllTreePathProviderTests.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 @@ -34,7 +34,7 @@ import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.core.api.IPayload; -import org.eclipse.sirius.components.emf.services.EditingContext; +import org.eclipse.sirius.web.services.editingcontext.EditingContext; import org.eclipse.sirius.components.emf.services.IDAdapter; import org.eclipse.sirius.components.trees.Tree; import org.eclipse.sirius.web.services.api.representations.IRepresentationService; @@ -97,7 +97,7 @@ private EditingContext createEditingContext() { Resource resource = this.createResourceWith4Elements(); AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create(); editingDomain.getResourceSet().getResources().add(resource); - return new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of()); + return new EditingContext(UUID.randomUUID().toString(), editingDomain, Map.of(), List.of()); } private Resource createResourceWith4Elements() { diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewConverter.java index 2078d1c1bd..5f557820af 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewConverter.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewConverter.java @@ -29,4 +29,17 @@ public interface IViewConverter { * Extract and convert the {@link IRepresentationDescription} from a list of {@link View} models. */ List convert(List views, List visibleEPackages); + + /** + * Implementation which does nothing, used for mocks in unit tests. + * + * @author sbegaudeau + */ + class NoOp implements IViewConverter { + + @Override + public List convert(List views, List visibleEPackages) { + return List.of(); + } + } } diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewRepresentationDescriptionSearchService.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewRepresentationDescriptionSearchService.java index fe3314337c..1b4ec57d0d 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewRepresentationDescriptionSearchService.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/IViewRepresentationDescriptionSearchService.java @@ -14,6 +14,7 @@ import java.util.Optional; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.view.RepresentationDescription; import org.eclipse.sirius.components.view.diagram.EdgeDescription; import org.eclipse.sirius.components.view.diagram.NodeDescription; @@ -26,13 +27,13 @@ */ public interface IViewRepresentationDescriptionSearchService { - Optional findById(String representationDescriptionId); + Optional findById(IEditingContext editingContext, String representationDescriptionId); - Optional findViewNodeDescriptionById(String nodeDescriptionId); + Optional findViewNodeDescriptionById(IEditingContext editingContext, String nodeDescriptionId); - Optional findViewEdgeDescriptionById(String edgeDescriptionId); + Optional findViewEdgeDescriptionById(IEditingContext editingContext, String edgeDescriptionId); - Optional findViewFormElementDescriptionById(String formDescriptionId); + Optional findViewFormElementDescriptionById(IEditingContext editingContext, String formDescriptionId); /** * Implementation which does nothing, used for mocks in unit tests. @@ -42,22 +43,22 @@ public interface IViewRepresentationDescriptionSearchService { class NoOp implements IViewRepresentationDescriptionSearchService { @Override - public Optional findById(String representationDescriptionId) { + public Optional findById(IEditingContext editingContext, String representationDescriptionId) { return Optional.empty(); } @Override - public Optional findViewNodeDescriptionById(String nodeDescriptionId) { + public Optional findViewNodeDescriptionById(IEditingContext editingContext, String nodeDescriptionId) { return Optional.empty(); } @Override - public Optional findViewEdgeDescriptionById(String edgeDescriptionId) { + public Optional findViewEdgeDescriptionById(IEditingContext editingContext, String edgeDescriptionId) { return Optional.empty(); } @Override - public Optional findViewFormElementDescriptionById(String formDescriptionId) { + public Optional findViewFormElementDescriptionById(IEditingContext editingContext, String formDescriptionId) { return Optional.empty(); } } diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewRepresentationDescriptionsProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewRepresentationDescriptionsProvider.java index 214e0776c7..ab1dc7a846 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewRepresentationDescriptionsProvider.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/ViewRepresentationDescriptionsProvider.java @@ -56,7 +56,7 @@ public boolean canHandle(IRepresentationDescription representationDescription) { @Override public List handle(IEditingContext editingContext, Object object, IRepresentationDescription representationDescription) { List result = new ArrayList<>(); - var viewRepresentationDescription = this.viewRepresentationDescriptionSearchService.findById(representationDescription.getId()); + var viewRepresentationDescription = this.viewRepresentationDescriptionSearchService.findById(editingContext, representationDescription.getId()); if (viewRepresentationDescription.isPresent()) { String defaultName = viewRepresentationDescription.map(view -> this.getDefaultName(view, editingContext, object)).orElse(representationDescription.getLabel()); result.add(new RepresentationDescriptionMetadata(representationDescription.getId(), representationDescription.getLabel(), defaultName)); diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DropNodeCompatibiliyProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DropNodeCompatibiliyProvider.java index 80b6f3b6ab..d57669655b 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DropNodeCompatibiliyProvider.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DropNodeCompatibiliyProvider.java @@ -59,7 +59,7 @@ public boolean canHandle(org.eclipse.sirius.components.diagrams.description.Diag @Override public List getDropNodeCompatibility(Diagram diagram, IEditingContext editingContext) { - var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(diagram.getDescriptionId()) + var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(editingContext, diagram.getDescriptionId()) .filter(DiagramDescription.class::isInstance) .map(DiagramDescription.class::cast); diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java index 82d16b469f..af6f7b4456 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProvider.java @@ -126,7 +126,7 @@ public Palette handle(Object targetElement, Object diagramElement, Object diagra Palette palette = null; VariableManager variableManager = new VariableManager(); variableManager.put(VariableManager.SELF, targetElement); - var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(diagramDescription.getId()) + var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(editingContext, diagramDescription.getId()) .filter(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::isInstance) .map(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::cast); if (optionalDiagramDescription.isPresent()) { @@ -136,10 +136,10 @@ public Palette handle(Object targetElement, Object diagramElement, Object diagra palette = this.getDiagramPalette(diagramDescription, viewDiagramDescription, variableManager, interpreter); } else if (diagramElement instanceof Node && diagramElementDescription instanceof NodeDescription nodeDescription) { variableManager.put(Node.SELECTED_NODE, diagramElement); - palette = this.getNodePalette(diagramDescription, nodeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement), variableManager, interpreter); + palette = this.getNodePalette(editingContext, diagramDescription, nodeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement), variableManager, interpreter); } else if (diagramElement instanceof Edge && diagramElementDescription instanceof EdgeDescription edgeDescription) { variableManager.put(Edge.SELECTED_EDGE, diagramElement); - palette = this.getEdgePalette(edgeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement), variableManager, interpreter); + palette = this.getEdgePalette(editingContext, edgeDescription, this.createExtraToolSections(diagramElementDescription, diagramElement), variableManager, interpreter); } } return palette; @@ -200,13 +200,13 @@ private ITool createNodeTool(NodeTool viewNodeTool, boolean appliesToDiagramRoot .build(); } - protected Palette getNodePalette(DiagramDescription diagramDescription, NodeDescription nodeDescription, List extraToolSections, VariableManager variableManager, AQLInterpreter interpreter) { + protected Palette getNodePalette(IEditingContext editingContext, DiagramDescription diagramDescription, NodeDescription nodeDescription, List extraToolSections, VariableManager variableManager, AQLInterpreter interpreter) { Optional sourceElementId = this.getSourceElementId(nodeDescription.getId()); Palette nodePalette = null; var toolFinder = new ToolFinder(); if (sourceElementId.isPresent()) { String nodePaletteId = "siriusComponents://nodePalette?nodeId=" + sourceElementId.get(); - var optionalNodeDescription = this.viewRepresentationDescriptionSearchService.findViewNodeDescriptionById(nodeDescription.getId()); + var optionalNodeDescription = this.viewRepresentationDescriptionSearchService.findViewNodeDescriptionById(editingContext, nodeDescription.getId()); if (optionalNodeDescription.isPresent()) { org.eclipse.sirius.components.view.diagram.NodeDescription viewNodeDescription = optionalNodeDescription.get(); var tools = new ArrayList(); @@ -270,14 +270,14 @@ private ITool createEdgeTool(EdgeTool viewEdgeTool, DiagramDescription diagramDe .build(); } - protected Palette getEdgePalette(EdgeDescription edgeDescription, List extraToolSections, VariableManager variableManager, AQLInterpreter interpreter) { + protected Palette getEdgePalette(IEditingContext editingContext, EdgeDescription edgeDescription, List extraToolSections, VariableManager variableManager, AQLInterpreter interpreter) { Palette edgePalette = null; var toolFinder = new ToolFinder(); Optional optionalSourceElementId = this.getSourceElementId(edgeDescription.getId()); if (optionalSourceElementId.isPresent()) { var sourceElementId = optionalSourceElementId.get(); - var optionalEdgeDescription = this.viewRepresentationDescriptionSearchService.findViewEdgeDescriptionById(edgeDescription.getId()); + var optionalEdgeDescription = this.viewRepresentationDescriptionSearchService.findViewEdgeDescriptionById(editingContext, edgeDescription.getId()); if (optionalEdgeDescription.isPresent()) { org.eclipse.sirius.components.view.diagram.EdgeDescription viewEdgeDescription = optionalEdgeDescription.get(); String edgePaletteId = "siriusComponents://edgePalette?edgeId=" + sourceElementId; diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java index c0479f8ca3..59ae342419 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewReconnectionToolsExecutor.java @@ -91,13 +91,13 @@ public IStatus execute(IEditingContext editingContext, ReconnectionToolInterpret DiagramDescription diagramDescription) { IStatus status = new Failure(""); - var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(diagramDescription.getId()) + var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(editingContext, diagramDescription.getId()) .filter(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::isInstance) .map(org.eclipse.sirius.components.view.diagram.DiagramDescription.class::cast); if (optionalDiagramDescription.isPresent()) { org.eclipse.sirius.components.view.diagram.DiagramDescription viewDiagramDescription = optionalDiagramDescription.get(); - var optionalViewEdgeDescription = this.viewRepresentationDescriptionSearchService.findViewEdgeDescriptionById(edgeDescription.getId()); + var optionalViewEdgeDescription = this.viewRepresentationDescriptionSearchService.findViewEdgeDescriptionById(editingContext, edgeDescription.getId()); if (optionalViewEdgeDescription.isPresent()) { var viewEdgeDescription = optionalViewEdgeDescription.get(); diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/providers/ViewInitialDirectEditElementLabelProvider.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/providers/ViewInitialDirectEditElementLabelProvider.java index 5b41a7a08f..ed6d2ca8fa 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/providers/ViewInitialDirectEditElementLabelProvider.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/providers/ViewInitialDirectEditElementLabelProvider.java @@ -95,7 +95,7 @@ public boolean canHandle(org.eclipse.sirius.components.diagrams.description.Diag public String getInitialDirectEditElementLabel(Object diagramElement, String labelId, Diagram diagram, IEditingContext editingContext) { String initialDirectEditElementLabel = ""; String diagramDescriptionId = diagram.getDescriptionId(); - var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(diagramDescriptionId) + var optionalDiagramDescription = this.viewRepresentationDescriptionSearchService.findById(editingContext, diagramDescriptionId) .filter(DiagramDescription.class::isInstance) .map(DiagramDescription.class::cast); diff --git a/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java b/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java index 5bc317fef8..735da9a9ea 100644 --- a/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java +++ b/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java @@ -22,6 +22,7 @@ import org.eclipse.sirius.components.collaborative.diagrams.api.IDiagramDescriptionService; import org.eclipse.sirius.components.collaborative.diagrams.dto.SingleClickOnDiagramElementTool; import org.eclipse.sirius.components.collaborative.diagrams.dto.SingleClickOnTwoDiagramElementsTool; +import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IObjectService; import org.eclipse.sirius.components.core.api.IURLParser; import org.eclipse.sirius.components.diagrams.FreeFormLayoutStrategy; @@ -128,7 +129,7 @@ public void getNodePaletteTest() { VariableManager variableManager = new VariableManager(); AQLInterpreter interpreter = new AQLInterpreter(List.of(), List.of(EcorePackage.eINSTANCE)); - var result = viewPaletteProvider.getNodePalette(this.createDiagramDescription(), this.createNodeDescription(), List.of(), variableManager, interpreter); + var result = viewPaletteProvider.getNodePalette(new IEditingContext.NoOp(), this.createDiagramDescription(), this.createNodeDescription(), List.of(), variableManager, interpreter); assertThat(result).isNotNull(); assertThat(result.id()).isEqualTo("siriusComponents://nodePalette?nodeId=sourceElementId"); @@ -161,7 +162,7 @@ public void getEdgePaletteTest() { VariableManager variableManager = new VariableManager(); AQLInterpreter interpreter = new AQLInterpreter(List.of(), List.of(EcorePackage.eINSTANCE)); - var result = viewPaletteProvider.getEdgePalette(edgeDescription, List.of(), variableManager, interpreter); + var result = viewPaletteProvider.getEdgePalette(new IEditingContext.NoOp(), edgeDescription, List.of(), variableManager, interpreter); assertThat(result).isNotNull(); assertThat(result.id()).isEqualTo("siriusComponents://edgePalette?edgeId=sourceElementId"); @@ -178,20 +179,19 @@ private ViewPaletteProvider createViewPaletteProvider() { IViewRepresentationDescriptionSearchService viewRepresentationDescriptionSearchService = new IViewRepresentationDescriptionSearchService.NoOp() { @Override - public Optional findById(String representationDescriptionId) { + public Optional findById(IEditingContext editingContext, String representationDescriptionId) { org.eclipse.sirius.components.view.diagram.DiagramDescription diagramDescription = getDiagramDescription(); return Optional.of(diagramDescription); } @Override - public Optional findViewNodeDescriptionById(String nodeDescriptionId) { - + public Optional findViewNodeDescriptionById(IEditingContext editingContext, String nodeDescriptionId) { org.eclipse.sirius.components.view.diagram.NodeDescription nodeDescription = getNodeDescription(); return Optional.of(nodeDescription); } @Override - public Optional findViewEdgeDescriptionById(String edgeDescriptionId) { + public Optional findViewEdgeDescriptionById(IEditingContext editingContext, String edgeDescriptionId) { EdgeDescription edgeDescription = getEdgeDescription(); return Optional.of(edgeDescription); }