Bug 501971 - Cut Element Handling

Change-Id: Ie67f9526d1ca389094e688415471019cceb56377
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/EObjectChangeNotifier.java b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/EObjectChangeNotifier.java
index 5078065..8c5e44f 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/EObjectChangeNotifier.java
+++ b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/EObjectChangeNotifier.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.emfstore.internal.common.model.IdEObjectCollection;
 import org.eclipse.emf.emfstore.internal.common.model.impl.NotifiableIdEObjectCollectionImpl;
 
 /**
@@ -247,7 +248,7 @@
 			final EObject eObject = (EObject) obj;
 
 			if (!collection.contains(eObject)) {
-				collection.addCutElement(eObject);
+				collection.addCutElement(getCutElement(eObject));
 			}
 		}
 	}
@@ -257,10 +258,32 @@
 			if (ModelUtil.isSingleton(newEObject)) {
 				return;
 			}
-			collection.addCutElement(newEObject);
+			collection.addCutElement(getCutElement(newEObject));
 		}
 	}
 
+	private EObject getCutElement(EObject eObject) {
+		final EObject referenceElement = eObject;
+		/* find topmost parent */
+		while (eObject.eContainer() != null) {
+			/*
+			 * Bug 501971
+			 * if we are contained in a different IdEObjectCollection (e.g. a second EMFStore project) simply add the
+			 * used element from the reference as a cut element (default before 501971)
+			 */
+			if (IdEObjectCollection.class.isInstance(eObject)) {
+				return referenceElement;
+			}
+			eObject = eObject.eContainer();
+		}
+
+		/*
+		 * Bug 501971
+		 * otherwise move the full containment tree
+		 */
+		return eObject;
+	}
+
 	/**
 	 * @param notification
 	 */
diff --git a/tests/org.eclipse.emf.emfstore.client.api.test/AllAPITests.launch b/tests/org.eclipse.emf.emfstore.client.api.test/AllAPITests.launch
index 615de5b..cb91b42 100644
--- a/tests/org.eclipse.emf.emfstore.client.api.test/AllAPITests.launch
+++ b/tests/org.eclipse.emf.emfstore.client.api.test/AllAPITests.launch
@@ -3,7 +3,7 @@
 <booleanAttribute key="append.args" value="true"/>
 <stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
 <booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
 <booleanAttribute key="automaticValidate" value="false"/>
 <stringAttribute key="bootstrap" value=""/>
 <stringAttribute key="checked" value="[NONE]"/>
@@ -12,8 +12,7 @@
 <booleanAttribute key="clearwslog" value="false"/>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.eclipse.emf.emfstore.branding,org.eclipse.emf.emfstore.client.example.test,org.eclipse.emf.emfstore.client.test.alltests,org.eclipse.emf.emfstore.client.test.ui,org.eclipse.emf.emfstore.client.transaction,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.ui.historybrowsercomparator,org.eclipse.emf.emfstore.client.ui.rap,org.eclipse.emf.emfstore.client.ui.rcp,org.eclipse.emf.emfstore.ecore,org.eclipse.emf.emfstore.example.helloworld,org.eclipse.emf.emfstore.example.installer,org.eclipse.emf.emfstore.example.merging,org.eclipse.emf.emfstore.example.sessionprovider,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.fuzzy.emf.edit,org.eclipse.emf.emfstore.fuzzy.emf.editor,org.eclipse.emf.emfstore.fuzzy.emf.example,org.eclipse.emf.emfstore.mongodb,org.eclipse.emf.emfstore.mongodb.client,org.eclipse.emf.emfstore.mongodb.server"/>
-<booleanAttribute key="includeOptional" value="true"/>
+<booleanAttribute key="includeOptional" value="false"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
 <listEntry value="/org.eclipse.emf.emfstore.client.api.test/src/org/eclipse/emf/emfstore/client/api/test/AllAPITests.java"/>
@@ -33,8 +32,8 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.emf.cdo.server.product.tcp_h2"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,com.ibm.icu@default:default,javax.annotation*1.0.0.v20101115-0725@default:default,javax.annotation*1.2.0.v201401042248@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.codec*1.3.0.v201101211617@default:default,org.apache.commons.codec*1.6.0.v201305230611@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:false,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.databinding.edit@default:default,org.eclipse.emf.databinding@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.ecp.edit@default:default,org.eclipse.emf.ecp.ui.view@default:default,org.eclipse.emf.ecp.view.context@default:default,org.eclipse.emf.ecp.view.model.provider.xmi@default:default,org.eclipse.emf.ecp.view.model@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.win32.x86_64@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.util@default:default,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi*3.8.2.v20130124-134944@-1:true,org.eclipse.osgi.services@default:default,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.win32@default:false,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.junit@default:default,org.w3c.css.sac@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="com.eclipsesource.makeithappen.model.edit@default:default,com.eclipsesource.makeithappen.model@default:default,org.eclipse.b3.aggregator.edit@default:default,org.eclipse.b3.aggregator.editor@default:default,org.eclipse.b3.aggregator.engine.maven@default:default,org.eclipse.b3.aggregator.engine@default:default,org.eclipse.b3.aggregator.legacy.ui@default:default,org.eclipse.b3.aggregator.legacy@default:default,org.eclipse.b3.aggregator@default:default,org.eclipse.b3.backend@default:default,org.eclipse.b3.beelang.generator@default:default,org.eclipse.b3.beelang.junit@default:default,org.eclipse.b3.beelang.tests@default:default,org.eclipse.b3.beelang.ui.experiments@default:default,org.eclipse.b3.beelang.ui@default:default,org.eclipse.b3.beelang@default:default,org.eclipse.b3.build.ui.idefragment@default:false,org.eclipse.b3.build.ui@default:default,org.eclipse.b3.build@default:default,org.eclipse.b3.cli@default:default,org.eclipse.b3.core@default:default,org.eclipse.b3.p2.edit@default:default,org.eclipse.b3.p2.maven.indexer@default:default,org.eclipse.b3.p2.maven@default:default,org.eclipse.b3.p2.tests@default:default,org.eclipse.b3.p2@default:default,org.eclipse.b3.util@default:default,org.eclipse.emf.ecp.makeithappen.model.edit@default:default,org.eclipse.emf.ecp.makeithappen.model.viewmodel@default:default,org.eclipse.emf.ecp.makeithappen.model@default:default,org.eclipse.emf.emfstore.client.api.test@default:false,org.eclipse.emf.emfstore.client.changetracking.test@default:false,org.eclipse.emf.emfstore.client.conflictdetection.test@default:false,org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.recording.test@default:false,org.eclipse.emf.emfstore.client.test@default:default,org.eclipse.emf.emfstore.client.ui.test@default:false,org.eclipse.emf.emfstore.client.ui.transaction@default:default,org.eclipse.emf.emfstore.client.ws.test@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.fuzzy.emf.diff.test@default:default,org.eclipse.emf.emfstore.fuzzy.emf.test@default:default,org.eclipse.emf.emfstore.fuzzy.emf@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator.test@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.performance.test@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server.test@default:false,org.eclipse.emf.emfstore.server@default:default,org.eclipse.emf.emfstore.test.common@default:default,org.eclipse.emf.emfstore.test.model.edit@default:default,org.eclipse.emf.emfstore.test.model@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,com.ibm.icu@default:default,javax.inject@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.codec@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.logging@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.linux.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.swt.gtk@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:false,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.region@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.osgi*3.11.0.v20160603-1336@-1:true,org.eclipse.osgi.compatibility.state@default:default,org.eclipse.osgi.services*3.5.100.v20160504-1419@default:default,org.eclipse.swt.gtk.linux.x86_64@default:default,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.junit@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil*1.0.1.v200903091627@default:default,org.w3c.dom.svg@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.api.test@default:false,org.eclipse.emf.emfstore.client.changetracking.test@default:false,org.eclipse.emf.emfstore.client.conflictdetection.test@default:false,org.eclipse.emf.emfstore.client.recording.test@default:false,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server.test@default:false,org.eclipse.emf.emfstore.server@default:default,org.eclipse.emf.emfstore.test.common@default:default,org.eclipse.emf.emfstore.test.model.edit@default:default,org.eclipse.emf.emfstore.test.model@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
diff --git a/tests/org.eclipse.emf.emfstore.client.recording.test/AllRecordingTests.launch b/tests/org.eclipse.emf.emfstore.client.recording.test/AllRecordingTests.launch
index bb9e687..3a0a7e2 100644
--- a/tests/org.eclipse.emf.emfstore.client.recording.test/AllRecordingTests.launch
+++ b/tests/org.eclipse.emf.emfstore.client.recording.test/AllRecordingTests.launch
@@ -3,7 +3,7 @@
 <booleanAttribute key="append.args" value="true"/>
 <stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
 <booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
 <booleanAttribute key="automaticValidate" value="false"/>
 <stringAttribute key="bootstrap" value=""/>
 <stringAttribute key="checked" value="[NONE]"/>
@@ -12,8 +12,7 @@
 <booleanAttribute key="clearwslog" value="false"/>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="com.eclipsesource.makeithappen.model,com.eclipsesource.makeithappen.model.edit,org.eclipse.b3.aggregator,org.eclipse.b3.aggregator.edit,org.eclipse.b3.aggregator.editor,org.eclipse.b3.aggregator.engine,org.eclipse.b3.aggregator.engine.maven,org.eclipse.b3.aggregator.legacy,org.eclipse.b3.aggregator.legacy.ui,org.eclipse.b3.backend,org.eclipse.b3.beelang,org.eclipse.b3.beelang.generator,org.eclipse.b3.beelang.junit,org.eclipse.b3.beelang.tests,org.eclipse.b3.beelang.ui,org.eclipse.b3.beelang.ui.experiments,org.eclipse.b3.build,org.eclipse.b3.build.ui,org.eclipse.b3.build.ui.idefragment,org.eclipse.b3.cli,org.eclipse.b3.core,org.eclipse.b3.p2,org.eclipse.b3.p2.edit,org.eclipse.b3.p2.maven,org.eclipse.b3.p2.maven.indexer,org.eclipse.b3.p2.tests,org.eclipse.b3.util,org.eclipse.emf.ecp.makeithappen.model,org.eclipse.emf.ecp.makeithappen.model.edit,org.eclipse.emf.ecp.makeithappen.model.viewmodel,org.eclipse.emf.emfstore.branding,org.eclipse.emf.emfstore.client.example.test,org.eclipse.emf.emfstore.client.model.edit,org.eclipse.emf.emfstore.client.test,org.eclipse.emf.emfstore.client.test.alltests,org.eclipse.emf.emfstore.client.test.ui,org.eclipse.emf.emfstore.client.transaction,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.client.ui.historybrowsercomparator,org.eclipse.emf.emfstore.client.ui.rap,org.eclipse.emf.emfstore.client.ui.rcp,org.eclipse.emf.emfstore.client.ws.test,org.eclipse.emf.emfstore.common.model.edit,org.eclipse.emf.emfstore.ecore,org.eclipse.emf.emfstore.example.helloworld,org.eclipse.emf.emfstore.example.installer,org.eclipse.emf.emfstore.example.merging,org.eclipse.emf.emfstore.example.sessionprovider,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.fuzzy.emf,org.eclipse.emf.emfstore.fuzzy.emf.diff.test,org.eclipse.emf.emfstore.fuzzy.emf.edit,org.eclipse.emf.emfstore.fuzzy.emf.editor,org.eclipse.emf.emfstore.fuzzy.emf.example,org.eclipse.emf.emfstore.fuzzy.emf.test,org.eclipse.emf.emfstore.modelmutator.test,org.eclipse.emf.emfstore.mongodb,org.eclipse.emf.emfstore.mongodb.client,org.eclipse.emf.emfstore.mongodb.server,org.eclipse.emf.emfstore.performance.test,org.eclipse.emf.emfstore.server.model.edit"/>
-<booleanAttribute key="includeOptional" value="true"/>
+<booleanAttribute key="includeOptional" value="false"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
 <listEntry value="/org.eclipse.emf.emfstore.client.recording.test/src/org/eclipse/emf/emfstore/client/recording/test/AllRecordingTests.java"/>
@@ -33,7 +32,7 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.emf.cdo.server.product.tcp_h2"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,ch.qos.logback.slf4j@default:false,com.google.guava@default:default,javax.inject@default:default,javax.servlet@default:default,org.apache.commons.codec*1.6.0.v201305230611@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:false,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.osgi*3.8.2.v20130124-134944@-1:true,org.eclipse.osgi.services@default:default,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.junit@default:default,org.slf4j.api@default:default,org.slf4j.jcl@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,com.ibm.icu@default:default,javax.inject@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.codec@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.logging@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.linux.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.swt.gtk@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:false,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.region@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.osgi*3.11.0.v20160603-1336@-1:true,org.eclipse.osgi.compatibility.state@default:default,org.eclipse.osgi.services*3.5.100.v20160504-1419@default:default,org.eclipse.swt.gtk.linux.x86_64@default:default,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.junit@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil*1.0.1.v200903091627@default:default,org.w3c.dom.svg@default:default"/>
 <stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.api.test@default:false,org.eclipse.emf.emfstore.client.changetracking.test@default:false,org.eclipse.emf.emfstore.client.conflictdetection.test@default:false,org.eclipse.emf.emfstore.client.recording.test@default:false,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server.test@default:false,org.eclipse.emf.emfstore.server@default:default,org.eclipse.emf.emfstore.test.common@default:default,org.eclipse.emf.emfstore.test.model.edit@default:default,org.eclipse.emf.emfstore.test.model@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <booleanAttribute key="tracing" value="false"/>
diff --git a/tests/org.eclipse.emf.emfstore.client.recording.test/src/org/eclipse/emf/emfstore/client/recording/test/CreateDeleteOperationTest.java b/tests/org.eclipse.emf.emfstore.client.recording.test/src/org/eclipse/emf/emfstore/client/recording/test/CreateDeleteOperationTest.java
index 0a55c9d..efc34ed 100644
--- a/tests/org.eclipse.emf.emfstore.client.recording.test/src/org/eclipse/emf/emfstore/client/recording/test/CreateDeleteOperationTest.java
+++ b/tests/org.eclipse.emf.emfstore.client.recording.test/src/org/eclipse/emf/emfstore/client/recording/test/CreateDeleteOperationTest.java
@@ -15,6 +15,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -50,6 +51,7 @@
 import org.eclipse.emf.emfstore.internal.common.model.impl.ProjectImpl;
 import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
+import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CompositeOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CreateDeleteOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.MultiReferenceOperation;
 import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.ReferenceOperation;
@@ -947,14 +949,15 @@
 		assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
 		assertTrue(getProject().contains(testElement));
 		assertEquals(getProject(), ModelUtil.getProject(testElement));
-		assertFalse(getProject().contains(newTestElement));
-		assertFalse(getProject().contains(newChildElement1));
-		assertFalse(getProject().contains(newChildElement2));
+		assertTrue(getProject().contains(newTestElement));
+		assertTrue(getProject().contains(newChildElement1));
+		assertTrue(getProject().contains(newChildElement2));
 		assertTrue(getProject().contains(newChildElement3));
 
-		assertEquals(2, newTestElement.getContainedElements().size());
+		assertEquals(3, newTestElement.getContainedElements().size());
 		assertEquals(newChildElement1, newTestElement.getContainedElements().get(0));
 		assertEquals(newChildElement2, newTestElement.getContainedElements().get(1));
+		assertEquals(newChildElement3, newTestElement.getContainedElements().get(2));
 
 		assertEquals(newTestElement, newChildElement1.getReferences().get(0));
 		assertEquals(newChildElement1, newChildElement2.getReferences().get(0));
@@ -984,9 +987,10 @@
 		assertTrue(getProject().contains(newChildElement2));
 		assertTrue(getProject().contains(newChildElement3));
 
-		assertEquals(2, newTestElement.getContainedElements().size());
+		assertEquals(3, newTestElement.getContainedElements().size());
 		assertEquals(newChildElement1, newTestElement.getContainedElements().get(0));
 		assertEquals(newChildElement2, newTestElement.getContainedElements().get(1));
+		assertEquals(newChildElement3, newTestElement.getContainedElements().get(2));
 
 		assertEquals(newTestElement, newChildElement1.getReferences().get(0));
 		assertEquals(newChildElement1, newChildElement2.getReferences().get(0));
@@ -994,49 +998,20 @@
 		assertEquals(newChildElement3, testElement.getReferences().get(0));
 
 		final List<AbstractOperation> operations = forceGetOperations();
-		assertEquals(2, operations.size());
-		final AbstractOperation operation = operations.get(0);
-		assertTrue(operation instanceof CreateDeleteOperation);
-		final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
-
-		final ModelElementId newTestElementId = ModelUtil.getProject(newTestElement).getModelElementId(newTestElement);
-		final TestElement copiedNewTestElement = (TestElement) createDeleteOperation.getModelElement();
-		final TestElement copiedNewChildElement1 = copiedNewTestElement.getContainedElements().get(0);
-		final TestElement copiedNewChildElement2 = copiedNewTestElement.getContainedElements().get(1);
-
-		assertEquals(2, copiedNewTestElement.getContainedElements().size());
-		assertEquals(copiedNewTestElement, copiedNewChildElement1.getReferences().get(0));
-		assertEquals(copiedNewChildElement1, copiedNewChildElement2.getReferences().get(0));
-		assertEquals(1, copiedNewChildElement2.getReferences().size());
-
-		assertEquals(newTestElementId, createDeleteOperation.getModelElementId());
-		assertEquals(1, createDeleteOperation.getSubOperations().size());
-		assertFalse(createDeleteOperation.isDelete());
-		assertTrue(CommonUtil.isSelfContained(createDeleteOperation, true));
-
-		// check sub-operations of 1st operation
-		final MultiReferenceOperation subOperation1 = (MultiReferenceOperation) createDeleteOperation
-			.getSubOperations().get(
-				0);
-
-		// sub-operation 1
-		assertEquals(newChildElement2, getProject().getModelElement(subOperation1.getModelElementId()));
-		assertEquals(REFERENCES, subOperation1.getFeatureName());
-		assertEquals(testElement, getProject().getModelElement(subOperation1.getReferencedModelElements().get(0)));
+		assertEquals(1, operations.size());
 
 		// check 2nd operation
-		final MultiReferenceOperation operation2 = (MultiReferenceOperation) operations.get(1);
+		final CompositeOperation operation1 = (CompositeOperation) operations.get(0);
+
+		final MultiReferenceOperation operation2 = (MultiReferenceOperation) operation1.getMainOperation();// operations.get(0);
 
 		assertEquals(parentTestElement, getProject().getModelElement(operation2.getModelElementId()));
 		assertEquals(newTestElement, getProject().getModelElement(operation2.getReferencedModelElements().get(0)));
 
-		assertTrue(operations.get(1) instanceof MultiReferenceOperation);
-		final MultiReferenceOperation multiRefOp = (MultiReferenceOperation) operations.get(1);
-
-		assertEquals(parentTestElement, getProject().getModelElement(multiRefOp.getModelElementId()));
-		assertEquals(TestElementFeatures.containedElements().getName(), multiRefOp.getFeatureName());
-		assertEquals(newTestElement, getProject().getModelElement(multiRefOp.getReferencedModelElements().get(0)));
-		assertTrue(multiRefOp.isAdd());
+		assertEquals(parentTestElement, getProject().getModelElement(operation2.getModelElementId()));
+		assertEquals(TestElementFeatures.containedElements().getName(), operation2.getFeatureName());
+		assertEquals(newTestElement, getProject().getModelElement(operation2.getReferencedModelElements().get(0)));
+		assertTrue(operation2.isAdd());
 	}
 
 	// END COMPLEX CODE
@@ -1663,4 +1638,70 @@
 	 * child.getContainingWorkpackage()); assertSame(child, existing.getContainingWorkpackage());
 	 * assertEquals(getProject().getAllModelElements().size(), 3); }
 	 */
+
+	@Test
+	public void testCreateCutElementsFromOtherProject() {
+		/* Setup */
+		final ProjectSpace projectSpaceOriginal = getProjectSpace();
+		final ProjectSpace projectSpaceCopy = cloneProjectSpace(projectSpaceOriginal);
+
+		final TestElement testElementA = Create.testElement();
+		final TestElement testElementB = Create.testElement();
+		final TestElement testElementC = Create.testElement();
+		testElementB.setContainedElement(testElementC);
+
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				projectSpaceOriginal.getProject().getModelElements().add(testElementA);
+				projectSpaceCopy.getProject().getModelElements().add(testElementB);
+				return null;
+			}
+		});
+
+		/* Act */
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				testElementA.setReference(testElementC);
+				return null;
+			}
+		});
+
+		/* Assert */
+		// A+C
+		assertSame(testElementA, projectSpaceOriginal.getProject().getModelElements().get(0));
+		assertSame(testElementC, projectSpaceOriginal.getProject().getModelElements().get(1));
+		// B
+		assertSame(testElementB, projectSpaceCopy.getProject().getModelElements().get(0));
+	}
+
+	@Test
+	public void testCreateCutElementsFromNonProject() {
+		/* Setup */
+		final ProjectSpace projectSpaceOriginal = getProjectSpace();
+
+		final TestElement testElementA = Create.testElement();
+		final TestElement testElementB = Create.testElement();
+		final TestElement testElementC = Create.testElement();
+		testElementB.setContainedElement(testElementC);
+
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				projectSpaceOriginal.getProject().getModelElements().add(testElementA);
+				return null;
+			}
+		});
+
+		/* Act */
+		RunESCommand.run(new Callable<Void>() {
+			public Void call() throws Exception {
+				testElementA.setReference(testElementC);
+				return null;
+			}
+		});
+
+		/* Assert */
+		// A+B(C)
+		assertSame(testElementA, projectSpaceOriginal.getProject().getModelElements().get(0));
+		assertSame(testElementB, projectSpaceOriginal.getProject().getModelElements().get(1));
+	}
 }