From b3803c430c166bd2d2ab194c12ee1daeac549a64 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 23 Feb 2016 17:54:35 +0100
Subject: [PATCH] adapt json input provider

---
 .../InputData/FileIO/JSON/JSONEngineData.cs   |   2 +-
 .../InputData/FileIO/JSON/JSONGearboxData.cs  |   2 +-
 .../InputData/FileIO/JSON/JSONInputData.cs    | 108 ++++++++++++------
 .../FileIO/JSON/JSONInputDataFactory.cs       |   8 +-
 .../InputData/FileIO/JSON/JSONVehicleData.cs  |  39 ++++---
 VectoCore/InputData/Impl/InputData.cs         |   4 +-
 6 files changed, 104 insertions(+), 59 deletions(-)

diff --git a/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs b/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs
index 39f86118c5..97484ce54f 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs
@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	///  }
 	/// }
 	/// </code>
-	public class JSONEngineDataV3 : JSONFile, IEngineInputData
+	public class JSONEngineDataV3 : JSONFile, IEngineEngineeringInputData
 	{
 		public JSONEngineDataV3(JObject data, string fileName) : base(data, fileName) {}
 
diff --git a/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
index 1179b73ee6..d1b5c4dc82 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	///		...
 	///		]
 	/// }
-	public class JSONGearboxDataV5 : JSONFile, IGearboxInputData, IAxleGearInputData, ITorqueConverterInputData
+	public class JSONGearboxDataV5 : JSONFile, IGearboxEngineeringInputData, IAxleGearInputData, ITorqueConverterInputData
 	{
 		public JSONGearboxDataV5(JObject data, string filename) : base(data, filename) {}
 
diff --git a/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 4e08ac895a..fbec2083e3 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -173,15 +173,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	///   }
 	/// }
 	/// </code>
-	public class JSONInputDataV2 : JSONFile, IInputDataProvider, IJobInputData, IDriverInputData, IAuxiliariesInputData
+	public class JSONInputDataV2 : JSONFile, IEngineeringInputDataProvider, IEngineeringJobInputData, IDriverInputData,
+		IAuxiliariesEngineeringInputData
 	{
-		protected IGearboxInputData Gearbox;
+		protected IGearboxEngineeringInputData Gearbox;
 
 		protected IAxleGearInputData AxleGear;
 
-		protected IEngineInputData Engine;
+		protected IEngineEngineeringInputData Engine;
 
-		protected IVehicleInputData VehicleData;
+		protected IVehicleEngineeringInputData VehicleData;
 
 		protected IRetarderInputData Retarder;
 
@@ -229,12 +230,27 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IInputDataProvider
 
-		public virtual IJobInputData JobInputData()
+		public virtual IEngineeringJobInputData JobInputData()
 		{
 			return this;
 		}
 
-		public virtual IVehicleInputData VehicleInputData
+		IVehicleDeclarationInputData IDeclarationInputDataProvider.VehicleInputData
+		{
+			get { return VehicleInputData; }
+		}
+
+		IGearboxDeclarationInputData IDeclarationInputDataProvider.GearboxInputData
+		{
+			get { return GearboxInputData; }
+		}
+
+		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData()
+		{
+			return JobInputData();
+		}
+
+		public virtual IVehicleEngineeringInputData VehicleInputData
 		{
 			get
 			{
@@ -245,7 +261,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual IGearboxInputData GearboxInputData
+		public virtual IGearboxEngineeringInputData GearboxInputData
 		{
 			get
 			{
@@ -267,7 +283,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual IEngineInputData EngineInputData
+		IEngineDeclarationInputData IDeclarationInputDataProvider.EngineInputData
+		{
+			get { return EngineInputData; }
+		}
+
+		public virtual IEngineEngineeringInputData EngineInputData
 		{
 			get
 			{
@@ -278,11 +299,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual IAuxiliariesInputData AuxiliaryInputData()
+		public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData()
 		{
 			return this;
 		}
 
+		IAuxiliariesDeclarationInputData IDeclarationInputDataProvider.AuxiliaryInputData()
+		{
+			return AuxiliaryInputData();
+		}
+
 		public virtual IRetarderInputData RetarderInputData
 		{
 			get
@@ -303,7 +329,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IJobInputData
 
-		public virtual IVehicleInputData Vehicle
+		public virtual IVehicleEngineeringInputData Vehicle
 		{
 			get { return VehicleData; }
 		}
@@ -343,6 +369,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>(); }
 		}
 
+		IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
+		{
+			get { return Vehicle; }
+		}
+
 		public virtual string JobName
 		{
 			get { return _jobname; }
@@ -420,34 +451,41 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#endregion
 
-		public virtual IList<IAuxiliaryInputData> Auxiliaries
+		public virtual IList<IAuxiliaryEngineeringInputData> Auxiliaries
 		{
-			get
-			{
-				var retVal = new List<IAuxiliaryInputData>();
-				foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
-					var auxData = new AuxiliaryDataInputData {
-						ID = aux.GetEx<string>("ID"),
-						Type = aux.GetEx<string>("Type"),
-						Technology = aux.GetEx<string>("Technology")
-					};
-					var auxFile = aux["Path"];
-					retVal.Add(auxData);
-
-					if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) {
-						continue;
-					}
-					var stream = new StreamReader(Path.Combine(BasePath, auxFile.Value<string>()));
-					stream.ReadLine(); // skip header "Transmission ration to engine rpm [-]"
-					auxData.TransmissionRatio = stream.ReadLine().IndulgentParse();
-					stream.ReadLine(); // skip header "Efficiency to engine [-]"
-					auxData.EfficiencyToEngine = stream.ReadLine().IndulgentParse();
-					stream.ReadLine(); // skip header "Efficiency auxiliary to supply [-]"
-					auxData.EfficiencyToSupply = stream.ReadLine().IndulgentParse();
-					auxData.DemandMap = VectoCSVFile.ReadStream(new MemoryStream(Encoding.UTF8.GetBytes(stream.ReadToEnd())));
+			get { return AuxData().Cast<IAuxiliaryEngineeringInputData>().ToList(); }
+		}
+
+		IList<IAuxiliaryDeclarationInputData> IAuxiliariesDeclarationInputData.Auxiliaries
+		{
+			get { return AuxData().Cast<IAuxiliaryDeclarationInputData>().ToList(); }
+		}
+
+		private IList<AuxiliaryDataInputData> AuxData()
+		{
+			var retVal = new List<AuxiliaryDataInputData>();
+			foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
+				var auxData = new AuxiliaryDataInputData {
+					ID = aux.GetEx<string>("ID"),
+					Type = aux.GetEx<string>("Type"),
+					Technology = aux.GetEx<string>("Technology")
+				};
+				var auxFile = aux["Path"];
+				retVal.Add(auxData);
+
+				if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) {
+					continue;
 				}
-				return retVal;
+				var stream = new StreamReader(Path.Combine(BasePath, auxFile.Value<string>()));
+				stream.ReadLine(); // skip header "Transmission ration to engine rpm [-]"
+				auxData.TransmissionRatio = stream.ReadLine().IndulgentParse();
+				stream.ReadLine(); // skip header "Efficiency to engine [-]"
+				auxData.EfficiencyToEngine = stream.ReadLine().IndulgentParse();
+				stream.ReadLine(); // skip header "Efficiency auxiliary to supply [-]"
+				auxData.EfficiencyToSupply = stream.ReadLine().IndulgentParse();
+				auxData.DemandMap = VectoCSVFile.ReadStream(new MemoryStream(Encoding.UTF8.GetBytes(stream.ReadToEnd())));
 			}
+			return retVal;
 		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs b/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
index f1417e29a9..4084181d9c 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
@@ -35,7 +35,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public static IInputDataProvider ReadJsonJob(string filename)
+		public static IEngineeringInputDataProvider ReadJsonJob(string filename)
 		{
 			var json = ReadFile(filename);
 			var version = ReadVersion(json);
@@ -47,7 +47,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public static IVehicleInputData ReadJsonVehicle(string filename)
+		public static IVehicleEngineeringInputData ReadJsonVehicle(string filename)
 		{
 			var json = ReadFile(filename);
 			var version = ReadVersion(json);
@@ -59,7 +59,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public static IGearboxInputData ReadGearbox(string filename)
+		public static IGearboxEngineeringInputData ReadGearbox(string filename)
 		{
 			var json = ReadFile(filename);
 			var version = ReadVersion(json);
@@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public static IEngineInputData ReadEngine(string filename)
+		public static IEngineEngineeringInputData ReadEngine(string filename)
 		{
 			var json = ReadFile(filename);
 			var version = ReadVersion(json);
diff --git a/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 72d9385bc5..290f161978 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -28,7 +28,7 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.JSON
 {
-	public class JSONVehicleDataV7 : JSONFile, IVehicleInputData, IRetarderInputData
+	public class JSONVehicleDataV7 : JSONFile, IVehicleEngineeringInputData, IRetarderInputData
 	{
 		public JSONVehicleDataV7(JObject data, string fileName) : base(data, fileName) {}
 
@@ -43,7 +43,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual Kilogram CurbWeight
+		public virtual Kilogram CurbWeightChassis
 		{
 			get { return Body.GetEx<double>(JsonKeys.Vehicle_CurbWeight).SI<Kilogram>(); }
 		}
@@ -98,21 +98,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual IList<IAxleInputData> Axles
+		public virtual IList<IAxleEngineeringInputData> Axles
 		{
-			get
-			{
-				return
-					Body.GetEx(JsonKeys.Vehicle_AxleConfiguration).GetEx(JsonKeys.Vehicle_AxleConfiguration_Axles).Select(
-						axle => new AxleInputData {
-							Inertia = axle.GetEx<double>(JsonKeys.Vehicle_Axles_Inertia).SI<KilogramSquareMeter>(),
-							Wheels = axle.GetEx<string>(JsonKeys.Vehicle_Axles_Wheels),
-							TwinTyres = axle.GetEx<bool>(JsonKeys.Vehicle_Axles_TwinTyres),
-							RollResistanceCoefficient = axle.GetEx<double>(JsonKeys.Vehicle_Axles_RollResistanceCoefficient),
-							TyreTestLoad = axle.GetEx<double>(JsonKeys.Vehicle_Axles_TyreTestLoad).SI<Newton>(),
-							AxleWeightShare = axle.GetEx<double>("AxleWeightShare")
-						}).Cast<IAxleInputData>().ToList();
-			}
+			get { return AxleWheels().Cast<IAxleEngineeringInputData>().ToList(); }
+		}
+
+		IList<IAxleDeclarationInputData> IVehicleDeclarationInputData.Axles
+		{
+			get { return AxleWheels().Cast<IAxleDeclarationInputData>().ToList(); }
+		}
+
+		private IEnumerable<AxleInputData> AxleWheels()
+		{
+			return
+				Body.GetEx(JsonKeys.Vehicle_AxleConfiguration).GetEx(JsonKeys.Vehicle_AxleConfiguration_Axles).Select(
+					axle => new AxleInputData {
+						Inertia = axle.GetEx<double>(JsonKeys.Vehicle_Axles_Inertia).SI<KilogramSquareMeter>(),
+						Wheels = axle.GetEx<string>(JsonKeys.Vehicle_Axles_Wheels),
+						TwinTyres = axle.GetEx<bool>(JsonKeys.Vehicle_Axles_TwinTyres),
+						RollResistanceCoefficient = axle.GetEx<double>(JsonKeys.Vehicle_Axles_RollResistanceCoefficient),
+						TyreTestLoad = axle.GetEx<double>(JsonKeys.Vehicle_Axles_TyreTestLoad).SI<Newton>(),
+						AxleWeightShare = axle.GetEx<double>("AxleWeightShare")
+					});
 		}
 
 		public virtual DataTable CrosswindCorrectionMap
diff --git a/VectoCore/InputData/Impl/InputData.cs b/VectoCore/InputData/Impl/InputData.cs
index d03d4f998a..7ed9cee7c4 100644
--- a/VectoCore/InputData/Impl/InputData.cs
+++ b/VectoCore/InputData/Impl/InputData.cs
@@ -78,7 +78,7 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public bool TorqueConverterActive { get; internal set; }
 	}
 
-	public class AxleInputData : IAxleInputData
+	public class AxleInputData : IAxleEngineeringInputData
 	{
 		public bool SavedInDeclarationMode
 		{
@@ -114,7 +114,7 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public KilogramSquareMeter Inertia { get; internal set; }
 	}
 
-	public class AuxiliaryDataInputData : IAuxiliaryInputData
+	public class AuxiliaryDataInputData : IAuxiliaryEngineeringInputData
 	{
 		public bool SavedInDeclarationMode { get; internal set; }
 
-- 
GitLab