Skip to content

Commit 8e68e4c

Browse files
author
Vincent HEMERY
authored
Merge pull request #258 from /issues/257
With command edit API, use SetCommand on a containment feature (#257)
2 parents caf4d02 + 4ad03eb commit 8e68e4c

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

bundles/org.eclipse.emfcloud.modelserver.edit/src/org/eclipse/emfcloud/modelserver/edit/command/SetCommandContribution.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.eclipse.emf.common.util.URI;
1818
import org.eclipse.emf.ecore.EAttribute;
19+
import org.eclipse.emf.ecore.EReference;
1920
import org.eclipse.emf.ecore.EDataType;
2021
import org.eclipse.emf.ecore.EObject;
2122
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -51,6 +52,8 @@ public static SetCommand serverCommand(final EditingDomain domain, final CComman
5152
EDataType dataType = ((EAttribute) feature).getEAttributeType();
5253
value = command.getDataValues().isEmpty() ? null
5354
: EcoreUtil.createFromString(dataType, command.getDataValues().get(0));
55+
} else if(feature instanceof EReference && ((EReference)feature).isContainment()) {
56+
value = getFirst(command.getObjectsToAdd(), null);
5457
} else {
5558
value = getFirst(command.getObjectValues(), null);
5659
}

tests/org.eclipse.emfcloud.modelserver.edit.tests/src/org/eclipse/emfcloud/modelserver/edit/EMFCommandCodecTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.eclipse.emf.ecore.EClass;
2525
import org.eclipse.emf.ecore.EClassifier;
2626
import org.eclipse.emf.ecore.EDataType;
27+
import org.eclipse.emf.ecore.EGenericType;
2728
import org.eclipse.emf.ecore.EPackage;
2829
import org.eclipse.emf.ecore.EcoreFactory;
2930
import org.eclipse.emf.ecore.EcorePackage;
@@ -62,6 +63,7 @@ public class EMFCommandCodecTest {
6263
private static final String N_A = "n/a";
6364
private static final String ATTRIBUTE = "attribute";
6465
private static final String REFERENCE = "reference";
66+
private static final String MONO_CONTAINMENT = "monovalued containment reference";
6567
private static final String REFERENCE_MANY = "reference (many)";
6668
private static final String REFERENCE_BY_INDEX = "reference (by index)";
6769

@@ -107,6 +109,7 @@ public static Iterable<Object[]> parameters() {
107109
new Object[] { EMFCommandType.SET, ATTRIBUTE, createAttributeSetCommand(),
108110
createAttributeSetModel() }, //
109111
new Object[] { EMFCommandType.SET, REFERENCE, createReferenceSetCommand(), createReferenceSetModel() }, //
112+
new Object[] { EMFCommandType.SET, MONO_CONTAINMENT, createMonoContainmentSetCommand(), createMonoContainmentSetModel() }, //
110113
new Object[] { EMFCommandType.ADD, ATTRIBUTE, createAttributeAddCommand(), createAttributeAddModel() }, //
111114
new Object[] { EMFCommandType.ADD, REFERENCE, createReferenceAddCommand(), createReferenceAddModel() }, //
112115
new Object[] { EMFCommandType.ADD, REFERENCE_MANY, createReferenceAddMultipleCommand(),
@@ -175,6 +178,25 @@ static CCommand createReferenceSetModel() {
175178
return result;
176179
}
177180

181+
static Command createMonoContainmentSetCommand() {
182+
EGenericType newGenericType = EcoreFactory.eINSTANCE.createEGenericType();
183+
184+
return SetCommand.create(domain, ((EClass)ePackage.getEClassifiers().get(0)).getEStructuralFeatures().get(0), EcorePackage.Literals.ETYPED_ELEMENT__EGENERIC_TYPE, newGenericType);
185+
}
186+
187+
static CCommand createMonoContainmentSetModel() {
188+
EGenericType newGenericType = EcoreFactory.eINSTANCE.createEGenericType();
189+
190+
CCommand result = CCommandFactory.eINSTANCE.createCommand();
191+
result.setType(EMFCommandType.SET);
192+
result.setOwner(((EClass)ePackage.getEClassifiers().get(0)).getEStructuralFeatures().get(0));
193+
result.setFeature("eGenericType");
194+
result.getObjectValues().add(newGenericType);
195+
result.getObjectsToAdd().add(newGenericType);
196+
result.getIndices().add(NO_INDEX);
197+
return result;
198+
}
199+
178200
static Command createAttributeAddCommand() {
179201
return AddCommand.create(domain, commandFixture, CCommandPackage.Literals.COMMAND__DATA_VALUES, "Foo", 0);
180202
}

0 commit comments

Comments
 (0)