Bug 576223 - Fixed custom property reference migrations.

Signed-off-by: Raphael Weber <raphael.weber@vector.com>
diff --git a/plugins/org.eclipse.app4mc.amalthea.converters.090/src/org/eclipse/app4mc/amalthea/converters090/utils/UpdateCustomPropsPostProcessor.java b/plugins/org.eclipse.app4mc.amalthea.converters.090/src/org/eclipse/app4mc/amalthea/converters090/utils/UpdateCustomPropsPostProcessor.java
index 58bf547..7af964c 100644
--- a/plugins/org.eclipse.app4mc.amalthea.converters.090/src/org/eclipse/app4mc/amalthea/converters090/utils/UpdateCustomPropsPostProcessor.java
+++ b/plugins/org.eclipse.app4mc.amalthea.converters.090/src/org/eclipse/app4mc/amalthea/converters090/utils/UpdateCustomPropsPostProcessor.java
@@ -1,6 +1,6 @@
 /**

  ********************************************************************************

- * Copyright (c) 2018-2020 Robert Bosch GmbH and others.

+ * Copyright (c) 2018-2021 Robert Bosch GmbH and others.

  *

  * This program and the accompanying materials are made

  * available under the terms of the Eclipse Public License 2.0

@@ -163,9 +163,9 @@
 				value="Memory";

 			}

 		}

-		else if (value.equals("CoreType")) {

+		else if (value.equals("Core")) {

 			value = "ProcessingUnit";

-		} else if (value.equals("NetworkType")) {

+		} else if (value.equals("Network")) {

 			value = "ConnectionHandler";

 		} else if (value.equals("HwSystem")) {

 			value = "HwStructure";

@@ -173,9 +173,9 @@
 			value = "HwStructure";

 		} else if (value.equals("Microcontroller")) {

 			value = "HwStructure";

-		} else if (value.equals("Core")) {

+		} else if (value.equals("CoreType")) {

 			value = "ProcessingUnitDefinition";

-		} else if (value.equals("Network")) {

+		} else if (value.equals("NetworkType")) {

 			value = "ConnectionHandlerDefinition";

 		} else if (value.equals("Quartz")) {

 			value = "FrequencyDomain";

diff --git a/tests/org.eclipse.app4mc.amalthea.converters.090.tests/TestModels/input/hw_references/refsModel.amxmi b/tests/org.eclipse.app4mc.amalthea.converters.090.tests/TestModels/input/hw_references/refsModel.amxmi
index 7e2cee7..db9c8d6 100644
--- a/tests/org.eclipse.app4mc.amalthea.converters.090.tests/TestModels/input/hw_references/refsModel.amxmi
+++ b/tests/org.eclipse.app4mc.amalthea.converters.090.tests/TestModels/input/hw_references/refsModel.amxmi
@@ -49,7 +49,116 @@
     <sections name="section1"/>

   </swModel>

   <hwModel>

-    <coreTypes bitWidth="0" instructionsPerCycle="0.0"/>

+    <mcTypes name="DualCore_SM" />

+    <coreTypes name="P_1_Core0_type" bitWidth="0" instructionsPerCycle="1.0" />

+    <coreTypes name="P_1_Core1_type" bitWidth="0" instructionsPerCycle="1.0" />

+    <networkTypes xsi:type="am:Bus" name="BusType" bitWidth="16" />

+    <accessPaths xsi:type="am:HwAccessPath" name="P_1_Core0_to_P_1_SM" source="P_1_Core0?type=Core" target="P_1_SM?type=Memory">

+      <hwElements xsi:type="am:HwElementRef" port="P_1_Core0/P_1_Core0.port?type=ComplexPort" />

+      <hwElements xsi:type="am:HwElementRef" port="P_1_SM/P_1_SM.port?type=ComplexPort" />

+    </accessPaths>

+    <accessPaths xsi:type="am:HwAccessPath" name="P_1_Core1_to_P_1_SM" source="P_1_Core1?type=Core" target="P_1_SM?type=Memory">

+      <hwElements xsi:type="am:HwElementRef" port="P_1_Core1/P_1_Core1.port?type=ComplexPort" />

+      <hwElements xsi:type="am:HwElementRef" port="P_1_SM/P_1_SM.port?type=ComplexPort" />

+    </accessPaths>

+    <system>

+      <ecus name="ECU">

+        <microcontrollers name="P_1" microcontrollerType="DualCore_SM?type=MicrocontrollerType">

+          <memories name="P_1_DualCore_SM__memory">

+            <customProperties key="attribute#MemoryType">

+              <value xsi:type="am:StringObject" value="MulticoreMemorySystem" />

+            </customProperties>

+            <customProperties key="attribute#addressBased">

+              <value xsi:type="am:BooleanObject" value="false" />

+            </customProperties>

+            <memories name="P_1_SM">

+              <customProperties key="attribute#addCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#readCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#removeCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#writeCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#id">

+                <value xsi:type="am:StringObject" value="SM" />

+              </customProperties>

+              <customProperties key="attribute#dataWidth">

+                <value xsi:type="am:StringObject" value="16.0 bit" />

+              </customProperties>

+              <customProperties key="attribute#MemoryType">

+                <value xsi:type="am:StringObject" value="MemoryModule" />

+              </customProperties>

+              <customProperties key="attribute#maxConcurrentAccess">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <prescaler name="P_1_SM.prescaler" clockRatio="0.0" quartz="Quartz?type=Quartz" />

+              <ports xsi:type="am:ComplexPort" name="P_1_SM.port" network="P_1_Bus_1?type=Network" master="false" bitWidth="16" baseAddress="0" addressRange="0" direction="RW" writeCycles="1" readCycles="1" schedValue="0" />

+            </memories>

+            <networks name="P_1_Bus_1" type="BusType?type=Bus">

+              <customProperties key="attribute#addCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#readCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#removeCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#writeCycleCount">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="attribute#dataWidth">

+                <value xsi:type="am:StringObject" value="16.0 bit" />

+              </customProperties>

+              <customProperties key="attribute#maxConcurrentAccess">

+                <value xsi:type="am:LongObject" value="1" />

+              </customProperties>

+              <customProperties key="Connection Whitelist">

+                <value xsi:type="am:ListObject">

+                  <values xsi:type="am:ListObject">

+                    <values xsi:type="am:ReferenceObject" value="P_1_Core0?type=Core" />

+                    <values xsi:type="am:ReferenceObject" value="P_1_SM?type=Memory" />

+                  </values>

+                  <values xsi:type="am:ListObject">

+                    <values xsi:type="am:ReferenceObject" value="P_1_Core1?type=Core" />

+                    <values xsi:type="am:ReferenceObject" value="P_1_SM?type=Memory" />

+                  </values>

+                </value>

+              </customProperties>

+              <prescaler name="P_1_Bus_1.prescaler" clockRatio="0.0" quartz="Quartz?type=Quartz" />

+            </networks>

+          </memories>

+          <cores name="P_1_Core0" coreType="P_1_Core0_type?type=CoreType" lockstepGroup="0">

+            <customProperties key="attribute#id">

+              <value xsi:type="am:StringObject" value="Core0" />

+            </customProperties>

+            <customProperties key="attribute#memoryArbiterPriority">

+              <value xsi:type="am:LongObject" value="0" />

+            </customProperties>

+            <prescaler name="P_1_Core0_prescaler" clockRatio="0.0" quartz="Quartz?type=Quartz" />

+            <ports xsi:type="am:ComplexPort" name="P_1_Core0.port" network="P_1_Bus_1?type=Network" master="false" bitWidth="16" baseAddress="0" addressRange="0" direction="RW" writeCycles="1" readCycles="1" schedValue="0" />

+          </cores>

+          <cores name="P_1_Core1" coreType="P_1_Core1_type?type=CoreType" lockstepGroup="0">

+            <customProperties key="attribute#id">

+              <value xsi:type="am:StringObject" value="Core1" />

+            </customProperties>

+            <customProperties key="attribute#memoryArbiterPriority">

+              <value xsi:type="am:LongObject" value="0" />

+            </customProperties>

+            <prescaler name="P_1_Core1_prescaler" clockRatio="0.0" quartz="Quartz?type=Quartz" />

+            <ports xsi:type="am:ComplexPort" name="P_1_Core1.port" network="P_1_Bus_1?type=Network" master="false" bitWidth="16" baseAddress="0" addressRange="0" direction="RW" writeCycles="1" readCycles="1" schedValue="0" />

+          </cores>

+        </microcontrollers>

+      </ecus>

+      <quartzes name="Quartz" type="STATIC">

+        <frequency unit="MHz" value="600.0" />

+      </quartzes>

+    </system>

   </hwModel>

   <osModel>

     <operatingSystems>

diff --git a/tests/org.eclipse.app4mc.amalthea.converters.090.tests/src/org/eclipse/app4mc/amalthea/converters090/tests/HWReferencesConverterTest.java b/tests/org.eclipse.app4mc.amalthea.converters.090.tests/src/org/eclipse/app4mc/amalthea/converters090/tests/HWReferencesConverterTest.java
index 9f4ee65..a6c0ec7 100644
--- a/tests/org.eclipse.app4mc.amalthea.converters.090.tests/src/org/eclipse/app4mc/amalthea/converters090/tests/HWReferencesConverterTest.java
+++ b/tests/org.eclipse.app4mc.amalthea.converters.090.tests/src/org/eclipse/app4mc/amalthea/converters090/tests/HWReferencesConverterTest.java
@@ -14,17 +14,21 @@
 

 package org.eclipse.app4mc.amalthea.converters090.tests;

 

+import java.lang.reflect.Field;

 import java.util.ArrayList;

 import java.util.Arrays;

 import java.util.Collection;

 import java.util.List;

 

 import org.eclipse.app4mc.amalthea.converters.common.base.ICache;

+import org.eclipse.app4mc.amalthea.converters.common.base.IPostProcessor;

 import org.eclipse.app4mc.amalthea.converters.common.converter.NamespaceConverter;

 import org.eclipse.app4mc.amalthea.converters090.impl.HwConverter;

 import org.eclipse.app4mc.amalthea.converters090.impl.HwReferencesConverter;

 import org.eclipse.app4mc.amalthea.converters090.impl.RootElementConverter;

 import org.eclipse.app4mc.amalthea.converters090.utils.HWCacheBuilder;

+import org.eclipse.app4mc.amalthea.converters090.utils.UpdateCustomPropsPostProcessor;

+import org.eclipse.app4mc.util.sessionlog.SessionLogger;

 import org.junit.FixMethodOrder;

 import org.junit.Test;

 import org.junit.runner.RunWith;

@@ -39,7 +43,7 @@
 	@Parameterized.Parameters(name = "{index}: Test file: {0}")

 	public static Collection<Object[]> getTestData() {

 

-		return Arrays.asList(new Object[][] { { "/hw_references/refsModel.amxmi", true } });

+		return Arrays.asList(new Object[][] {{ "/hw_references/refsModel.amxmi", true }});

 	}

 

 	public HWReferencesConverterTest(final String xmlFileRelativeLocation, final boolean canExecuteTestCase) {

@@ -48,16 +52,18 @@
 

 	@Test

 	public void testConversion() {

-		super.testConversion(NamespaceConverter.class, RootElementConverter.class, HwConverter.class, HwReferencesConverter.class);

+		super.testConversion(RootElementConverter.class, HwConverter.class, HwReferencesConverter.class, NamespaceConverter.class);

 	}

+	

+	private HWCacheBuilder cacheBuilder;

 

 	@Override

 	protected List<ICache> buildCaches() {

 

 		final List<ICache> caches = new ArrayList<>();

 

-		HWCacheBuilder cacheBuilder=new HWCacheBuilder();

-		caches.add(cacheBuilder);

+		this.cacheBuilder = new HWCacheBuilder();

+		caches.add(this.cacheBuilder);

 

 		for (final ICache iCache : caches) {

 			iCache.buildCache(this.fileDocumentMapping);

@@ -65,6 +71,25 @@
 

 		return caches;

 	}

+	

+	@Override

+	protected List<IPostProcessor> buildPostProcessors() {

+		final List<IPostProcessor> processors = super.buildPostProcessors();

+		SessionLogger logger = new SessionLogger();

+		UpdateCustomPropsPostProcessor cppp = new UpdateCustomPropsPostProcessor();

+		try {

+			Field loggerField = UpdateCustomPropsPostProcessor.class.getDeclaredField("logger");

+			loggerField.setAccessible(true);

+			loggerField.set(cppp, logger);

+			Field cacheField = UpdateCustomPropsPostProcessor.class.getDeclaredField("cache");

+			cacheField.setAccessible(true);

+			cacheField.set(cppp, this.cacheBuilder);

+		} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {

+			e.printStackTrace();

+		}

+		processors.add(cppp);

+		return processors;

+	}

 

 	@Override

 	@Test