Skip to content

Commit 47f908d

Browse files
adaussysbegaudeau
authored andcommitted
[5617] Fix duplication of an element to a mono valued containment
Bug: #5617 Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr>
1 parent d390520 commit 47f908d

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
- https://github.com/eclipse-sirius/sirius-web/issues/5491[#5491] [test] Add missing module in tsconfig for the playwright package
2929
- https://github.com/eclipse-sirius/sirius-web/issues/5627[#5627] [sirius-web] Fix the duplication of an element with incoming non changeable references
30+
- https://github.com/eclipse-sirius/sirius-web/issues/5617[#5617] [sirius-web] Fix duplication of an element to a mono valued containment feature while updating incoming reference.
3031

3132

3233
=== New Features

packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/views/explorer/services/DefaultObjectDuplicator.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,22 @@ public IStatus duplicateObject(IEditingContext editingContext, EObject objectToD
6565
.filter(reference -> containmentFeature.equals(reference.getName()))
6666
.findFirst();
6767

68-
Optional<Object> optionalDuplicatedObject = Optional.empty();
68+
Optional<EObject> optionalDuplicatedObject = Optional.empty();
6969

7070
if (optionalEReference.isPresent()) {
7171
if (this.canFeatureBeSet(containerEObject, optionalEReference.get())) {
72-
optionalDuplicatedObject = this.duplicateObject(objectToDuplicate, settings)
73-
.flatMap(eObject -> this.addOrSetEObjet(optionalEditingDomain.get(), eObject, containerEObject, optionalEReference.get()));
74-
if (optionalDuplicatedObject.isPresent()) {
72+
optionalDuplicatedObject = this.duplicateObject(objectToDuplicate, settings);
73+
optionalDuplicatedObject.ifPresent(eObject -> this.addOrSetEObjet(optionalEditingDomain.get(), eObject, containerEObject, optionalEReference.get()));
74+
if (optionalDuplicatedObject.isPresent() && optionalDuplicatedObject.get().eContainer() != null) {
7575
result = new Success(ChangeKind.SEMANTIC_CHANGE, Map.of(IObjectDuplicator.NEW_OBJECT, optionalDuplicatedObject.get()));
7676
}
7777
} else {
7878
result = new Failure(this.messageService.upperBoundaryReached(objectToDuplicate.eClass().getName(), containmentFeature));
7979
}
8080
}
8181

82-
if (settings.updateIncomingReferences() && optionalDuplicatedObject.isPresent() && optionalDuplicatedObject.get() instanceof EObject duplicatedEObject) {
83-
this.updateIncomingReferences(duplicatedEObject, objectToDuplicate);
82+
if (settings.updateIncomingReferences() && optionalDuplicatedObject.isPresent()) {
83+
this.updateIncomingReferences(optionalDuplicatedObject.get(), objectToDuplicate);
8484
}
8585
}
8686
return result;
@@ -111,18 +111,15 @@ private void updateIncomingReferences(EObject duplicatedEObject, EObject objectT
111111
});
112112
}
113113

114-
private Optional<Object> addOrSetEObjet(EditingDomain editingDomain, EObject duplicatedObject, EObject container, EReference eReference) {
114+
private void addOrSetEObjet(EditingDomain editingDomain, EObject duplicatedObject, EObject container, EReference eReference) {
115115
Command command;
116116
if (eReference.isMany()) {
117117
command = new AddCommand(editingDomain, container, eReference, List.of(duplicatedObject));
118118
} else {
119119
command = new SetCommand(editingDomain, container, eReference, duplicatedObject);
120120
}
121121
editingDomain.getCommandStack().execute(command);
122-
if (command.getResult().size() == 1) {
123-
return Optional.of(command.getResult().iterator().next());
124-
}
125-
return Optional.empty();
122+
126123
}
127124

128125
private Optional<EObject> duplicateObject(EObject eObjectToDuplicate, DuplicationSettings settings) {

0 commit comments

Comments
 (0)