diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 7ff88993796116551b127b90c98bb33908a6b350..dc7cdbb1a3275cc9fa7576175d0e809a9019b1b7 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -1152,8 +1152,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return ElementExists(XMLNames.Bus_LegislativeCategory) - ? GetString(XMLNames.Bus_LegislativeCategory).ParseEnum<LegislativeClass?>() - : null; + ? GetString(XMLNames.Bus_LegislativeCategory).ParseEnum<LegislativeClass>() + : (LegislativeClass?)null; } } @@ -1192,7 +1192,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { return ElementExists(XMLNames.Vehicle_RegisteredClass) ? RegistrationClassHelper.Parse(GetString(XMLNames.Vehicle_RegisteredClass)).First() - : (RegistrationClass?)null; + : null; } } @@ -1231,10 +1231,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override VehicleCode? VehicleCode { - get { + get + { return ElementExists(XMLNames.Vehicle_VehicleCode) ? GetString(XMLNames.Vehicle_VehicleCode).ParseEnum<VehicleCode>() - : (VehicleCode?)null; } + : (VehicleCode?)null; + } } public override bool? LowEntry @@ -1378,31 +1380,63 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public XMLDeclarationExemptedInterimStageBusDataProviderV28(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) {} - + + + public override string Model + { + get + { + return ElementExists(XMLNames.Component_Model) + ? GetString(XMLNames.Component_Model) : null; + } + } + public override LegislativeClass? LegislativeClass { - get { return GetString(XMLNames.Bus_LegislativeCategory).ParseEnum<LegislativeClass>(); } + get + { + return ElementExists(XMLNames.Bus_LegislativeCategory) + ? GetString(XMLNames.Bus_LegislativeCategory).ParseEnum<LegislativeClass>() + : (LegislativeClass?)null; + } } public override Kilogram CurbMassChassis { - get { return GetDouble(XMLNames.Bus_CorrectedActualMass).SI<Kilogram>(); } + get + { + return ElementExists(XMLNames.Bus_CorrectedActualMass) + ? GetDouble(XMLNames.Bus_CorrectedActualMass).SI<Kilogram>() + : null; + } } public override Kilogram GrossVehicleMassRating { - get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); } + get + { + return ElementExists(XMLNames.Vehicle_TPMLM) + ? GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>() + : null; + } } public override RegistrationClass? RegisteredClass { - get { return RegistrationClassHelper.Parse(GetString(XMLNames.Vehicle_RegisteredClass)).First(); } + get + { + return ElementExists(XMLNames.Vehicle_RegisteredClass) + ? RegistrationClassHelper.Parse(GetString(XMLNames.Vehicle_RegisteredClass)).First() + : null; + } } public override int NumberOfPassengersLowerDeck { get { + if (!ElementExists(XMLNames.Bus_NumberPassengersLowerDeck)) + return 0; var node = GetNode(XMLNames.Bus_NumberPassengersLowerDeck); return XmlConvert.ToInt32(node.InnerText); } @@ -1412,6 +1446,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { get { + if (!ElementExists(XMLNames.Bus_NumberPassengersUpperDeck)) + return 0; var node = GetNode(XMLNames.Bus_NumberPassengersUpperDeck); return XmlConvert.ToInt32(node.InnerText); } @@ -1419,17 +1455,32 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override VehicleCode? VehicleCode { - get { return GetString(XMLNames.Vehicle_VehicleCode).ParseEnum<VehicleCode>(); } + get + { + return ElementExists(XMLNames.Vehicle_VehicleCode) + ? GetString(XMLNames.Vehicle_VehicleCode).ParseEnum<VehicleCode>() + : (VehicleCode?)null; + } } public override bool? LowEntry { - get { return GetBool(XMLNames.Bus_LowEntry); } + get + { + return ElementExists(XMLNames.Bus_LowEntry) + ? GetBool(XMLNames.Bus_LowEntry) + : (bool?)null; + } } public override Meter Height { - get { return GetDouble(XMLNames.Bus_HeighIntegratedBody).SI<Meter>(); } + get + { + return ElementExists(XMLNames.Bus_HeighIntegratedBody) + ? GetDouble(XMLNames.Bus_HeighIntegratedBody).SI<Meter>() + : null; + } } public override XmlElement PTONode diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs index 2c1fde111df1a1c88b9adf0415bf689a6dd881d0..ea5c6ed0615fda36f2e89c5fa1f19e544252dd79 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs @@ -14,9 +14,12 @@ namespace TUGraz.VectoCore.Tests.XML { protected IXMLInputDataReader xmlInputReader; private IKernel _kernel; + + const string DirPath = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\"; + const string VehicleInterimStageInput = DirPath + "vecto_vehicle-stage_input_full-sample.xml"; + const string VehicleExemptedInterimStageInput = DirPath + "vecto_vehicle-exempted_input_full-sample.xml"; + const string VehicleExemptedMandatoryOnly = DirPath + "vecto_vehicle-exempted_input_only_mandatory_entries.xml"; - const string VehicleInterimStageInput = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_full-sample.xml"; - const string VehicleExemptedInterimStageInput = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-exempted_input_full-sample.xml"; [OneTimeSetUp] public void RunBeforeAnyTests() @@ -140,5 +143,31 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(true, vehicle.LowEntry); Assert.AreEqual(2500, vehicle.Height.Value()); } + + [TestCase] + public void TestVehicleExemptedMandatoryInput() + { + var reader = XmlReader.Create(VehicleExemptedMandatoryOnly); + var inputDataProvider = xmlInputReader.CreateDeclaration(reader); + var vehicle = inputDataProvider.JobInputData.Vehicle; + + Assert.AreEqual("VEH-1234567890", vehicle.Identifier); + Assert.AreEqual("Some Manufacturer 3", vehicle.Manufacturer); + Assert.AreEqual("Some Manufacturer Address 3", vehicle.ManufacturerAddress); + Assert.AreEqual("VEH-1234567891", vehicle.VIN); + Assert.AreEqual(DateTime.Parse("2021-01-09T11:00:00Z").ToUniversalTime(), vehicle.Date); + + Assert.AreEqual(null, vehicle.Model); + Assert.AreEqual(null, vehicle.LegislativeClass); + Assert.AreEqual(null, vehicle.CurbMassChassis); + Assert.AreEqual(null, vehicle.GrossVehicleMassRating); + Assert.AreEqual(null, vehicle.RegisteredClass); + Assert.AreEqual(0, vehicle.NumberOfPassengersLowerDeck); + Assert.AreEqual(0, vehicle.NumberOfPassengersUpperDeck); + Assert.AreEqual(null, vehicle.VehicleCode); + Assert.AreEqual(null, vehicle.LowEntry); + Assert.AreEqual(null, vehicle.Height); + Assert.AreEqual(null, vehicle.Components); + } } }