From d7e345239310f0ee7e90110943bd72918838bf0b Mon Sep 17 00:00:00 2001
From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at>
Date: Tue, 24 May 2022 17:20:28 +0200
Subject: [PATCH] added json writer for ihpc

---
 VectoCore/VectoCore/JsonKeys.Designer.cs      | 119 +++++++++++++++++-
 VectoCore/VectoCore/JsonKeys.resx             |  39 ++++++
 .../OutputData/FileIO/JSONFileWriter.cs       |  71 +++++++----
 3 files changed, 206 insertions(+), 23 deletions(-)

diff --git a/VectoCore/VectoCore/JsonKeys.Designer.cs b/VectoCore/VectoCore/JsonKeys.Designer.cs
index 66b4f77c11..62ae58c622 100644
--- a/VectoCore/VectoCore/JsonKeys.Designer.cs
+++ b/VectoCore/VectoCore/JsonKeys.Designer.cs
@@ -19,7 +19,7 @@ namespace TUGraz.VectoCore {
     // class via a tool like ResGen or Visual Studio.
     // To add or remove a member, edit your .ResX file then rerun ResGen
     // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     internal class JsonKeys {
@@ -222,6 +222,105 @@ namespace TUGraz.VectoCore {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to ContinuousTorque.
+        /// </summary>
+        internal static string EM_ContinuousTorque {
+            get {
+                return ResourceManager.GetString("EM_ContinuousTorque", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to ContinuousTorqueSpeed.
+        /// </summary>
+        internal static string EM_ContinuousTorqueSpeed {
+            get {
+                return ResourceManager.GetString("EM_ContinuousTorqueSpeed", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to DragCurve.
+        /// </summary>
+        internal static string EM_DragCurve {
+            get {
+                return ResourceManager.GetString("EM_DragCurve", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to EfficiencyMap.
+        /// </summary>
+        internal static string EM_EfficiencyMap {
+            get {
+                return ResourceManager.GetString("EM_EfficiencyMap", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to FullLoadCurve.
+        /// </summary>
+        internal static string EM_FullLoadCurve {
+            get {
+                return ResourceManager.GetString("EM_FullLoadCurve", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to OverloadTime.
+        /// </summary>
+        internal static string EM_OverloadTime {
+            get {
+                return ResourceManager.GetString("EM_OverloadTime", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to OverloadTorque.
+        /// </summary>
+        internal static string EM_OverloadTorque {
+            get {
+                return ResourceManager.GetString("EM_OverloadTorque", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to OverloadTorqueSpeed.
+        /// </summary>
+        internal static string EM_OverloadTorqueSpeed {
+            get {
+                return ResourceManager.GetString("EM_OverloadTorqueSpeed", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to ThermalOverloadRecoveryFactor.
+        /// </summary>
+        internal static string EM_ThermalOverloadRecoveryFactor {
+            get {
+                return ResourceManager.GetString("EM_ThermalOverloadRecoveryFactor", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Voltage.
+        /// </summary>
+        internal static string EM_Voltage {
+            get {
+                return ResourceManager.GetString("EM_Voltage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to VoltageLevels.
+        /// </summary>
+        internal static string EM_VoltageLevels {
+            get {
+                return ResourceManager.GetString("EM_VoltageLevels", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Displacement.
         /// </summary>
@@ -708,6 +807,24 @@ namespace TUGraz.VectoCore {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to CreatedBy.
+        /// </summary>
+        internal static string JsonHeader_CreatedBy {
+            get {
+                return ResourceManager.GetString("JsonHeader_CreatedBy", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Date.
+        /// </summary>
+        internal static string JsonHeader_Date {
+            get {
+                return ResourceManager.GetString("JsonHeader_Date", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to FileVersion.
         /// </summary>
diff --git a/VectoCore/VectoCore/JsonKeys.resx b/VectoCore/VectoCore/JsonKeys.resx
index d4411838a8..04560f85be 100644
--- a/VectoCore/VectoCore/JsonKeys.resx
+++ b/VectoCore/VectoCore/JsonKeys.resx
@@ -444,4 +444,43 @@
   <data name="IEPC_VoltageLevels" xml:space="preserve">
     <value>VoltageLevels</value>
   </data>
+  <data name="EM_ContinuousTorque" xml:space="preserve">
+    <value>ContinuousTorque</value>
+  </data>
+  <data name="EM_ContinuousTorqueSpeed" xml:space="preserve">
+    <value>ContinuousTorqueSpeed</value>
+  </data>
+  <data name="EM_DragCurve" xml:space="preserve">
+    <value>DragCurve</value>
+  </data>
+  <data name="EM_EfficiencyMap" xml:space="preserve">
+    <value>EfficiencyMap</value>
+  </data>
+  <data name="EM_FullLoadCurve" xml:space="preserve">
+    <value>FullLoadCurve</value>
+  </data>
+  <data name="EM_OverloadTime" xml:space="preserve">
+    <value>OverloadTime</value>
+  </data>
+  <data name="EM_OverloadTorque" xml:space="preserve">
+    <value>OverloadTorque</value>
+  </data>
+  <data name="EM_OverloadTorqueSpeed" xml:space="preserve">
+    <value>OverloadTorqueSpeed</value>
+  </data>
+  <data name="EM_ThermalOverloadRecoveryFactor" xml:space="preserve">
+    <value>ThermalOverloadRecoveryFactor</value>
+  </data>
+  <data name="EM_Voltage" xml:space="preserve">
+    <value>Voltage</value>
+  </data>
+  <data name="EM_VoltageLevels" xml:space="preserve">
+    <value>VoltageLevels</value>
+  </data>
+  <data name="JsonHeader_CreatedBy" xml:space="preserve">
+    <value>CreatedBy</value>
+  </data>
+  <data name="JsonHeader_Date" xml:space="preserve">
+    <value>Date</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs
index d3d1e1f287..49fa5c3a17 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/JSONFileWriter.cs
@@ -71,36 +71,63 @@ public class JSONFileWriter : IOutputFileWriter
 		var header = GetHeader(ElectricMotorFormatVersion);
 
 		var body = new Dictionary<string, object> {
-			{ "SavedInDeclMode", declMode },
-			{ "Model", electricMachine.Model },
-			{ "Inertia", electricMachine.Inertia.Value() },
-			{ "ThermalOverloadRecoveryFactor", electricMachine.OverloadRecoveryFactor }
+			{ JsonKeys.SavedInDeclMode, declMode },
+			{ JsonKeys.Component_Model, electricMachine.Model },
+			{ JsonKeys.Engine_Inertia, electricMachine.Inertia.Value() },
+			{ JsonKeys.EM_ThermalOverloadRecoveryFactor, electricMachine.OverloadRecoveryFactor }
 		};
 
+		var vlevels = GetVoltageLevelEntries(electricMachine.VoltageLevels, filename);
+		body.Add(JsonKeys.EM_DragCurve, GetRelativePath(electricMachine.DragCurve.Source, Path.GetDirectoryName(filename)));
+
+		body.Add(JsonKeys.EM_VoltageLevels, vlevels);
+		WriteFile(header, body, filename);
+	}
+	
+	public void SaveIHPC(IElectricMotorEngineeringInputData electricMachine, string filename, bool declMode)
+	{
+		var header = GetHeader(ElectricMotorFormatVersion);
+		
+		var body = new Dictionary<string, object> {
+			{ JsonKeys.SavedInDeclMode, declMode },
+			{ JsonKeys.Component_Model, electricMachine.Model },
+			{ JsonKeys.EM_DragCurve,  GetRelativePath(electricMachine.DragCurve.Source, Path.GetDirectoryName(filename))},
+			{ JsonKeys.Engine_Inertia, electricMachine.Inertia.Value() },
+			{ JsonKeys.EM_ThermalOverloadRecoveryFactor, electricMachine.OverloadRecoveryFactor }
+		};
+		
+		var vlevels = GetVoltageLevelEntries(electricMachine.VoltageLevels, filename);
+		body.Add(JsonKeys.EM_VoltageLevels, vlevels);
+		WriteFile(header, body, filename);
+	}
+	
+	private List<Dictionary<string, object>> GetVoltageLevelEntries(IList<IElectricMotorVoltageLevel> voltageLevels, string filename)
+	{
 		var vlevels = new List<Dictionary<string, object>>();
-		foreach (var entry in electricMachine.VoltageLevels) {
+		foreach (var entry in voltageLevels)
+		{
 			var vlevel = new Dictionary<string, object> {
-				{ "Voltage", entry.VoltageLevel.Value() },
-				{ "ContinuousTorque", entry.ContinuousTorque.Value() },
-				{ "ContinuousTorqueSpeed", entry.ContinuousTorqueSpeed.AsRPM },
-				{ "OverloadTorque", entry.OverloadTorque.Value() },
-				{ "OverloadTorqueSpeed", entry.OverloadTestSpeed.AsRPM },
-				{ "OverloadTime", entry.OverloadTime.Value() },
-				{ "FullLoadCurve", GetRelativePath(entry.FullLoadCurve.Source, Path.GetDirectoryName(filename)) }
+				{ JsonKeys.EM_Voltage, entry.VoltageLevel.Value() },
+				{ JsonKeys.EM_ContinuousTorque, entry.ContinuousTorque.Value() },
+				{ JsonKeys.EM_ContinuousTorqueSpeed, entry.ContinuousTorqueSpeed.AsRPM },
+				{ JsonKeys.EM_OverloadTorque, entry.OverloadTorque.Value() },
+				{ JsonKeys.EM_OverloadTorqueSpeed, entry.OverloadTestSpeed.AsRPM },
+				{ JsonKeys.EM_OverloadTime, entry.OverloadTime.Value() },
+				{ JsonKeys.EM_FullLoadCurve, GetRelativePath(entry.FullLoadCurve.Source, Path.GetDirectoryName(filename)) }
 			};
 			var powerMaps = new Dictionary<int, object>();
-			foreach (var pMap in entry.PowerMap) {
+			foreach (var pMap in entry.PowerMap)
+			{
 				powerMaps.Add(pMap.Gear, GetRelativePath(pMap.PowerMap.Source, Path.GetDirectoryName(filename)));
 			}
-			vlevel.Add("EfficiencyMap", powerMaps); //PowerMap
+			vlevel.Add(JsonKeys.EM_EfficiencyMap, powerMaps); //PowerMap
 			vlevels.Add(vlevel);
 		}
-		body.Add("DragCurve", GetRelativePath(electricMachine.DragCurve.Source, Path.GetDirectoryName(filename)));
-
-		body.Add("VoltageLevels", vlevels);
-		WriteFile(header, body, filename);
+		
+		return vlevels;
 	}
 
+
 	public void SaveBattery(IBatteryPackEngineeringInputData battery, string filename, bool declMode)
 	{
 		var header = GetHeader(REESSFormatVersion);
@@ -211,10 +238,10 @@ public class JSONFileWriter : IOutputFileWriter
 
 	protected Dictionary<string, object> GetHeader(int fileVersion) =>
 		new Dictionary<string, object> {
-			{ "CreatedBy", "" },
-			{ "Date", DateTime.Now.ToUniversalTime().ToString("o") },
-			{ "AppVersion", VECTOvers },
-			{ "FileVersion", fileVersion }
+			{ JsonKeys.JsonHeader_CreatedBy, "" },
+			{ JsonKeys.JsonHeader_Date , DateTime.Now.ToUniversalTime().ToString("o") },
+			{ JsonKeys.AppVersion, VECTOvers },
+			{ JsonKeys.JsonHeader_FileVersion, fileVersion }
 		};
 
 	public void SaveGearbox(IGearboxEngineeringInputData gbx, IAxleGearInputData axl,
-- 
GitLab