From 0fdcfe09886c0cb6837cf207c5603f1c082648b7 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 7 Nov 2018 17:22:55 +0100
Subject: [PATCH] implementing interface

---
 VECTO/Input Files/Vehicle.vb                  | 56 ++++++++++++++-
 .../Resources/XMLNames.Designer.cs            | 72 +++++++++++++++++++
 .../VectoCommon/Resources/XMLNames.resx       | 24 +++++++
 .../FileIO/JSON/JSONComponentInputData.cs     | 12 ++++
 .../InputData/FileIO/JSON/JSONVehicleData.cs  | 19 +++++
 .../XMLDeclarationVehicleDataProvider.cs      | 46 ++++++++++++
 .../XMLEngineeringVehicleDataProvider.cs      | 10 +++
 .../Models/Declaration/DeclarationData.cs     |  9 +++
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  6 ++
 9 files changed, 253 insertions(+), 1 deletion(-)

diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb
index 49bc8665e1..498f2aa990 100644
--- a/VECTO/Input Files/Vehicle.vb	
+++ b/VECTO/Input Files/Vehicle.vb	
@@ -320,7 +320,13 @@ Public Class Vehicle
 		End Get
 	End Property
 
-	Public ReadOnly Property VIN As String Implements IVehicleDeclarationInputData.VIN
+    Public ReadOnly Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle
+    get
+            Return false
+    End Get
+    End Property
+
+    Public ReadOnly Property VIN As String Implements IVehicleDeclarationInputData.VIN
 		Get
 			Return "N.A."
 		End Get
@@ -645,4 +651,52 @@ Public Class Vehicle
 			Return Me
 		End Get
 	End Property
+
+    Public ReadOnly Property VocationalVehicle As Boolean Implements IVehicleDeclarationInputData.VocationalVehicle
+    get
+            Return DeclarationData.Vehicle.VocationalVehicleDefault
+    End Get
+    End Property
+
+    Public ReadOnly Property SleeperCab As Boolean Implements IVehicleDeclarationInputData.SleeperCab
+    get
+            Return DeclarationData.Vehicle.SleeperCabDefault
+    End Get
+    End Property
+
+    Public ReadOnly Property TankSystem As NgTankSystem Implements IVehicleDeclarationInputData.TankSystem
+    get
+            Return DeclarationData.Vehicle.NgTankSystemDefault
+    End Get
+    End Property
+
+    Public ReadOnly Property ZeroEmissionVehicle As Boolean Implements IVehicleDeclarationInputData.ZeroEmissionVehicle
+    get
+            Return DeclarationData.Vehicle.ZeroEmissionVehicleDefault
+    End Get
+    End Property
+
+    Public ReadOnly Property HybridElectricHDV As Boolean Implements IVehicleDeclarationInputData.HybridElectricHDV
+    get
+            return DeclarationData.Vehicle.HybridElectricHDVDefault
+    End Get
+    End Property
+
+    Public ReadOnly Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle
+    get
+            return DeclarationData.Vehicle.DualFuelVehicleDefault
+    End Get
+    End Property
+
+    Public ReadOnly Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1
+    get
+            Return Nothing
+    End Get
+    End Property
+
+    Public ReadOnly Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2
+    get
+            Return Nothing
+    End Get
+    End Property
 End Class
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
index d2b02af8b2..d8d00d3d99 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
@@ -2310,6 +2310,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to DualFuelVehicle.
+        /// </summary>
+        public static string Vehicle_DualFuelVehicle {
+            get {
+                return ResourceManager.GetString("Vehicle_DualFuelVehicle", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to GrossVehicleMass.
         /// </summary>
@@ -2319,6 +2328,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to HybridElectricHDV.
+        /// </summary>
+        public static string Vehicle_HybridElectricHDV {
+            get {
+                return ResourceManager.GetString("Vehicle_HybridElectricHDV", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to IdlingSpeed.
         /// </summary>
@@ -2346,6 +2364,33 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to MaxNetPower1.
+        /// </summary>
+        public static string Vehicle_MaxNetPower1 {
+            get {
+                return ResourceManager.GetString("Vehicle_MaxNetPower1", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to MaxNetPower2.
+        /// </summary>
+        public static string Vehicle_MaxNetPower2 {
+            get {
+                return ResourceManager.GetString("Vehicle_MaxNetPower2", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to NgTankSystem.
+        /// </summary>
+        public static string Vehicle_NgTankSystem {
+            get {
+                return ResourceManager.GetString("Vehicle_NgTankSystem", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to PTO.
         /// </summary>
@@ -2481,6 +2526,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to SleeperCab.
+        /// </summary>
+        public static string Vehicle_SleeperCab {
+            get {
+                return ResourceManager.GetString("Vehicle_SleeperCab", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to SteeredAxles.
         /// </summary>
@@ -2544,6 +2598,24 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to VocationalVehicle.
+        /// </summary>
+        public static string Vehicle_VocationalVehicle {
+            get {
+                return ResourceManager.GetString("Vehicle_VocationalVehicle", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to ZeroEmissionVehicle.
+        /// </summary>
+        public static string Vehicle_ZeroEmissionVehicle {
+            get {
+                return ResourceManager.GetString("Vehicle_ZeroEmissionVehicle", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to torqueLimit.
         /// </summary>
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx
index e16a5eb623..254061c611 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.resx
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx
@@ -951,4 +951,28 @@
   <data name="XMLManufacturerReport_torqueLimitPercent" xml:space="preserve">
     <value>torqueLimitPercent</value>
   </data>
+  <data name="Vehicle_HybridElectricHDV" xml:space="preserve">
+    <value>HybridElectricHDV</value>
+  </data>
+  <data name="Vehicle_DualFuelVehicle" xml:space="preserve">
+    <value>DualFuelVehicle</value>
+  </data>
+  <data name="Vehicle_VocationalVehicle" xml:space="preserve">
+    <value>VocationalVehicle</value>
+  </data>
+  <data name="Vehicle_SleeperCab" xml:space="preserve">
+    <value>SleeperCab</value>
+  </data>
+  <data name="Vehicle_NgTankSystem" xml:space="preserve">
+    <value>NgTankSystem</value>
+  </data>
+  <data name="Vehicle_ZeroEmissionVehicle" xml:space="preserve">
+    <value>ZeroEmissionVehicle</value>
+  </data>
+  <data name="Vehicle_MaxNetPower1" xml:space="preserve">
+    <value>MaxNetPower1</value>
+  </data>
+  <data name="Vehicle_MaxNetPower2" xml:space="preserve">
+    <value>MaxNetPower2</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
index 3ad0ed8663..e08492963a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.JSON
@@ -148,6 +149,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return ""; }
 		}
 
+		public bool ExemptedVehicle { get { return false; } }
+
 		public string VIN
 		{
 			get { return VehicleData.VIN; }
@@ -299,6 +302,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return PTOTransmission; }
 		}
 
+		public bool VocationalVehicle { get { return DeclarationData.Vehicle.VocationalVehicleDefault; } }
+		public bool SleeperCab { get { return DeclarationData.Vehicle.SleeperCabDefault; } }
+		public NgTankSystem TankSystem { get { return DeclarationData.Vehicle.NgTankSystemDefault; } }
+		public bool ZeroEmissionVehicle { get { return DeclarationData.Vehicle.ZeroEmissionVehicleDefault; } }
+		public bool HybridElectricHDV { get { return DeclarationData.Vehicle.HybridElectricHDVDefault; } }
+		public bool DualFuelVehicle { get { return DeclarationData.Vehicle.DualFuelVehicleDefault; } }
+		public Watt MaxNetPower1 { get { return null; } }
+		public Watt MaxNetPower2 { get { return null; } }
+
 		IAuxiliariesEngineeringInputData IVehicleEngineeringInputData.AuxiliaryInputData()
 		{
 			throw new NotImplementedException();
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 0382ce6c7e..0602186de0 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Models.Declaration;
 
 namespace TUGraz.VectoCore.InputData.FileIO.JSON
 {
@@ -55,6 +56,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region IVehicleInputData
 
+		public bool ExemptedVehicle { get { return false; } }
+
 		public string VIN
 		{
 			get { return "N.A."; }
@@ -253,6 +256,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return this; }
 		}
 
+		public bool VocationalVehicle { get { return DeclarationData.Vehicle.VocationalVehicleDefault; } }
+
+		public bool SleeperCab { get { return DeclarationData.Vehicle.SleeperCabDefault; } }
+
+		public NgTankSystem TankSystem { get { return DeclarationData.Vehicle.NgTankSystemDefault; } }
+
+		public bool ZeroEmissionVehicle { get { return DeclarationData.Vehicle.ZeroEmissionVehicleDefault; } }
+
+		public bool HybridElectricHDV { get { return DeclarationData.Vehicle.HybridElectricHDVDefault; } }
+
+		public bool DualFuelVehicle { get { return DeclarationData.Vehicle.DualFuelVehicleDefault; } }
+
+		public Watt MaxNetPower1 { get { return null; } }
+
+		public Watt MaxNetPower2 { get { return null; } }
+
 		IAuxiliariesEngineeringInputData IVehicleEngineeringInputData.AuxiliaryInputData()
 		{
 			return Job.EngineeringAuxiliaries;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs
index 842f2050a7..f61aa9b84d 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs
@@ -62,6 +62,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 			XMLAuxiliaryData = new XMLDeclarationAuxiliaryDataProvider(xmlInputDataProvider);
 		}
 
+		public bool ExemptedVehicle
+		{
+			get { return ElementExists(XMLNames.Vehicle_HybridElectricHDV) && ElementExists(XMLNames.Vehicle_DualFuelVehicle); }
+		}
+
 		public string VIN
 		{
 			get { return GetElementValue(XMLNames.Vehicle_VIN); }
@@ -249,5 +254,46 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 		{
 			get { return this; }
 		}
+
+		public bool VocationalVehicle { get {
+			return ElementExists(XMLNames.Vehicle_VocationalVehicle)
+				? XmlConvert.ToBoolean(GetElementValue(XMLNames.Vehicle_VocationalVehicle))
+				: DeclarationData.Vehicle.VocationalVehicleDefault;
+		} }
+		public bool SleeperCab { get {
+			return ElementExists(XMLNames.Vehicle_SleeperCab)
+				? XmlConvert.ToBoolean(GetElementValue(XMLNames.Vehicle_SleeperCab))
+				: DeclarationData.Vehicle.SleeperCabDefault;
+		} }
+		public NgTankSystem TankSystem { get {
+			return ElementExists(XMLNames.Vehicle_NgTankSystem)
+				? EnumHelper.ParseEnum<NgTankSystem>(GetElementValue(XMLNames.Vehicle_NgTankSystem))
+				: DeclarationData.Vehicle.NgTankSystemDefault;
+		} }
+		public bool ZeroEmissionVehicle { get {
+			return ElementExists(XMLNames.Vehicle_ZeroEmissionVehicle)
+				? XmlConvert.ToBoolean(GetElementValue(XMLNames.Vehicle_ZeroEmissionVehicle))
+				: DeclarationData.Vehicle.ZeroEmissionVehicleDefault;
+		} }
+		public bool HybridElectricHDV { get {
+			return ElementExists(XMLNames.Vehicle_HybridElectricHDV)
+				? XmlConvert.ToBoolean(GetElementValue(XMLNames.Vehicle_HybridElectricHDV))
+				: DeclarationData.Vehicle.HybridElectricHDVDefault;
+		} }
+		public bool DualFuelVehicle { get {
+			return ElementExists(XMLNames.Vehicle_DualFuelVehicle)
+				? XmlConvert.ToBoolean(GetElementValue(XMLNames.Vehicle_DualFuelVehicle))
+				: DeclarationData.Vehicle.DualFuelVehicleDefault;
+		} }
+		public Watt MaxNetPower1 { get {
+			return ElementExists(XMLNames.Vehicle_MaxNetPower1)
+				? GetDoubleElementValue(XMLNames.Vehicle_MaxNetPower1).SI<Watt>()
+				: null;
+		} }
+		public Watt MaxNetPower2 { get {
+			return ElementExists(XMLNames.Vehicle_MaxNetPower2)
+				? GetDoubleElementValue(XMLNames.Vehicle_MaxNetPower2).SI<Watt>()
+				: null;
+		} }
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
index 287678bfd0..da1651a477 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
@@ -75,6 +75,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 			get { return GetAttributeValue("", XMLNames.Component_ID_Attr); }
 		}
 
+		public bool ExemptedVehicle { get { return false; } }
+
 		public string VIN
 		{
 			get { return GetElementValue(XMLNames.Vehicle_VIN); }
@@ -289,6 +291,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 		public IRetarderInputData RetarderInputData { get; private set; }
 
 		public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
+		public bool VocationalVehicle { get { return false; } }
+		public bool SleeperCab { get { return true; } }
+		public NgTankSystem TankSystem { get; }
+		public bool ZeroEmissionVehicle { get { return false; } }
+		public bool HybridElectricHDV { get { return false; } }
+		public bool DualFuelVehicle { get { return false; } }
+		public Watt MaxNetPower1 { get { return null; } }
+		public Watt MaxNetPower2 { get { return null; } }
 
 		#region "FactoryMethods"
 
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 2dceb56207..82bfe4f136 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -528,5 +528,14 @@ namespace TUGraz.VectoCore.Models.Declaration
 			public static readonly SpecificFuelConsumption UpperFCThreshold = 600.SI(Unit.SI.Gramm.Per.Kilo.Watt.Hour).Cast<SpecificFuelConsumption>();
 			public static readonly Second FCAccumulationWindow = 10.SI(Unit.SI.Minute).Cast<Second>();
 		}
+
+		public static class Vehicle {
+			public const bool DualFuelVehicleDefault = false;
+			public const bool HybridElectricHDVDefault = false;
+			public const bool ZeroEmissionVehicleDefault = false;
+			public const NgTankSystem NgTankSystemDefault = NgTankSystem.Compressed;
+			public const bool SleeperCabDefault = true;
+			public const bool VocationalVehicleDefault = false;
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index f235d8f798..2676594936 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -2733,6 +2733,12 @@
     </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\vecto_engine-sample.xml" />
     <Content Include="TestData\XML\XMLReaderDeclaration\vecto_gearbox-sample.xml" />
+    <Content Include="TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample_exempted.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample_FULL_updated.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample_torqueLimits.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-- 
GitLab