From 773f8610f5ba7c0a2fb9ad3fb1d90eb56e395de7 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Mon, 29 Aug 2016 16:55:05 +0200
Subject: [PATCH] AxleGearLossMap and PTOLossMap: Changed Handling of empty
 values (no exception, instead return null value)

---
 .../InputData/FileIO/JSON/JSONGearboxData.cs     |  6 ++++--
 .../InputData/FileIO/JSON/JSONVehicleData.cs     | 16 ++++++++--------
 .../AbstractSimulationDataAdapter.cs             | 13 ++++++-------
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
index d76f25bf73..489b863ca4 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
@@ -128,8 +128,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 				if (!gears.Any()) {
 					throw new VectoSimulationException("At least one Gear-Entry must be defined in Gearbox!");
 				}
-				return ReadTableData(
-					gears[0].GetEx<string>(JsonKeys.Gearbox_Gear_LossMapFile), "AxleGear");
+				var lossMap = gears[0][JsonKeys.Gearbox_Gear_LossMapFile];
+				if (lossMap != null)
+					return ReadTableData(gears[0][JsonKeys.Gearbox_Gear_LossMapFile].Value<string>(), "AxleGear", required: false);
+				return null;
 			}
 		}
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 40f0975034..bb730e0a9c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -187,9 +187,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		{
 			get
 			{
-					return Body.GetEx(JsonKeys.Vehicle_AngularGear)
-						.GetEx<string>(JsonKeys.Vehicle_AngularGear_Type)
-						.ParseEnum<AngularGearType>();
+				return Body.GetEx(JsonKeys.Vehicle_AngularGear)
+					.GetEx<string>(JsonKeys.Vehicle_AngularGear_Type)
+					.ParseEnum<AngularGearType>();
 			}
 		}
 
@@ -205,7 +205,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 				return ReadTableData(
 					Body.GetEx(JsonKeys.Vehicle_AngularGear)
 						.GetEx<string>(JsonKeys.Vehicle_AngularGear_LossMapFile),
-						"LossMap");
+					"LossMap");
 			}
 		}
 
@@ -222,11 +222,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		{
 			get
 			{
-				try {
-					return Body.GetEx(JsonKeys.Vehicle_PTO).GetEx<string>(JsonKeys.Vehicle_PTO_Type);
-				} catch (Exception) {
-					return "None";
+				var pto = Body[JsonKeys.Vehicle_PTO];
+				if (pto != null) {
+					return pto[JsonKeys.Vehicle_PTO_Type].Value<string>();
 				}
+				return "None";
 			}
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
index d4bcd9f7b9..e59660f292 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
@@ -140,14 +140,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		internal AxleGearData CreateAxleGearData(IAxleGearInputData data, bool useEfficiencyFallback)
 		{
 			TransmissionLossMap axleLossMap;
-			try {
+			if (data.LossMap == null && useEfficiencyFallback) {
+				axleLossMap = TransmissionLossMapReader.Create(data.Efficiency, data.Ratio, "AxleGear");
+			} else {
 				axleLossMap = TransmissionLossMapReader.Create(data.LossMap, data.Ratio, "AxleGear");
-			} catch (InvalidFileFormatException) {
-				if (useEfficiencyFallback) {
-					axleLossMap = TransmissionLossMapReader.Create(data.Efficiency, data.Ratio, "AxleGear");
-				} else {
-					throw;
-				}
+			}
+			if (axleLossMap == null) {
+				throw new Exception("LossMap for AxleGear is missing.");
 			}
 
 			return new AxleGearData {
-- 
GitLab