diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 2f206ee08f..7851aec8d1 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -41,6 +41,7 @@ It was not actually used, as tools have long been found in `DiagramDescription.g - https://github.com/eclipse-sirius/sirius-components/issues/1692[#1692] [core] JPEG images where previously ignored if using a `.jpg` extension instead of `.jpeg`. They are now correctly supported - https://github.com/eclipse-sirius/sirius-components/issues/1741[#1741] [diagram] Border node placement specified with ELK configuration not taken into account anymore +- https://github.com/eclipse-sirius/sirius-components/issues/1591[#1591] [emf] Now creating root element of model instance using loaded EPackages in the package registry of the editing domain === New Features diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditService.java index 4a2d7e9f64..6f6a8f8058 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/EditService.java @@ -40,6 +40,7 @@ import org.eclipse.emf.edit.command.CreateChildCommand; import org.eclipse.emf.edit.command.CreateChildCommand.Helper; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; +import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.sirius.components.core.api.ChildCreationDescription; @@ -271,7 +272,7 @@ private List getConcreteClasses(EPackage ePackage) { public Optional createRootObject(IEditingContext editingContext, UUID documentId, String domainId, String rootObjectCreationDescriptionId) { Optional createdObjectOptional = Optional.empty(); - var optionalEClass = this.getMatchingEClass(editingContext.getId(), domainId, rootObjectCreationDescriptionId); + var optionalEClass = this.getMatchingEClass(editingContext, domainId, rootObjectCreationDescriptionId); // @formatter:off var optionalEditingDomain = Optional.of(editingContext) @@ -303,11 +304,15 @@ public Optional createRootObject(IEditingContext editingContext, UUID do return createdObjectOptional; } - private Optional getMatchingEClass(String editingContextId, String domainId, String rootObjectCreationDescriptionId) { - EPackage.Registry ePackageRegistry = this.getPackageRegistry(editingContextId); - + private Optional getMatchingEClass(IEditingContext editingContext, String domainId, String rootObjectCreationDescriptionId) { // @formatter:off - return Optional.ofNullable(ePackageRegistry.getEPackage(domainId)) + return Optional.of(editingContext) + .filter(EditingContext.class::isInstance) + .map(EditingContext.class::cast) + .map(EditingContext::getDomain) + .map(EditingDomain::getResourceSet) + .map(ResourceSet::getPackageRegistry) + .map(packageRegistry -> packageRegistry.getEPackage(domainId)) .map(ePackage -> ePackage.getEClassifier(rootObjectCreationDescriptionId)) .filter(EClass.class::isInstance) .map(EClass.class::cast)