From 35a97462fd73538342048635b83f1cbabac9d5ed Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 14 Dec 2015 16:38:32 +0100
Subject: [PATCH] make properties in json-classes virtual to allow override

---
 .../InputData/FileIO/JSON/JSONEngineData.cs   | 18 ++---
 .../InputData/FileIO/JSON/JSONGearboxData.cs  | 42 ++++++-----
 .../InputData/FileIO/JSON/JSONInputData.cs    | 75 +++++++++++--------
 .../InputData/FileIO/JSON/JSONVehicleData.cs  | 33 ++++----
 4 files changed, 94 insertions(+), 74 deletions(-)

diff --git a/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs b/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs
index 17506455fd..68f95207f6 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs
@@ -38,48 +38,48 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	{
 		public JSONEngineDataV3(JObject data, string fileName) : base(data, fileName) {}
 
-		public string ModelName
+		public virtual string ModelName
 		{
 			get { return Body.GetEx(JsonKeys.Engine_ModelName).Value<string>(); }
 		}
 
-		public CubicMeter Displacement
+		public virtual CubicMeter Displacement
 		{
 			get { return Body.GetEx(JsonKeys.Engine_Displacement).Value<double>().SI().Cubic.Centi.Meter.Cast<CubicMeter>(); }
 			// convert vom ccm to m^3}
 		}
 
-		public PerSecond IdleSpeed
+		public virtual PerSecond IdleSpeed
 		{
 			get { return Body.GetEx(JsonKeys.Engine_IdleSpeed).Value<double>().RPMtoRad(); }
 		}
 
-		public DataTable FuelConsumptionMap
+		public virtual DataTable FuelConsumptionMap
 		{
 			get { return ReadTableData(Body.GetEx(JsonKeys.Engine_FuelConsumptionMap).Value<string>(), "FuelConsumptionMap"); }
 		}
 
-		public DataTable FullLoadCurve
+		public virtual DataTable FullLoadCurve
 		{
 			get { return ReadTableData(Body.GetEx(JsonKeys.Engine_FullLoadCurveFile).Value<string>(), "FullLoadCurve"); }
 		}
 
-		public KilogramSquareMeter Inertia
+		public virtual KilogramSquareMeter Inertia
 		{
 			get { return Body.GetEx(JsonKeys.Engine_Inertia).Value<double>().SI<KilogramSquareMeter>(); }
 		}
 
-		public KilogramPerWattSecond WHTCMotorway
+		public virtual KilogramPerWattSecond WHTCMotorway
 		{
 			get { return Body.GetEx(JsonKeys.Engine_WHTC_Motorway).Value<double>().SI<KilogramPerWattSecond>(); }
 		}
 
-		public KilogramPerWattSecond WHTCRural
+		public virtual KilogramPerWattSecond WHTCRural
 		{
 			get { return Body.GetEx(JsonKeys.Engine_WHTC_Rural).Value<double>().SI<KilogramPerWattSecond>(); }
 		}
 
-		public KilogramPerWattSecond WHTCUrban
+		public virtual KilogramPerWattSecond WHTCUrban
 		{
 			get { return Body.GetEx(JsonKeys.Engine_WHTC_Urban).Value<double>().SI<KilogramPerWattSecond>(); }
 		}
diff --git a/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
index 0a4353de41..43140e7de8 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
@@ -40,7 +40,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IAxleGearInputData
 
-		public double Ratio
+		public virtual double Ratio
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_Gears)[0].GetEx(JsonKeys.Gearbox_Gear_Ratio).Value<double>(); }
 		}
@@ -58,18 +58,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IGearboxInputData
 
-		public string ModelName
+		public virtual string ModelName
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_ModelName).Value<string>(); }
 		}
 
-		public GearboxType Type
+		public virtual GearboxType Type
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_GearboxType).Value<string>().Parse<GearboxType>(); }
 		}
 
 
-		public KilogramSquareMeter Inertia
+		public virtual KilogramSquareMeter Inertia
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_Inertia).Value<double>().SI<KilogramSquareMeter>(); }
 		}
@@ -79,7 +79,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return Body.GetEx(JsonKeys.Gearbox_TractionInterruption).Value<double>().SI<Second>(); }
 		}
 
-		public IList<ITransmissionInputData> Gears
+		public virtual IList<ITransmissionInputData> Gears
 		{
 			get
 			{
@@ -105,42 +105,42 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public bool SkipGears
+		public virtual bool SkipGears
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_SkipGears).Value<bool>(); }
 		}
 
-		public Second ShiftTime
+		public virtual Second ShiftTime
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_ShiftTime).Value<double>().SI<Second>(); }
 		}
 
-		public bool EarlyShiftUp
+		public virtual bool EarlyShiftUp
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_EarlyShiftUp).Value<bool>(); }
 		}
 
-		public double TorqueReserve
+		public virtual double TorqueReserve
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_TorqueReserve).Value<double>() / 100.0; }
 		}
 
-		public MeterPerSecond StartSpeed
+		public virtual MeterPerSecond StartSpeed
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_StartSpeed).Value<double>().SI<MeterPerSecond>(); }
 		}
 
-		public MeterPerSquareSecond StartAcceleration
+		public virtual MeterPerSquareSecond StartAcceleration
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_StartAcceleration).Value<double>().SI<MeterPerSquareSecond>(); }
 		}
 
-		public double StartTorqueReserve
+		public virtual double StartTorqueReserve
 		{
 			get { return Body.GetEx(JsonKeys.Gearbox_StartTorqueReserve).Value<double>() / 100.0; }
 		}
 
-		public ITorqueConverterInputData TorqueConverter
+		public virtual ITorqueConverterInputData TorqueConverter
 		{
 			get { return this; }
 		}
@@ -149,23 +149,27 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region ITorqueConverterInputData
 
-		public bool Enabled
+		public virtual bool Enabled
 		{
-			get { return false; // TODO @@@
+			get
+			{
+				return false; // TODO @@@
 			}
 		}
 
-		public RoundsPerMinute ReferenceRPM
+		public virtual PerSecond ReferenceRPM
 		{
 			get
 			{
 				return
-					Body.GetEx(JsonKeys.Gearbox_TorqueConverter).GetEx(JsonKeys.Gearbox_TorqueConverter_ReferenceRPM).Value<double>()
-						.SI<RoundsPerMinute>();
+					Body.GetEx(JsonKeys.Gearbox_TorqueConverter)
+						.GetEx(JsonKeys.Gearbox_TorqueConverter_ReferenceRPM)
+						.Value<double>()
+						.RPMtoRad();
 			}
 		}
 
-		public DataTable TCData
+		public virtual DataTable TCData
 		{
 			get
 			{
diff --git a/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 2af961989c..45ab9996b9 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -165,22 +165,37 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		public JSONInputDataV2(JObject data, string filename) : base(data, filename)
 		{
 			_jobname = Path.GetFileName(filename);
-			var gearboxFile = Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>();
-			if (!EmptyOrInvalidFileName(gearboxFile)) {
-				Gearbox = JSONInputDataFactory.ReadGearbox(Path.Combine(BasePath, gearboxFile));
+			try {
+				var gearboxFile = Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>();
+				if (!EmptyOrInvalidFileName(gearboxFile)) {
+					Gearbox = JSONInputDataFactory.ReadGearbox(Path.Combine(BasePath, gearboxFile));
+				}
+			} catch (Exception e) {
+				throw new VectoException("Failed to read Gearbox file.", e);
 			}
-			var axleGear = Gearbox as IAxleGearInputData;
-			if (axleGear != null) {
-				AxleGear = axleGear;
+			try {
+				var axleGear = Gearbox as IAxleGearInputData;
+				if (axleGear != null) {
+					AxleGear = axleGear;
+				}
+			} catch (Exception e) {
+				throw new VectoException("Failed to read AxleGear file.", e);
 			}
-			Engine = JSONInputDataFactory.ReadEngine(
-				Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()));
-			var vehicleFile = Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>();
-			if (!EmptyOrInvalidFileName(vehicleFile)) {
-				VehicleData = JSONInputDataFactory.ReadJsonVehicle(
-					Path.Combine(BasePath, vehicleFile));
+			try {
+				Engine = JSONInputDataFactory.ReadEngine(
+					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()));
+			} catch (Exception e) {
+				throw new VectoException("Failed to read Engine file.", e);
+			}
+			try {
+				var vehicleFile = Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>();
+				if (!EmptyOrInvalidFileName(vehicleFile)) {
+					VehicleData = JSONInputDataFactory.ReadJsonVehicle(
+						Path.Combine(BasePath, vehicleFile));
+				}
+			} catch (Exception e) {
+				throw new VectoException("Faled to read Vehicle file.", e);
 			}
-
 			var retarder = VehicleData as IRetarderInputData;
 			if (retarder != null) {
 				Retarder = retarder;
@@ -189,12 +204,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IInputDataProvider
 
-		public IJobInputData JobInputData()
+		public virtual IJobInputData JobInputData()
 		{
 			return this;
 		}
 
-		public IVehicleInputData VehicleInputData
+		public virtual IVehicleInputData VehicleInputData
 		{
 			get
 			{
@@ -205,7 +220,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IGearboxInputData GearboxInputData
+		public virtual IGearboxInputData GearboxInputData
 		{
 			get
 			{
@@ -216,7 +231,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IAxleGearInputData AxleGearInputData
+		public virtual IAxleGearInputData AxleGearInputData
 		{
 			get
 			{
@@ -227,7 +242,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IEngineInputData EngineInputData
+		public virtual IEngineInputData EngineInputData
 		{
 			get
 			{
@@ -238,12 +253,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IAuxiliariesInputData AuxiliaryInputData()
+		public virtual IAuxiliariesInputData AuxiliaryInputData()
 		{
 			return this;
 		}
 
-		public IRetarderInputData RetarderInputData
+		public virtual IRetarderInputData RetarderInputData
 		{
 			get
 			{
@@ -254,7 +269,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IDriverInputData DriverInputData
+		public virtual IDriverInputData DriverInputData
 		{
 			get { return this; }
 		}
@@ -263,12 +278,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IJobInputData
 
-		public IVehicleInputData Vehicle
+		public virtual IVehicleInputData Vehicle
 		{
 			get { return VehicleData; }
 		}
 
-		public IList<ICycleData> Cycles
+		public virtual IList<ICycleData> Cycles
 		{
 			get
 			{
@@ -298,12 +313,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public bool EngineOnlyMode
+		public virtual bool EngineOnlyMode
 		{
 			get { return Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>(); }
 		}
 
-		public string JobName
+		public virtual string JobName
 		{
 			get { return _jobname; }
 		}
@@ -312,7 +327,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region DriverInputData
 
-		public IStartStopInputData StartStop
+		public virtual IStartStopInputData StartStop
 		{
 			get
 			{
@@ -326,7 +341,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public ILookaheadCoastingInputData Lookahead
+		public virtual ILookaheadCoastingInputData Lookahead
 		{
 			get
 			{
@@ -339,7 +354,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IOverSpeedEcoRollInputData OverSpeedEcoRoll
+		public virtual IOverSpeedEcoRollInputData OverSpeedEcoRoll
 		{
 			get
 			{
@@ -354,7 +369,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public DataTable AccelerationCurve
+		public virtual DataTable AccelerationCurve
 		{
 			get
 			{
@@ -367,7 +382,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#endregion
 
-		public IList<IAuxiliaryInputData> Auxiliaries
+		public virtual IList<IAuxiliaryInputData> Auxiliaries
 		{
 			get
 			{
diff --git a/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 7fb1359b23..2374221459 100644
--- a/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -25,52 +25,52 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public Kilogram CurbWeight
+		public virtual Kilogram CurbWeight
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_CurbWeight).Value<double>().SI<Kilogram>(); }
 		}
 
-		public Kilogram CurbWeightExtra
+		public virtual Kilogram CurbWeightExtra
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_CurbWeightExtra).Value<double>().SI<Kilogram>(); }
 		}
 
-		public Kilogram GrossVehicleMassRating
+		public virtual Kilogram GrossVehicleMassRating
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_GrossVehicleMassRating).Value<double>().SI<Ton>().Cast<Kilogram>(); }
 		}
 
-		public Kilogram Loading
+		public virtual Kilogram Loading
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_Loading).Value<double>().SI<Kilogram>(); }
 		}
 
-		public Meter DynamicTyreRadius
+		public virtual Meter DynamicTyreRadius
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_DynamicTyreRadius).Value<double>().SI().Milli.Meter.Cast<Meter>(); }
 		}
 
-		public SquareMeter AirDragArea
+		public virtual SquareMeter AirDragArea
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_DragCoefficient).Value<double>().SI<SquareMeter>(); }
 		}
 
-		public SquareMeter AirDragAreaRigidTruck
+		public virtual SquareMeter AirDragAreaRigidTruck
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_DragCoefficientRigidTruck).Value<double>().SI<SquareMeter>(); }
 		}
 
-		public CrossWindCorrectionMode CrossWindCorrectionMode
+		public virtual CrossWindCorrectionMode CrossWindCorrectionMode
 		{
 			get { return CrossWindCorrectionModeHelper.Parse(Body.GetEx("CdCorrMode").Value<string>()); }
 		}
 
-		public string Rim
+		public virtual string Rim
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_Rim).Value<string>(); }
 		}
 
-		public AxleConfiguration AxleConfiguration
+		public virtual AxleConfiguration AxleConfiguration
 		{
 			get
 			{
@@ -80,7 +80,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public IList<IAxleInputData> Axles
+		public virtual IList<IAxleInputData> Axles
 		{
 			get
 			{
@@ -91,12 +91,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 							Wheels = axle.GetEx(JsonKeys.Vehicle_Axles_Wheels).Value<string>(),
 							TwinTyres = axle.GetEx(JsonKeys.Vehicle_Axles_TwinTyres).Value<bool>(),
 							RollResistanceCoefficient = axle.GetEx(JsonKeys.Vehicle_Axles_RollResistanceCoefficient).Value<double>(),
-							TyreTestLoad = axle.GetEx(JsonKeys.Vehicle_Axles_TyreTestLoad).Value<double>().SI<Newton>()
+							TyreTestLoad = axle.GetEx(JsonKeys.Vehicle_Axles_TyreTestLoad).Value<double>().SI<Newton>(),
+							AxleWeightShare = axle.GetEx("AxleWeightShare").Value<double>()
 						}).Cast<IAxleInputData>().ToList();
 			}
 		}
 
-		public DataTable CrosswindCorrectionMap
+		public virtual DataTable CrosswindCorrectionMap
 		{
 			get { return ReadTableData(Body.GetEx("CdCorrFile").Value<string>(), "CrosswindCorrection File"); }
 		}
@@ -105,7 +106,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IRetarderInputData
 
-		public RetarderData.RetarderType Type
+		public virtual RetarderData.RetarderType Type
 		{
 			get
 			{
@@ -116,12 +117,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public double Ratio
+		public virtual double Ratio
 		{
 			get { return Body.GetEx(JsonKeys.Vehicle_Retarder).GetEx(JsonKeys.Vehicle_Retarder_Ratio).Value<double>(); }
 		}
 
-		public DataTable LossMap
+		public virtual DataTable LossMap
 		{
 			get
 			{
-- 
GitLab