Skip to content

Commit

Permalink
[1591] Objects may be created using multiple strategies which can cre…
Browse files Browse the repository at this point in the history
…ate incompatible objects in a single model

Bug: eclipse-sirius#1591

Signed-off-by: Michaël Charfadi <michael.charfadi@obeosoft.com>
  • Loading branch information
mcharfadi committed Feb 23, 2023
1 parent 3312e9f commit 67a84f3
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Expand Up @@ -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

Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -271,7 +272,7 @@ private List<EClass> getConcreteClasses(EPackage ePackage) {
public Optional<Object> createRootObject(IEditingContext editingContext, UUID documentId, String domainId, String rootObjectCreationDescriptionId) {
Optional<Object> 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)
Expand Down Expand Up @@ -303,11 +304,15 @@ public Optional<Object> createRootObject(IEditingContext editingContext, UUID do
return createdObjectOptional;
}

private Optional<EClass> getMatchingEClass(String editingContextId, String domainId, String rootObjectCreationDescriptionId) {
EPackage.Registry ePackageRegistry = this.getPackageRegistry(editingContextId);

private Optional<EClass> 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)
Expand Down

0 comments on commit 67a84f3

Please sign in to comment.