Merge "522277 - [REQU-80] Referencing" into dev
diff --git a/src/main/java/org/eclipse/mdm/api/base/model/ContextComponent.java b/src/main/java/org/eclipse/mdm/api/base/model/ContextComponent.java
index 58b6bbb..066e2ba 100644
--- a/src/main/java/org/eclipse/mdm/api/base/model/ContextComponent.java
+++ b/src/main/java/org/eclipse/mdm/api/base/model/ContextComponent.java
@@ -68,6 +68,15 @@
 	}

 

 	/**

+	 * Returns the {@link ContextRoot} this context component belongs to.

+	 *

+	 * @return The parent {@link ContextRoot}.

+	 */

+	public ContextRoot getContextRoot() {

+		return getCore().getPermanentStore().get(ContextRoot.class);

+	}

+	

+	/**

 	 * Removes the {@link ContextSensor} identified by given name.

 	 *

 	 * @param name

diff --git a/src/main/java/org/eclipse/mdm/api/base/model/ContextSensor.java b/src/main/java/org/eclipse/mdm/api/base/model/ContextSensor.java
index b633002..725ecc0 100644
--- a/src/main/java/org/eclipse/mdm/api/base/model/ContextSensor.java
+++ b/src/main/java/org/eclipse/mdm/api/base/model/ContextSensor.java
@@ -35,4 +35,12 @@
 		super(core);
 	}
 
+	/**
+	 * Returns the {@link ContextComponent} this context sensor belongs to.
+	 *
+	 * @return The parent {@link ContextComponent}
+	 */
+	public ContextComponent getContextComponent() {
+		return getCore().getPermanentStore().get(ContextComponent.class);
+	}
 }
diff --git a/src/test/java/org/eclipse/mdm/api/base/model/ContextComponentTest.java b/src/test/java/org/eclipse/mdm/api/base/model/ContextComponentTest.java
new file mode 100644
index 0000000..d406dee
--- /dev/null
+++ b/src/test/java/org/eclipse/mdm/api/base/model/ContextComponentTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.mdm.api.base.model;

+

+import static org.assertj.core.api.Assertions.assertThat;

+import static org.mockito.Mockito.mock;

+import static org.mockito.Mockito.spy;

+import static org.mockito.Mockito.when;

+

+import java.util.HashMap;

+import java.util.Map;

+

+import org.eclipse.mdm.api.base.core.ChildrenStore;

+import org.eclipse.mdm.api.base.core.Core;

+import org.eclipse.mdm.api.base.core.EntityStore;

+

+public class ContextComponentTest {

+

+	@org.junit.Test

+	public void testGetContextRoot() {

+		BaseEntityFactory factory = spy(BaseEntityFactory.class);

+		Core rootCore = createCore("UNITUNDERTEST");

+	    when(factory.createCore(ContextRoot.class, ContextType.UNITUNDERTEST)).thenReturn(rootCore);

+	    Core componentCore = createCore("");

+	    when(factory.createCore("Engine", ContextComponent.class)).thenReturn(componentCore);

+	    

+		ContextRoot contextRoot = factory.createContextRoot("Car", ContextType.UNITUNDERTEST);

+		ContextComponent contextComponent = factory.createContextComponent("Engine", contextRoot);

+		

+		assertThat(contextComponent.getContextRoot()).isEqualTo(contextRoot);

+	}

+	

+	private Core createCore(String type) {

+		Core core = mock(Core.class);

+		

+		Map<String, Value> values = new HashMap<>();

+		values.put("Name", ValueType.STRING.create("Name"));

+		values.put("Version", ValueType.STRING.create("Version"));

+		

+		when(core.getValues()).thenReturn(values);

+		when(core.getTypeName()).thenReturn(type);

+		when(core.getPermanentStore()).thenReturn(new EntityStore());

+		when(core.getChildrenStore()).thenReturn(new ChildrenStore());

+		

+		return core;

+	}

+}

diff --git a/src/test/java/org/eclipse/mdm/api/base/model/ContextSensorTest.java b/src/test/java/org/eclipse/mdm/api/base/model/ContextSensorTest.java
new file mode 100644
index 0000000..aa088da
--- /dev/null
+++ b/src/test/java/org/eclipse/mdm/api/base/model/ContextSensorTest.java
@@ -0,0 +1,49 @@
+package org.eclipse.mdm.api.base.model;

+

+import static org.assertj.core.api.Assertions.assertThat;

+import static org.mockito.Mockito.mock;

+import static org.mockito.Mockito.spy;

+import static org.mockito.Mockito.when;

+

+import java.util.HashMap;

+import java.util.Map;

+

+import org.eclipse.mdm.api.base.core.ChildrenStore;

+import org.eclipse.mdm.api.base.core.Core;

+import org.eclipse.mdm.api.base.core.EntityStore;

+

+

+public class ContextSensorTest {

+

+	@org.junit.Test

+	public void testGetContextComponent() {

+		BaseEntityFactory factory = spy(BaseEntityFactory.class);

+		Core rootCore = createCore("TESTEQUIPMENT");

+	    when(factory.createCore(ContextRoot.class, ContextType.TESTEQUIPMENT)).thenReturn(rootCore);

+	    Core componentCore = createCore("");

+	    when(factory.createCore("SensorDevice", ContextComponent.class)).thenReturn(componentCore);

+	    Core sensorCore = createCore("");

+	    when(factory.createCore("Sensor", ContextSensor.class)).thenReturn(sensorCore);

+	    

+		ContextRoot contextRoot = factory.createContextRoot("SensorDevices", ContextType.TESTEQUIPMENT);

+		ContextComponent contextComponent = factory.createContextComponent("SensorDevice", contextRoot);

+		ContextSensor contextSensor = factory.createContextSensor("Sensor", contextComponent);

+		

+		assertThat(contextSensor.getContextComponent()).isEqualTo(contextComponent);

+	}

+	

+	private Core createCore(String type) {

+		Core core = mock(Core.class);

+		

+		Map<String, Value> values = new HashMap<>();

+		values.put("Name", ValueType.STRING.create("Name"));

+		values.put("Version", ValueType.STRING.create("Version"));

+		

+		when(core.getValues()).thenReturn(values);

+		when(core.getTypeName()).thenReturn(type);

+		when(core.getPermanentStore()).thenReturn(new EntityStore());

+		when(core.getChildrenStore()).thenReturn(new ChildrenStore());

+		

+		return core;

+	}

+}