520613 - [REQU-79] Consistent relationships

Signed-off-by: Matthias Koller <m.koller@peak-solution.de>
diff --git a/src/main/java/org/eclipse/mdm/api/base/model/Core.java b/src/main/java/org/eclipse/mdm/api/base/model/Core.java
index edaa8c6..f45f66a 100644
--- a/src/main/java/org/eclipse/mdm/api/base/model/Core.java
+++ b/src/main/java/org/eclipse/mdm/api/base/model/Core.java
@@ -228,7 +228,22 @@
 		 * @return The related entity is returned or null of not defined.
 		 */
 		public <T extends Entity> T get(Class<T> entityClass) {
-			return entityClass.cast(current.get(entityClass.getSimpleName()));
+			return get(entityClass.getSimpleName(), entityClass);
+		}
+
+		/**
+		 * Returns related entity identified by given entity class.
+		 *
+		 * @param <T>
+		 *            The desired entity type.
+		 * @param relationName
+		 *            The relation name the entity is referenced by.
+		 * @param entityClass
+		 *            Used as identifier.
+		 * @return The related entity is returned or null of not defined.
+		 */
+		public <T extends Entity> T get(String relationName, Class<T> entityClass) {
+			return entityClass.cast(current.get(relationName));
 		}
 
 		/**
@@ -238,10 +253,21 @@
 		 *            The new related entity.
 		 */
 		public void set(Entity entity) {
-			String key = entity.getClass().getSimpleName();
-			Entity old = current.put(key, entity);
+			set(entity.getClass().getSimpleName(), entity);
+		}
+
+		/**
+		 * Replaces a related entity with the given one.
+		 *
+		 * @param name
+		 *            The name of the relation the entity is referenced by.
+		 * @param entity
+		 *            The new related entity.
+		 */
+		public void set(String name, Entity entity) {
+			Entity old = current.put(name, entity);
 			if (old != null) {
-				removed.put(key, old);
+				removed.put(name, old);
 			}
 		}
 
@@ -253,9 +279,21 @@
 		 */
 		public void remove(Class<? extends Entity> entityClass) {
 			String key = entityClass.getSimpleName();
-			Entity old = current.remove(key);
+			remove(key, entityClass);
+		}
+
+		/**
+		 * Removes a related entity for given relation name and entity class.
+		 *
+		 * @param name
+		 *            The name of the relation the entity is referenced by.
+		 * @param entityClass
+		 *            Used as identifier.
+		 */
+		public void remove(String name, Class<? extends Entity> entityClass) {
+			Entity old = current.remove(name);
 			if (old != null) {
-				removed.put(key, old);
+				removed.put(name, old);
 			}
 		}