From 87db7bca5a41e28c17a5f7e91b28f04da1b0a2a8 Mon Sep 17 00:00:00 2001 From: Pierre-Charles David Date: Thu, 27 Apr 2023 14:27:04 +0200 Subject: [PATCH] [1946] Enable child extenders in the View DSL implementation This allows downstream projects and applications to provide their own sub-types of the DSL types (e.g. new WidgetDescriptions) and they will be correctly detected and handled (provided they are properly registered). Bug: https://github.com/eclipse-sirius/sirius-components/issues/1946 Signed-off-by: Pierre-Charles David --- CHANGELOG.adoc | 5 ++- .../configuration/ChildExtenderProvider.java | 26 +++++++++++ .../emf/configuration/EMFConfiguration.java | 28 ++++++++++++ .../handlers/AddWidgetEventHandlerTests.java | 3 +- .../provider/ConditionalItemProvider.java | 3 +- ...DiagramElementDescriptionItemProvider.java | 3 +- .../provider/DiagramPaletteItemProvider.java | 3 +- .../provider/EdgePaletteItemProvider.java | 3 +- ...LayoutStrategyDescriptionItemProvider.java | 5 ++- .../GroupDescriptionItemProvider.java | 3 +- .../view/provider/LabelStyleItemProvider.java | 3 +- ...LayoutStrategyDescriptionItemProvider.java | 5 ++- .../provider/NodePaletteItemProvider.java | 3 +- .../view/provider/OperationItemProvider.java | 3 +- ...RepresentationDescriptionItemProvider.java | 3 +- .../view/provider/StyleItemProvider.java | 3 +- .../view/provider/ToolItemProvider.java | 3 +- .../view/provider/ViewItemProvider.java | 3 +- .../ViewItemProviderAdapterFactory.java | 44 ++++++++++++++++++- .../WidgetDescriptionItemProvider.java | 3 +- .../WidgetDescriptionStyleItemProvider.java | 5 ++- .../src/main/resources/model/view.genmodel | 2 +- 22 files changed, 139 insertions(+), 23 deletions(-) create mode 100644 packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/ChildExtenderProvider.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 54f26bbd56..9be83586a7 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -34,13 +34,16 @@ In the _styleDescription_, the definition of a color are now a select list of al === New Features +- https://github.com/eclipse-sirius/sirius-components/issues/1946[1#946] Enabled child extenders in the View DSL implementation. +This allows downstream projects and applications to provide their own sub-types of the DSL types (e.g. new WidgetDescriptions). +In addition to registering the extension metadmodel itself, users must provide a `ChildExtenderProvider` bean for their extensions to be properly integrated. + === Improvements - https://github.com/eclipse-sirius/sirius-components/issues/1869[#1869] [tree] Navigate to the first child with the right arrow if a node is expanded. Navigate to the parent with the left arrow if a node is collapsed - https://github.com/eclipse-sirius/sirius-components/issues/1621[#1621] [project] Migrate the onboard area to Material-UI - == v2023.4.0 === Architectural decision records diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/ChildExtenderProvider.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/ChildExtenderProvider.java new file mode 100644 index 0000000000..968c40ca9f --- /dev/null +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/ChildExtenderProvider.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 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.emf.configuration; + +import java.util.function.Supplier; + +import org.eclipse.emf.edit.provider.IChildCreationExtender; + +/** + * Used to extend EMF's global IChildCreationExtender.Descriptor.Registry with new IChildCreationExtender. + * Corresponds to the {@code org.eclipse.emf.edit.childCreationExtenders} extension point configuration. + * + * @author pcdavid + */ +public record ChildExtenderProvider(String nsURI, Supplier childExtenderProvider) { +} diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/EMFConfiguration.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/EMFConfiguration.java index ef47793b2f..75273073f9 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/EMFConfiguration.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/configuration/EMFConfiguration.java @@ -12,6 +12,8 @@ *******************************************************************************/ package org.eclipse.sirius.components.emf.configuration; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; @@ -20,13 +22,18 @@ import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; import org.eclipse.emf.ecore.impl.EValidatorRegistryImpl; import org.eclipse.emf.ecore.util.EcoreAdapterFactory; +import org.eclipse.emf.edit.EMFEditPlugin; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; +import org.eclipse.emf.edit.provider.IChildCreationExtender.Descriptor; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.sirius.components.emf.services.ILabelFeatureProvider; import org.eclipse.sirius.components.emf.services.LabelFeatureProviderRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import jakarta.annotation.PostConstruct; + /** * Configuration of the EMF beans. * @@ -34,6 +41,12 @@ */ @Configuration public class EMFConfiguration { + private final List childExtenderProviders; + + public EMFConfiguration(List childExtenderProviders) { + this.childExtenderProviders = List.copyOf(childExtenderProviders); + } + @Bean public ComposedAdapterFactory composedAdapterFactory(List adapterFactories) { ComposedAdapterFactory composedAdapterFactory = new ComposedAdapterFactory(adapterFactories); @@ -60,4 +73,19 @@ public LabelFeatureProviderRegistry labelFeatureProviderRegistry(List descriptors = childExtenderRegistry.get(childExtenderProvider.nsURI()); + if (descriptors == null) { + descriptors = new ArrayList<>(); + } else { + descriptors = new ArrayList<>(descriptors); + } + descriptors.add(childExtenderProvider.childExtenderProvider()::get); + childExtenderRegistry.put(childExtenderProvider.nsURI(), descriptors); + } + } } diff --git a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/test/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandlerTests.java b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/test/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandlerTests.java index bf0e576417..ef71b81ae5 100644 --- a/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/test/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandlerTests.java +++ b/packages/formdescriptioneditors/backend/sirius-components-collaborative-formdescriptioneditors/src/test/java/org/eclipse/sirius/components/collaborative/formdescriptioneditors/handlers/AddWidgetEventHandlerTests.java @@ -14,6 +14,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; import java.util.Optional; import java.util.UUID; @@ -50,7 +51,7 @@ public Optional getObject(IEditingContext editingContext, String objectI return Optional.of(ViewFactory.eINSTANCE.createFlexboxContainerDescription()); } }; - var handler = new AddWidgetEventHandler(objectService, new ICollaborativeFormDescriptionEditorMessageService.NoOp(), new SimpleMeterRegistry()); + var handler = new AddWidgetEventHandler(objectService, new ICollaborativeFormDescriptionEditorMessageService.NoOp(), List.of(), new SimpleMeterRegistry()); var input = new AddWidgetInput(UUID.randomUUID(), "editingContextId", "representationId", "containerId", "Checkbox", 0); assertThat(handler.canHandle(input)).isTrue(); diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ConditionalItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ConditionalItemProvider.java index f1a6c83578..04779a1d24 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ConditionalItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ConditionalItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -142,7 +143,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramElementDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramElementDescriptionItemProvider.java index 3d9e88c3c2..440d7779fd 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramElementDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramElementDescriptionItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -216,7 +217,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramPaletteItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramPaletteItemProvider.java index f3bb9cda1a..f708a8d040 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramPaletteItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/DiagramPaletteItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -165,7 +166,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/EdgePaletteItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/EdgePaletteItemProvider.java index 5eb810d927..6bbd654f1f 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/EdgePaletteItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/EdgePaletteItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -203,7 +204,7 @@ public String getCreateChildText(Object owner, Object feature, Object child, Col */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/FreeFormLayoutStrategyDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/FreeFormLayoutStrategyDescriptionItemProvider.java index aa039df962..75e1f053fb 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/FreeFormLayoutStrategyDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/FreeFormLayoutStrategyDescriptionItemProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, 2022 Obeo. + * 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 @@ -18,6 +18,7 @@ import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -118,7 +119,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/GroupDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/GroupDescriptionItemProvider.java index c786b51e8c..2170631012 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/GroupDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/GroupDescriptionItemProvider.java @@ -20,6 +20,7 @@ import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -320,7 +321,7 @@ public String getCreateChildText(Object owner, Object feature, Object child, Col */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/LabelStyleItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/LabelStyleItemProvider.java index 62081095dc..828a628b41 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/LabelStyleItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/LabelStyleItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -194,7 +195,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ListLayoutStrategyDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ListLayoutStrategyDescriptionItemProvider.java index 5ab402de52..509a6d4c51 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ListLayoutStrategyDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ListLayoutStrategyDescriptionItemProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, 2022 Obeo. + * 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 @@ -18,6 +18,7 @@ import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -118,7 +119,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/NodePaletteItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/NodePaletteItemProvider.java index dede4accd9..4936ee27cf 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/NodePaletteItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/NodePaletteItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -170,7 +171,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/OperationItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/OperationItemProvider.java index c5a185544a..636b470953 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/OperationItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/OperationItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -163,7 +164,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/RepresentationDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/RepresentationDescriptionItemProvider.java index b93a08becf..271a1e5d74 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/RepresentationDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/RepresentationDescriptionItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -186,7 +187,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/StyleItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/StyleItemProvider.java index ef4576b180..4d4d45e01d 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/StyleItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/StyleItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -139,7 +140,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ToolItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ToolItemProvider.java index 5b492e4828..f0c29dd3a4 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ToolItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ToolItemProvider.java @@ -20,6 +20,7 @@ import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -180,7 +181,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProvider.java index b1960fdda3..53a3b7b4b3 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -180,7 +181,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProviderAdapterFactory.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProviderAdapterFactory.java index d3f8028e09..230d531640 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProviderAdapterFactory.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/ViewItemProviderAdapterFactory.java @@ -14,14 +14,19 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.List; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.provider.ChangeNotifier; +import org.eclipse.emf.edit.provider.ChildCreationExtenderManager; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.IChangeNotifier; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IDisposable; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; @@ -29,6 +34,7 @@ import org.eclipse.emf.edit.provider.INotifyChangedListener; import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.sirius.components.view.ViewPackage; import org.eclipse.sirius.components.view.util.ViewAdapterFactory; /** @@ -39,7 +45,7 @@ * * @generated */ -public class ViewItemProviderAdapterFactory extends ViewAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable { +public class ViewItemProviderAdapterFactory extends ViewAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable, IChildCreationExtender { /** * This keeps track of the root adapter factory that delegates to this adapter factory. @@ -56,6 +62,13 @@ public class ViewItemProviderAdapterFactory extends ViewAdapterFactory implement */ protected IChangeNotifier changeNotifier = new ChangeNotifier(); + /** + * This helps manage the child creation extenders. + * + * @generated + */ + protected ChildCreationExtenderManager childCreationExtenderManager = new ChildCreationExtenderManager(ViewEditPlugin.INSTANCE, ViewPackage.eNS_URI); + /** * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}. @@ -1820,6 +1833,35 @@ public Object adapt(Object object, Object type) { return null; } + /** + * + * + * @generated + */ + public List getChildCreationExtenders() { + return this.childCreationExtenderManager.getChildCreationExtenders(); + } + + /** + * + * + * @generated + */ + @Override + public Collection getNewChildDescriptors(Object object, EditingDomain editingDomain) { + return this.childCreationExtenderManager.getNewChildDescriptors(object, editingDomain); + } + + /** + * + * + * @generated + */ + @Override + public ResourceLocator getResourceLocator() { + return this.childCreationExtenderManager; + } + /** * This adds a listener. * diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionItemProvider.java index 4ca641c29f..3c6360e6f6 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -146,7 +147,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionStyleItemProvider.java b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionStyleItemProvider.java index 7dc8bdd97b..67cfc3c587 100644 --- a/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionStyleItemProvider.java +++ b/packages/view/backend/sirius-components-view-edit/src/main/java/org/eclipse/sirius/components/view/provider/WidgetDescriptionStyleItemProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021, 2022 Obeo. + * 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 @@ -18,6 +18,7 @@ import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.provider.IChildCreationExtender; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; @@ -108,7 +109,7 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors */ @Override public ResourceLocator getResourceLocator() { - return ViewEditPlugin.INSTANCE; + return ((IChildCreationExtender) this.adapterFactory).getResourceLocator(); } } diff --git a/packages/view/backend/sirius-components-view/src/main/resources/model/view.genmodel b/packages/view/backend/sirius-components-view/src/main/resources/model/view.genmodel index b5baf99c44..545547aaf5 100644 --- a/packages/view/backend/sirius-components-view/src/main/resources/model/view.genmodel +++ b/packages/view/backend/sirius-components-view/src/main/resources/model/view.genmodel @@ -11,7 +11,7 @@ view.ecore + extensibleProviderFactory="true" childCreationExtenders="true" ecorePackage="view.ecore#/">