Bug 509517 - CreateDeleteOperation does not need unique check in EObjectToID-Map

Change-Id: If4234594bf842635ab8eeb745664b52c2a3c07b0
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
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 07e1dde..f012c56 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
@@ -363,18 +363,22 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
 	 *
-	 * @generated
+	 * @return the {@link EObject} to {@link ModelElementId}-Map
+	 *         <!-- end-user-doc -->
+	 *
+	 * @generated NOT
 	 */
 	public EMap<EObject, ModelElementId> getEObjectToIdMap() {
 		if (eObjectToIdMap == null) {
-			eObjectToIdMap = new EcoreEMap<EObject, ModelElementId>(
-				OperationsPackage.Literals.EOBJECT_TO_MODEL_ELEMENT_ID_MAP, EObjectToModelElementIdMapImpl.class, this,
+			eObjectToIdMap = new CreateDeleteOperationEMap(OperationsPackage.Literals.EOBJECT_TO_MODEL_ELEMENT_ID_MAP,
+				EObjectToModelElementIdMapImpl.class, this,
 				OperationsPackage.CREATE_DELETE_OPERATION__EOBJECT_TO_ID_MAP);
 		}
 		return eObjectToIdMap;
 	}
+	// end of custom code
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
@@ -585,4 +589,38 @@
 		}
 	}
 
+	/**
+	 * Custom {@link EcoreEMap} which avoids the unique checks.
+	 */
+	private final class CreateDeleteOperationEMap extends EcoreEMap<EObject, ModelElementId> {
+
+		private static final long serialVersionUID = 4760475977383113249L;
+
+		CreateDeleteOperationEMap(EClass entryEClass, Class<?> entryClass, InternalEObject owner, int featureID) {
+			super(entryEClass, entryClass, owner, featureID);
+			delegateEList = new CreateDeleteOperationEList<Entry<EObject, ModelElementId>>(entryClass, owner,
+				featureID);
+		}
+
+		/**
+		 * Custom EList for Map entries.
+		 *
+		 * @param <E> entry class
+		 */
+		protected class CreateDeleteOperationEList<E extends Object & Entry<EObject, ModelElementId>>
+			extends DelegateEObjectContainmentEList<E> {
+
+			private static final long serialVersionUID = 636483596488471965L;
+
+			CreateDeleteOperationEList(Class<?> entryClass, InternalEObject owner, int featureID) {
+				super(entryClass, owner, featureID);
+			}
+
+			@Override
+			protected boolean isUnique() {
+				return false;
+			}
+		}
+	}
+
 } // CreateDeleteOperationImpl
\ No newline at end of file