Bug 500515 - Fix ECore bundle when commiting simple data type
Change-Id: I73825c4388e5bc770d441c2f465b59b592528edd
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/notification/filter/FilterStack.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/notification/filter/FilterStack.java
index a206a02..1c4accb 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/notification/filter/FilterStack.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/changeTracking/notification/filter/FilterStack.java
@@ -37,7 +37,7 @@
private static final String NOTIFICATION_FILTER_EXTENSION_ID = "org.eclipse.emf.emfstore.client.notificationFilter"; //$NON-NLS-1$
private static final ESNotificationFilter[] DEFAULT_STACK = { new TouchFilter(), new TransientFilter(),
- new UnknownEventTypeFilter(), new EmptyRemovalsFilter(), new IgnoreDatatypeFilter(),
+ new UnknownEventTypeFilter(), new EmptyRemovalsFilter(), // new IgnoreDatatypeFilter(),
new IgnoreOutsideProjectReferencesFilter(), new IgnoreNullFeatureNotificationsFilter(),
new NotifiableIdEObjectCollectionFilter(), new IgnoreNotificationsOutsideProject() };
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/OperationRecorder.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/OperationRecorder.java
index 58507b9..8e0340a 100644
--- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/OperationRecorder.java
+++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/impl/OperationRecorder.java
@@ -35,15 +35,14 @@
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
import org.eclipse.emf.emfstore.client.ESLocalProject;
import org.eclipse.emf.emfstore.client.changetracking.ESCommandObserver;
import org.eclipse.emf.emfstore.client.observer.ESCommitObserver;
import org.eclipse.emf.emfstore.client.observer.ESPostCreationObserver;
import org.eclipse.emf.emfstore.client.observer.ESShareObserver;
import org.eclipse.emf.emfstore.client.observer.ESUpdateObserver;
-import org.eclipse.emf.emfstore.client.util.ESCopier;
import org.eclipse.emf.emfstore.internal.client.model.CompositeOperationHandle;
-import org.eclipse.emf.emfstore.internal.client.model.Configuration;
import org.eclipse.emf.emfstore.internal.client.model.ESWorkspaceProviderImpl;
import org.eclipse.emf.emfstore.internal.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.internal.client.model.changeTracking.NotificationToOperationConverter;
@@ -403,14 +402,24 @@
final List<EObject> allContainedModelElements = ModelUtil.getAllContainedModelElementsAsList(element, false);
allContainedModelElements.add(element);
- final ESCopier copier = Configuration.getClientBehavior().getESCopierFor(element);
- final EObject copiedElement = copier.copy(element);
+ final Copier copier = new Copier(true, false);
+ EObject copiedElement = copier.copy(element);
+ copier.copyReferences();
- final List<EObject> copiedAllContainedModelElements = ModelUtil.getAllContainedModelElementsAsList(
+ List<EObject> copiedAllContainedModelElements = ModelUtil.getAllContainedModelElementsAsList(
copiedElement,
false);
copiedAllContainedModelElements.add(copiedElement);
+ if (allContainedModelElements.size() != copiedAllContainedModelElements.size()) {
+ copiedElement = EcoreUtil.copy(element);
+ copiedAllContainedModelElements = ModelUtil.getAllContainedModelElementsAsList(
+ copiedElement,
+ false);
+ copiedAllContainedModelElements.add(copiedElement);
+
+ }
+
for (int i = 0; i < allContainedModelElements.size(); i++) {
final EObject child = allContainedModelElements.get(i);
diff --git a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java
index c9abff6..64f3736 100644
--- a/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java
+++ b/bundles/org.eclipse.emf.emfstore.common.model/src/org/eclipse/emf/emfstore/internal/common/model/util/ModelUtil.java
@@ -398,6 +398,25 @@
*/
public static synchronized boolean isIgnoredDatatype(EObject eObject) {
+ return false;
+
+ // if (ignoredDataTypes == null) {
+ // ignoredDataTypes = new LinkedHashSet<String>();
+ // for (final ESExtensionElement element : new ESExtensionPoint(
+ // IGNORED_DATATYPE_EXT_POINT_ID,
+ // true).getExtensionElements()) {
+ // try {
+ // ignoredDataTypes.add(element.getAttribute("type")); //$NON-NLS-1$
+ // } catch (final ESExtensionPointException e) {
+ // }
+ // }
+ // }
+ //
+ // return ignoredDataTypes.contains(eObject.eClass().getInstanceClassName());
+ }
+
+ public static synchronized boolean isIgnoredDatatype2(EObject eObject) {
+
if (ignoredDataTypes == null) {
ignoredDataTypes = new LinkedHashSet<String>();
for (final ESExtensionElement element : new ESExtensionPoint(
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/.settings/.api_filters b/bundles/org.eclipse.emf.emfstore.ecore/.settings/.api_filters
index b59639b..280864a 100644
--- a/bundles/org.eclipse.emf.emfstore.ecore/.settings/.api_filters
+++ b/bundles/org.eclipse.emf.emfstore.ecore/.settings/.api_filters
@@ -1,18 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<component id="org.eclipse.emf.emfstore.ecore" version="2">
- <resource path="src/org/eclipse/emf/emfstore/internal/ecore/EDatatypeIdResolver.java" type="org.eclipse.emf.emfstore.internal.ecore.EDatatypeIdResolver">
- <filter comment="internal API usage" id="574619656">
+ <resource path="src/org/eclipse/emf/emfstore/internal/ecore/ECoreElementsResolver.java" type="org.eclipse.emf.emfstore.internal.ecore.ECoreElementsResolver">
+ <filter id="574619656">
<message_arguments>
<message_argument value="ESSingletonIdResolver"/>
- <message_argument value="EDatatypeIdResolver"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="src/org/eclipse/emf/emfstore/internal/ecore/ETypeIdResolver.java" type="org.eclipse.emf.emfstore.internal.ecore.ETypeIdResolver">
- <filter comment="internal API usage" id="574619656">
- <message_arguments>
- <message_argument value="ESSingletonIdResolver"/>
- <message_argument value="ETypeIdResolver"/>
+ <message_argument value="ECoreElementsResolver"/>
</message_arguments>
</filter>
</resource>
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/plugin.xml b/bundles/org.eclipse.emf.emfstore.ecore/plugin.xml
index af73ecd..5425d2d 100644
--- a/bundles/org.eclipse.emf.emfstore.ecore/plugin.xml
+++ b/bundles/org.eclipse.emf.emfstore.ecore/plugin.xml
@@ -2,12 +2,6 @@
<?eclipse version="3.4"?>
<plugin>
<extension
- point="org.eclipse.emf.emfstore.common.model.singletonIdResolver">
- <singletonidresolver
- class="org.eclipse.emf.emfstore.internal.ecore.EDatatypeIdResolver">
- </singletonidresolver>
- </extension>
- <extension
point="org.eclipse.emf.emfstore.common.model.ignoreDatatype">
<ignoredatatype
type="org.eclipse.emf.ecore.EGenericType">
@@ -16,7 +10,7 @@
<extension
point="org.eclipse.emf.emfstore.common.model.singletonIdResolver">
<singletonidresolver
- class="org.eclipse.emf.emfstore.internal.ecore.ETypeIdResolver">
+ class="org.eclipse.emf.emfstore.internal.ecore.ECoreElementsResolver">
</singletonidresolver>
</extension>
<extension
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/ECoreElementsResolver.java b/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/ECoreElementsResolver.java
new file mode 100644
index 0000000..a4e991c
--- /dev/null
+++ b/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/ECoreElementsResolver.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.internal.ecore;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.emfstore.common.model.ESModelElementId;
+import org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver;
+import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.internal.common.model.ModelFactory;
+
+public class ECoreElementsResolver implements ESSingletonIdResolver {
+
+ /**
+ * Constructor.
+ */
+ public ECoreElementsResolver() {
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver#getSingleton(org.eclipse.emf.emfstore.common.model.ESModelElementId)
+ */
+ public EObject getSingleton(ESModelElementId singletonId) {
+ if (singletonId == null) {
+ return null;
+ }
+
+ final String id = singletonId.getId();
+
+ // TODO: build up cache
+ final EList<EClassifier> eClassifiers = EcorePackage.eINSTANCE.getEClassifiers();
+ for (final EClassifier eClassifier : eClassifiers) {
+ if (eClassifier.getName().equals(id)) {
+ return eClassifier;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver#getSingletonModelElementId(org.eclipse.emf.ecore.EObject)
+ */
+ public ESModelElementId getSingletonModelElementId(EObject singleton) {
+ if (singleton == null || !isSingleton(singleton) || !EClassifier.class.isInstance(singleton)) {
+ return null;
+ }
+
+ final EClassifier eClassifier = EClassifier.class.cast(singleton);
+ final ModelElementId id = ModelFactory.eINSTANCE.createModelElementId();
+ id.setId(eClassifier.getName());
+
+ return id.toAPI();
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver#isSingleton(org.eclipse.emf.ecore.EObject)
+ */
+ public boolean isSingleton(EObject eDataType) {
+ return eDataType.eContainer() == EcorePackage.eINSTANCE;
+ }
+
+}
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/EDatatypeIdResolver.java b/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/EDatatypeIdResolver.java
deleted file mode 100644
index f305250..0000000
--- a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/EDatatypeIdResolver.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
- * Technische Universitaet Muenchen.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * emueller
- ******************************************************************************/
-package org.eclipse.emf.emfstore.internal.ecore;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EDataType;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.emfstore.common.model.ESModelElementId;
-import org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver;
-import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
-import org.eclipse.emf.emfstore.internal.common.model.ModelFactory;
-
-/**
- * An implementation of a {@link ESSingletonIdResolver} that treats all {@link EDataType}s as singletons.
- *
- * @author emueller
- *
- */
-public class EDatatypeIdResolver implements ESSingletonIdResolver {
-
- private final Map<String, EDataType> datatypes = new LinkedHashMap<String, EDataType>();
-
- /**
- * Default constructor.
- */
- public EDatatypeIdResolver() {
- datatypes.put("Literal", EcorePackage.eINSTANCE.getEString()); //$NON-NLS-1$
- // String
- datatypes.put("String", EcorePackage.eINSTANCE.getEString()); //$NON-NLS-1$
- datatypes.put("EString", EcorePackage.eINSTANCE.getEString()); //$NON-NLS-1$
- // Date
- datatypes.put("Date", EcorePackage.eINSTANCE.getEDate()); //$NON-NLS-1$
- datatypes.put("EDate", EcorePackage.eINSTANCE.getEDate()); //$NON-NLS-1$
- // integer
- datatypes.put("Int", EcorePackage.eINSTANCE.getEInt()); //$NON-NLS-1$
- datatypes.put("EInt", EcorePackage.eINSTANCE.getEInt()); //$NON-NLS-1$
- datatypes.put("Integer", EcorePackage.eINSTANCE.getEIntegerObject()); //$NON-NLS-1$
- datatypes.put("EInteger", EcorePackage.eINSTANCE.getEIntegerObject()); //$NON-NLS-1$
- datatypes.put("EIntegerObject", EcorePackage.eINSTANCE.getEIntegerObject()); //$NON-NLS-1$
- // double
- datatypes.put("Double", EcorePackage.eINSTANCE.getEDouble()); //$NON-NLS-1$
- datatypes.put("EDouble", EcorePackage.eINSTANCE.getEDouble()); //$NON-NLS-1$
- datatypes.put("EDoubleObject", EcorePackage.eINSTANCE.getEDoubleObject()); //$NON-NLS-1$
- // long
- datatypes.put("Long", EcorePackage.eINSTANCE.getELong()); //$NON-NLS-1$
- datatypes.put("ELong", EcorePackage.eINSTANCE.getELong()); //$NON-NLS-1$
- datatypes.put("ELongObject", EcorePackage.eINSTANCE.getELongObject()); //$NON-NLS-1$
- // float
- datatypes.put("Float", EcorePackage.eINSTANCE.getEFloat()); //$NON-NLS-1$
- datatypes.put("EFloat", EcorePackage.eINSTANCE.getEFloat()); //$NON-NLS-1$
- datatypes.put("EFloatObject", EcorePackage.eINSTANCE.getEFloatObject()); //$NON-NLS-1$
- // short
- datatypes.put("Short", EcorePackage.eINSTANCE.getEShort()); //$NON-NLS-1$
- datatypes.put("EShort", EcorePackage.eINSTANCE.getEShort()); //$NON-NLS-1$
- datatypes.put("EShortObject", EcorePackage.eINSTANCE.getEShortObject()); //$NON-NLS-1$
- // boolean
- datatypes.put("Boolean", EcorePackage.eINSTANCE.getEBoolean()); //$NON-NLS-1$
- datatypes.put("EBoolean", EcorePackage.eINSTANCE.getEBoolean()); //$NON-NLS-1$
- datatypes.put("EBooleanObject", EcorePackage.eINSTANCE.getEBooleanObject()); //$NON-NLS-1$
- // byte
- datatypes.put("Byte", EcorePackage.eINSTANCE.getEByte()); //$NON-NLS-1$
- datatypes.put("EByte", EcorePackage.eINSTANCE.getEByte()); //$NON-NLS-1$
- datatypes.put("EByteObject", EcorePackage.eINSTANCE.getEByteObject()); //$NON-NLS-1$
- datatypes.put("EByteArray", EcorePackage.eINSTANCE.getEByteArray()); //$NON-NLS-1$
- // char
- datatypes.put("EChar", EcorePackage.eINSTANCE.getEChar()); //$NON-NLS-1$
- datatypes.put("ECharacterObject", EcorePackage.eINSTANCE.getECharacterObject()); //$NON-NLS-1$
- datatypes.put("EBigDecimal", EcorePackage.eINSTANCE.getEBigDecimal()); //$NON-NLS-1$
- datatypes.put("EBigInteger", EcorePackage.eINSTANCE.getEBigInteger()); //$NON-NLS-1$
- }
-
- /**
- * {@inheritDoc}
- */
- public EObject getSingleton(ESModelElementId singletonId) {
-
- if (singletonId == null) {
- return null;
- }
-
- return datatypes.get(singletonId.getId());
- }
-
- /**
- * {@inheritDoc}
- *
- * @return the {@link ESModelElementId} of the the singleton object or <code>null</code> if the given
- * {@link EObject} is not a singleton, is not an instance of {@link EDataType} or is <code>null</code>
- */
- public ESModelElementId getSingletonModelElementId(EObject singleton) {
-
- if (!EDataType.class.isInstance(singleton)) {
- return null;
- }
-
- // TODO: EM, provide 2nd map for performance reasons
- for (final Map.Entry<String, EDataType> entry : datatypes.entrySet()) {
- if (entry.getValue() != singleton) {
- continue;
- }
-
- // TODO: don't create IDs on the fly rather put them directly into the map
- final ModelElementId id = ModelFactory.eINSTANCE.createModelElementId();
- id.setId(entry.getKey());
- return id.toAPI();
- }
-
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isSingleton(EObject eDataType) {
-
- if (!EDataType.class.isInstance(eDataType)) {
- return false;
- }
-
- return datatypes.containsValue(eDataType);
- }
-}
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/ETypeIdResolver.java b/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/ETypeIdResolver.java
deleted file mode 100644
index 4b1756dd..0000000
--- a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/ETypeIdResolver.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH and others.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- ******************************************************************************/
-package org.eclipse.emf.emfstore.internal.ecore;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.emfstore.common.model.ESModelElementId;
-import org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver;
-import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
-import org.eclipse.emf.emfstore.internal.common.model.ModelFactory;
-
-/**
- *
- *
- */
-public class ETypeIdResolver implements ESSingletonIdResolver {
-
- private final Map<String, EClass> datatypes = new LinkedHashMap<String, EClass>();
-
- /**
- * Constructor.
- */
- public ETypeIdResolver() {
- // eclass stuff
- datatypes.put("EClass", EcorePackage.eINSTANCE.getEClass()); //$NON-NLS-1$
- datatypes.put("EStructuralFeature", EcorePackage.eINSTANCE.getEStructuralFeature()); //$NON-NLS-1$
- datatypes.put("EGenericType", EcorePackage.eINSTANCE.getEGenericType()); //$NON-NLS-1$
- datatypes.put("EPackage", EcorePackage.eINSTANCE.getEPackage()); //$NON-NLS-1$
- }
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver#getSingleton(org.eclipse.emf.emfstore.common.model.ESModelElementId)
- */
- public EObject getSingleton(ESModelElementId singletonId) {
- if (singletonId == null) {
- return null;
- }
-
- return datatypes.get(singletonId.getId());
- }
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver#getSingletonModelElementId(org.eclipse.emf.ecore.EObject)
- */
- public ESModelElementId getSingletonModelElementId(EObject singleton) {
- if (!isSingleton(singleton) || singleton == null) {
- return null;
- }
-
- // TODO: EM, provide 2nd map for performance reasons
- for (final Map.Entry<String, EClass> entry : datatypes.entrySet()) {
- if (!entry.getValue().isInstance(singleton)) {
- continue;
- }
-
- // TODO: don't create IDs on the fly rather put them directly into the map
- final ModelElementId id = ModelFactory.eINSTANCE.createModelElementId();
- id.setId(entry.getKey());
- return id.toAPI();
- }
-
- return null;
- }
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.emfstore.common.model.ESSingletonIdResolver#isSingleton(org.eclipse.emf.ecore.EObject)
- */
- public boolean isSingleton(EObject eDataType) {
- for (final EClass eClass : datatypes.values()) {
- if (eClass.isInstance(eDataType)) {
- return true;
- }
- }
-
- return false;
- }
-
-}
diff --git a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/EcoreCopier.java b/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/EcoreCopier.java
deleted file mode 100644
index 449f63e..0000000
--- a/bundles/org.eclipse.emf.emfstore.ecore/src/org/eclipse/emf/emfstore/internal/ecore/EcoreCopier.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 EclipseSource Muenchen GmbH and others.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Edgar Mueller - initial API and implementation
- ******************************************************************************/
-package org.eclipse.emf.emfstore.internal.ecore;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.ETypedElement;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.emfstore.client.util.ESCopier;
-import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
-
-/**
- * Copier responsible for copying {@link EObject}s that are considered
- * 'Singletons', that is, {@link ETypedElement}, by EMFStore.
- *
- *
- */
-public class EcoreCopier implements ESCopier {
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.emfstore.client.util.ESCopier#shouldHandle(org.eclipse.emf.ecore.EObject)
- */
- public int shouldHandle(EObject eObject) {
- if (ModelUtil.isSingleton(eObject)) {
- return 1;
- }
- return -1;
- }
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.emfstore.client.util.ESCopier#copy(org.eclipse.emf.ecore.EObject)
- */
- public EObject copy(EObject eObject) {
- return EcoreUtil.copy(eObject);
- }
-
-}
diff --git a/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/impl/CreateDeleteOperationImpl.java b/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/impl/CreateDeleteOperationImpl.java
index ae5826c..4722478 100644
--- a/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/impl/CreateDeleteOperationImpl.java
+++ b/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/internal/server/model/versioning/operations/impl/CreateDeleteOperationImpl.java
@@ -117,7 +117,7 @@
final EObject copiedChild = copiedAllContainedModelElements.get(i);
final ModelElementId childId = ModelUtil.clone(getEObjectToIdMap().get(child));
- if (ModelUtil.isIgnoredDatatype(child)) {
+ if (ModelUtil.isIgnoredDatatype2(child) && childId == null) {
continue;
}