From afddad24459c7e570f58345c9754b2a71e4f283c Mon Sep 17 00:00:00 2001 From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at> Date: Fri, 12 Mar 2021 22:19:33 +0100 Subject: [PATCH] added primary vehicle reader for VIF xml --- .../InputData/IInputDataProvider.cs | 2 + .../Resources/XMLNames.Designer.cs | 9 + .../VectoCommon/Resources/XMLNames.resx | 3 + .../XMLDeclarationAxlegearDataProvider.cs | 19 + .../XMLDeclarationComponentsDataProvider.cs | 22 + .../XMLDeclarationEngineDataProvider.cs | 15 + .../XMLDeclarationGearboxDataProvider.cs | 18 + .../XMLDeclarationInputDataProvider.cs | 2 + .../XMLDeclarationJobInputDataProvider.cs | 39 ++ .../XMLDeclarationMultistageInputData.cs | 90 +++- ...usApplicationInformationDataProviderV01.cs | 13 + ...ryVehicleBusResultsInputDataProviderV01.cs | 22 +- .../XMLDeclarationVehicleDataProvider.cs | 23 +- .../Declaration/DataProvider/XMLGearData.cs | 21 + .../Factory/IDeclarationInjectFactory.cs | 4 +- ...ationInputDataMultistageV01InjectModule.cs | 55 +++ .../Reader/Impl/XMLComponentReader.cs | 17 + .../Reader/Impl/XMLDeclarationInputReader.cs | 2 +- .../XMLDeclarationMultistageInputReader.cs | 56 ++- .../Reader/Impl/XMLJobDataReader.cs | 17 + ...ultistage_primary_vehicle_stage_2_full.xml | 4 +- .../XML/XMLMultistageBusDataTest.cs | 437 +++++++++++++++++- 22 files changed, 867 insertions(+), 23 deletions(-) diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index d8fdd5fc2a..440b8c6b2d 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -68,6 +68,8 @@ namespace TUGraz.VectoCommon.InputData DigestData PrimaryVehicleInputDataHash { get; } + DigestData VehicleSignatureHash { get; } + IResultsInputData ResultsInputData { get; } IApplicationInformation ApplicationInformation { get; } diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index 93dc8e5401..e256a7e643 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -717,6 +717,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to PrimaryVehicle. + /// </summary> + public static string Bus_PrimaryVehicle { + get { + return ResourceManager.GetString("Bus_PrimaryVehicle", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to ResultCards. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 5eabf0880b..40d718a3d5 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1422,4 +1422,7 @@ <data name="VectoOutputMultistage" xml:space="preserve"> <value>VectoOutputMultistage</value> </data> + <data name="Bus_PrimaryVehicle" xml:space="preserve"> + <value>PrimaryVehicle</value> + </data> </root> \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs index db695af2cd..b48d96e406 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs @@ -116,4 +116,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleBusAxlegearDataProviderV01 : XMLDeclarationAxlegearDataProviderV10 + { + public new static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "AxlegearDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationMultistagePrimaryVehicleBusAxlegearDataProviderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) + : base(vehicle, componentNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs index d67d5da75b..3beb537134 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs @@ -288,6 +288,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } + // --------------------------------------------------------------------------------------- + + + public class XMLDeclarationComponentsMultistagePrimaryVehicleBusDataProviderV01 : XMLDeclarationComponentsPrimaryVehicleBusDataProviderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "VehicleComponentsPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationComponentsMultistagePrimaryVehicleBusDataProviderV01(IXMLDeclarationVehicleData vehicle, + XmlNode componentNode, string sourceFile) : base(vehicle, componentNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } + + + // --------------------------------------------------------------------------------------- public class XMLDeclarationInterimStageBusComponentsDataProviderV28 : XMLDeclarationComponentsDataProviderV10, IXMLVehicleComponentsDeclaration diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs index db992c93b1..f07a6087fb 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs @@ -498,4 +498,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleBusEngineDataProviderV01 : XMLDeclarationPrimaryVehicleBusEngineDataProviderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "EngineDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationMultistagePrimaryVehicleBusEngineDataProviderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, + string sourceFile) : base(vehicle, componentNode, sourceFile) { } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs index 25d2370f86..656f528311 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs @@ -165,4 +165,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleBusGearboxDataProviderV01 : XMLDeclarationPrimaryVehicleBusGearboxDataProviderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "TransmissionDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationMultistagePrimaryVehicleBusGearboxDataProviderV01(IXMLDeclarationVehicleData vehicle, + XmlNode componentNode, string sourceFile) : base(vehicle, componentNode, sourceFile) { } + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs index 336500a52f..1705f01b4c 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs @@ -153,6 +153,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration get { return Reader.GetDigestData(GetNode("InputDataSignature")); } } + public DigestData VehicleSignatureHash { get { return null; } } + public DigestData ManufacturerRecordHash { get { return Reader.GetDigestData(GetNode("ManufacturerRecordSignature")); } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs index 1a7a223970..4ec71bf122 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs @@ -140,4 +140,43 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public IXMLJobDataReader Reader { protected get; set; } public IXMLPrimaryVehicleBusInputData InputData { get; } } + + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleBusJobInputDataProviderV01 : AbstractXMLResource, + IXMLPrimaryVehicleBusJobInputData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public const string XSD_TYPE = "VehiclePIFType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + protected IVehicleDeclarationInputData _vehicle; + + public XMLDeclarationMultistagePrimaryVehicleBusJobInputDataProviderV01(XmlNode node, IXMLPrimaryVehicleBusInputData inputProvider, + string fileName) : base(node, fileName) + { + InputData = inputProvider; + } + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + public IVehicleDeclarationInputData Vehicle + { + get { return _vehicle ?? (_vehicle = Reader.CreateVehicle); } + } + + protected override DataSourceType SourceType { get; } + public bool SavedInDeclarationMode { get; } + public string JobName { get; } + public string ShiftStrategy { get{ return null; } } + public IXMLJobDataReader Reader { protected get; set; } + public IXMLPrimaryVehicleBusInputData InputData { get; } + } + + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs index 149767eb7f..a409a46353 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs @@ -1,11 +1,16 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Utils; +using TUGraz.VectoHashing; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { @@ -79,7 +84,90 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public IXMLMultistageJobReader Reader { get; set; } public IXMLMultistageInputDataProvider InputData { get; } - protected override XNamespace SchemaNamespace { get; } + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + protected override DataSourceType SourceType { get; } + } + + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleInputDataV01 : AbstractXMLResource, IXMLPrimaryVehicleBusInputData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public const string XSD_TYPE = "PrimaryVehicleDataType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + private IVehicleDeclarationInputData _vehicle; + private IApplicationInformation _applicationInformation; + private IResultsInputData _resultsInputData; + private XmlNode _signatureNode; + + public XMLDeclarationMultistagePrimaryVehicleInputDataV01(XmlNode xmlNode, string fileName) + : base(xmlNode, fileName) + { + SourceType = DataSourceType.XMLFile; + _signatureNode = xmlNode.LastChild; + } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } protected override DataSourceType SourceType { get; } + + public IVehicleDeclarationInputData Vehicle + { + get { return _vehicle ?? (_vehicle = Reader.JobData.Vehicle); } + } + + public DigestData PrimaryVehicleInputDataHash + { + get { return Reader.GetDigestData(GetNode("InputDataSignature")); } + } + + public DigestData VehicleSignatureHash + { + get { return Reader.GetDigestData(_signatureNode); } + } + + public DigestData ManufacturerRecordHash + { + get { return Reader.GetDigestData(GetNode("ManufacturerRecordSignature")); } + } + + public IResultsInputData ResultsInputData + { + get { return _resultsInputData ?? (_resultsInputData = Reader.ResultsInputData); } + } + + public IResult GetResult(VehicleClass vehicleClass, MissionType mission, string fuelMode, Kilogram payload) + { + return ResultsInputData.Results.FirstOrDefault( + x => x.VehicleGroup == vehicleClass && + (x.SimulationParameter.Payload - payload).IsEqual(0, 1) && x.Mission == mission && + x.SimulationParameter.FuelMode.Equals(fuelMode, StringComparison.InvariantCultureIgnoreCase)); + } + + public XmlNode ResultsNode { get { return GetNode(XMLNames.Report_Results); } } + + public IApplicationInformation ApplicationInformation + { + get { return _applicationInformation ?? (_applicationInformation = Reader.ApplicationInformation); } + } + + public XmlNode ApplicationInformationNode + { + get { return GetNode(XMLNames.Tag_ApplicationInformation); } + } + + public XElement XMLHash { get; } + public IXMLDeclarationPrimaryVehicleBusInputDataReader Reader { get; set; } + + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs index 3a2197108f..7ab263b7fe 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs @@ -35,4 +35,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return XmlConvert.ToDateTime(GetString(XMLNames.Report_ApplicationInfo_Date), XmlDateTimeSerializationMode.Utc); } } } + + public class XMLDeclarationMultistagePrimaryVehicleBusApplicationInformationDataProviderV01 : + XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01 + { + public new static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "ApplicationInformationPrimaryVehicleType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationMultistagePrimaryVehicleBusApplicationInformationDataProviderV01(XmlNode applicationNode) + : base(applicationNode) { } + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs index dafcb0266a..61d93e7262 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs @@ -1,11 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Xml; using System.Xml.Linq; -using Castle.Components.DictionaryAdapter.Xml; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; @@ -13,7 +9,6 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.InputData.Impl; -using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider @@ -96,4 +91,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider }; } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleBusResultsInputDataProviderV01 : + XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01 + { + public new static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "ResultsPrimaryVehicleType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationMultistagePrimaryVehicleBusResultsInputDataProviderV01(XmlNode resultsNode) + : base(resultsNode) { } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 188dbe194a..4be0c766b4 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -1118,7 +1118,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } - + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationMultistagePrimaryVehicleBusDataProviderV01 : XMLDeclarationPrimaryVehicleBusDataProviderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "VehiclePIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationMultistagePrimaryVehicleBusDataProviderV01(IXMLPrimaryVehicleBusJobInputData busJobData, + XmlNode xmlNode, string sourceFile) + : base(busJobData, xmlNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + protected override DataSourceType SourceType { get; } + } + + // --------------------------------------------------------------------------------------- public class XMLDeclarationInterimStageBusDataProviderV28 : XMLDeclarationVehicleDataProviderV20 diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs index 828a61afa9..982a95e1d4 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs @@ -142,4 +142,25 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + + public class XMLMultistagePrimaryVehicleBusTransmissionDataV01 : XMLGearDataV10 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "TransmissionGearPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLMultistagePrimaryVehicleBusTransmissionDataV01(XmlNode gearNode, string sourceFile) + : base(gearNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs index 5983e72dfd..451a81949c 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs @@ -38,7 +38,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLDeclarationVehicleData CreatePrimaryVehicleData( string version, IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode xmlNode, string sourceFile); - + + IXMLPrimaryVehicleBusInputData CreatePrimaryMultistageVehicleData( + string version, XmlNode xmlNode, string fileName); IXMLVehicleComponentsDeclaration CreateComponentData( diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataMultistageV01InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataMultistageV01InjectModule.cs index 218144ded1..9458e0723c 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataMultistageV01InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataMultistageV01InjectModule.cs @@ -1,6 +1,7 @@ using Ninject.Modules; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules @@ -23,6 +24,60 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules Bind<IXMLMultistageJobReader>().To<XMLMultistageJobReaderV01>() .Named(XMLMultistageJobReaderV01.QUALIFIED_XSD_TYPE); + + // ----------------------------------- + + Bind<IXMLPrimaryVehicleBusInputData>().To<XMLDeclarationMultistagePrimaryVehicleInputDataV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleInputDataV01.QUALIFIED_XSD_TYPE); + + + Bind<IXMLDeclarationPrimaryVehicleBusInputDataReader>().To<XMLMultistagePrimaryVehicleReaderV01>() + .Named(XMLMultistagePrimaryVehicleReaderV01.QUALIFIED_XSD_TYPE); + + + Bind<IXMLPrimaryVehicleBusJobInputData>().To<XMLDeclarationMultistagePrimaryVehicleBusJobInputDataProviderV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleBusJobInputDataProviderV01.QUALIFIED_XSD_TYPE); + + + Bind<IXMLJobDataReader>().To<XMLJobDataMultistagePrimaryVehicleReaderV01>() + .Named(XMLJobDataMultistagePrimaryVehicleReaderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationMultistagePrimaryVehicleBusDataProviderV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleBusDataProviderV01.QUALIFIED_XSD_TYPE); + + + // ----------------------------------- + + Bind<IXMLComponentReader>().To<XMLMultistagePrimaryVehicleBusComponentReaderV01>() + .Named(XMLMultistagePrimaryVehicleBusComponentReaderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLGearboxReader>().To<XMLMultistagePrimaryVehicleBusComponentReaderV01>() + .Named(XMLMultistagePrimaryVehicleBusComponentReaderV01.GEARBOX_READER_QUALIFIED_XSD_TYPE); + + Bind<IXMLVehicleComponentsDeclaration>() + .To<XMLDeclarationComponentsMultistagePrimaryVehicleBusDataProviderV01>() + .Named(XMLDeclarationComponentsMultistagePrimaryVehicleBusDataProviderV01.QUALIFIED_XSD_TYPE); + + // ----------------------------------- + + Bind<IXMLEngineDeclarationInputData>().To<XMLDeclarationMultistagePrimaryVehicleBusEngineDataProviderV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleBusEngineDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLGearboxDeclarationInputData>().To<XMLDeclarationMultistagePrimaryVehicleBusGearboxDataProviderV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleBusGearboxDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLGearData>().To<XMLMultistagePrimaryVehicleBusTransmissionDataV01>() + .Named(XMLMultistagePrimaryVehicleBusTransmissionDataV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLAxleGearInputData>().To<XMLDeclarationMultistagePrimaryVehicleBusAxlegearDataProviderV01>().Named( + XMLDeclarationMultistagePrimaryVehicleBusAxlegearDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLApplicationInformationData>().To<XMLDeclarationMultistagePrimaryVehicleBusApplicationInformationDataProviderV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleBusApplicationInformationDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLResultsInputData>().To<XMLDeclarationMultistagePrimaryVehicleBusResultsInputDataProviderV01>() + .Named(XMLDeclarationMultistagePrimaryVehicleBusResultsInputDataProviderV01.QUALIFIED_XSD_TYPE); + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs index 1487632fdd..cfd6db1ef7 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs @@ -412,6 +412,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } } + // --------------------------------------------------------------------------------------- + + public class XMLMultistagePrimaryVehicleBusComponentReaderV01 : XMLPrimaryVehicleBusComponentReaderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "VehicleComponentsPIFType"; + public new const string GEARBOX_READER_TYPE = "TransmissionDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + public new static readonly string GEARBOX_READER_QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, GEARBOX_READER_TYPE); + + public XMLMultistagePrimaryVehicleBusComponentReaderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentsNode) + : base(vehicle, componentsNode) { } + } + + // --------------------------------------------------------------------------------------- public class XMLComponentReaderNoAxlegearV26 : XMLComponentReaderV20 diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs index 0fd34e5e01..044778c991 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs @@ -94,7 +94,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl _primaryInputData = inputData; } - public IDeclarationJobInputData JobData + public virtual IDeclarationJobInputData JobData { get { diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs index 08aaea621a..0ce7ed3a3e 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -42,7 +42,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected virtual IDeclarationMultistageJobInputData JobCreator(string version, XmlNode node, string arg3) { - var job = Factory.CreateMultiStageJobData(version, BaseNode, InputData,"foo"); //(InputData as IXMLResource).DataSource.SourceFile); + var job = Factory.CreateMultiStageJobData(version, BaseNode, InputData, (InputData as IXMLResource).DataSource.SourceFile); job.Reader = Factory.CreateMultistageJobReader(version, job, JobNode); return job; @@ -60,21 +60,63 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); protected IXMLDeclarationMultistageJobInputData InputData; + protected IPrimaryVehicleInformationInputDataProvider _primaryVehicle; - public XMLMultistageJobReaderV01(IXMLDeclarationMultistageJobInputData inputData, XmlNode baseNode) : base( - inputData, baseNode) + + [Inject] + public IDeclarationInjectFactory Factory { protected get; set; } + + + + public XMLMultistageJobReaderV01(IXMLDeclarationMultistageJobInputData inputData, XmlNode baseNode) + : base(inputData, baseNode) { InputData = inputData; + } - public IPrimaryVehicleInformationInputDataProvider PrimaryVehicle { - get { return null; } + public IPrimaryVehicleInformationInputDataProvider PrimaryVehicle + { + get { return _primaryVehicle ?? (_primaryVehicle = CreateComponent(XMLNames.Bus_PrimaryVehicle, PrimaryVehicleCreator)); } } - public IList<IManufacturingStageInputData> ManufacturingStages { - get { + public IList<IManufacturingStageInputData> ManufacturingStages + { + get + { //InputData.ManufacturingStages.Select(x => CreateComponent(x, ManufacturingStageCreator)).ToList(); return null; } } + + protected IPrimaryVehicleInformationInputDataProvider PrimaryVehicleCreator(string version, XmlNode node, + string arg3) + { + var vehicle = Factory.CreatePrimaryMultistageVehicleData(version, node, arg3); + vehicle.Reader = Factory.CreatePrimaryVehicleBusInputReader(version, vehicle, node.FirstChild); + return vehicle; + } + } + + // --------------------------------------------------------------------------------------- + + + public class XMLMultistagePrimaryVehicleReaderV01 : XMLPrimaryVehicleBusInputReaderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "PrimaryVehicleDataType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLMultistagePrimaryVehicleReaderV01(IXMLPrimaryVehicleBusInputData inputData, XmlNode baseNode) + : base(inputData, baseNode) { } + + public override IDeclarationJobInputData JobData + { + get + { + return _jobData ?? (_jobData = CreateComponent(XMLNames.Tag_Vehicle, JobCreator)); + } + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs index 74bc6a042f..aabcb27d14 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs @@ -146,4 +146,21 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return vehicle; } } + + + // --------------------------------------------------------------------------------------- + + + public class XMLJobDataMultistagePrimaryVehicleReaderV01 : XMLJobDataPrimaryVehicleReaderV01 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; + + public new const string XSD_TYPE = "VehiclePIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLJobDataMultistagePrimaryVehicleReaderV01(IXMLPrimaryVehicleBusJobInputData busJobData, + XmlNode jobNode) : base(busJobData, jobNode) { } + } + } diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_primary_vehicle_stage_2_full.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_primary_vehicle_stage_2_full.xml index 449565cb38..7c67942acc 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_primary_vehicle_stage_2_full.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_primary_vehicle_stage_2_full.xml @@ -27,7 +27,7 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile <ZeroEmissionVehicle>false</ZeroEmissionVehicle> <ADAS xsi:type="v2.3:AdvancedDriverAssistantSystemsType"> <v2.3:EngineStopStart>true</v2.3:EngineStopStart> - <v2.3:EcoRollWithoutEngineStop>true</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> <v2.3:EcoRollWithEngineStop>true</v2.3:EcoRollWithEngineStop> <v2.3:PredictiveCruiseControl>1,2,3</v2.3:PredictiveCruiseControl> <v2.3:APTEcoRollReleaseLockupClutch>false</v2.3:APTEcoRollReleaseLockupClutch> @@ -213,7 +213,7 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile <Model>Generic Wheel</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> + <AppVersion>Tyre Generation App 1.1</AppVersion> <Dimension>315/70 R22.5</Dimension> <RRCDeclared>0.0055</RRCDeclared> <FzISO>31300</FzISO> diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs index 9e20550d2a..d0bb247370 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs @@ -2,13 +2,15 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Xml; using Ninject; using NUnit.Framework; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.Models.Declaration; namespace TUGraz.VectoCore.Tests.XML { @@ -35,10 +37,437 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = XmlReader.Create(VIF); var inputDataProvider = xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; - var vehicle = inputDataProvider.JobInputData.PrimaryVehicle; + TestPrimaryVehicleDataType(inputDataProvider.JobInputData.PrimaryVehicle); + + //var prodStages = inputDataProvider.JobInputData.ManufacturingStages; + } + + + private void TestPrimaryVehicleDataType(IPrimaryVehicleInformationInputDataProvider primaryVehicle) + { + TestVehicleData(primaryVehicle.Vehicle); + TestADASData(primaryVehicle.Vehicle.ADAS); + TestTorqueLimitsData(primaryVehicle.Vehicle.TorqueLimits); + TestComponentsData(primaryVehicle.Vehicle.Components); + TestInputDataSignature(primaryVehicle.PrimaryVehicleInputDataHash); + TestManufacturerRecordSignatureData(primaryVehicle.ManufacturerRecordHash); + TestApplicationInformationData(primaryVehicle.ApplicationInformation); + TestResultsData(primaryVehicle.ResultsInputData); + TestSignatureHashData(primaryVehicle.VehicleSignatureHash); + } + + + #region Vehicle Test Methods + + private void TestVehicleData(IVehicleDeclarationInputData vehicleData) + { + Assert.AreEqual("Generic Truck Manufacturer", vehicleData.Manufacturer); + Assert.AreEqual("Street, ZIP City", vehicleData.ManufacturerAddress); + Assert.AreEqual("Generic Model", vehicleData.Model); + Assert.AreEqual("VEH-1234567890_nonSmart-ESS", vehicleData.VIN); + Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date); + Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat()); + Assert.AreEqual(AxleConfiguration.AxleConfig_8x2, vehicleData.AxleConfiguration); + Assert.AreEqual(true, vehicleData.Articulated); + Assert.AreEqual(4000, vehicleData.GrossVehicleMassRating.Value()); + Assert.AreEqual(600, vehicleData.EngineIdleSpeed.AsRPM); + Assert.AreEqual("Transmission Output Retarder", vehicleData.Components.RetarderInputData.Type.ToXMLFormat()); + Assert.AreEqual("None", vehicleData.Components.AngledriveInputData.Type.ToXMLFormat()); + Assert.AreEqual(false, vehicleData.ZeroEmissionVehicle); + } + + private void TestADASData(IAdvancedDriverAssistantSystemDeclarationInputData adas) + { + Assert.AreEqual(true, adas.EngineStopStart); + Assert.AreEqual(EcoRollType.WithEngineStop, adas.EcoRoll); + Assert.AreEqual(PredictiveCruiseControlType.Option_1_2_3, adas.PredictiveCruiseControl); + Assert.AreEqual(false, adas.ATEcoRollReleaseLockupClutch); + } + + private void TestTorqueLimitsData(IList<ITorqueLimitInputData> torqueLimits) + { + Assert.AreEqual(3, torqueLimits.Count); + + Assert.AreEqual(6, torqueLimits[0].Gear); + Assert.AreEqual(1800, torqueLimits[0].MaxTorque.Value()); + + Assert.AreEqual(1, torqueLimits[1].Gear); + Assert.AreEqual(2500, torqueLimits[1].MaxTorque.Value()); + + Assert.AreEqual(12, torqueLimits[2].Gear); + Assert.AreEqual(1900, torqueLimits[2].MaxTorque.Value()); + } + + #endregion + + + private void TestComponentsData(IVehicleComponentsDeclaration vehicleComponents) + { + TestEngineData(vehicleComponents.EngineInputData); + TestTransmissionData(vehicleComponents.GearboxInputData); + TestAxelgearData(vehicleComponents.AxleGearInputData); + TestAxelWheelsData(vehicleComponents.AxleWheels); + TestAuxiliarieData(vehicleComponents.BusAuxiliaries); + } + #region Components Data Tests + + #region Engine Data Test + + private void TestEngineData(IEngineDeclarationInputData engineData) + { + Assert.AreEqual("Generic Engine Manufacturer", engineData.Manufacturer); + Assert.AreEqual("Bus 6x2", engineData.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", engineData.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), engineData.Date); + Assert.AreEqual("VectoEngine x.y", engineData.AppVersion); + Assert.AreEqual(12730.SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(), engineData.Displacement); + Assert.AreEqual(1800, engineData.RatedSpeedDeclared.AsRPM); + Assert.AreEqual(325032.SI<Watt>(), engineData.RatedPowerDeclared); + Assert.AreEqual(2134, engineData.MaxTorqueDeclared.Value()); + Assert.AreEqual(WHRType.ElectricalOutput, engineData.WHRType); + TestEngineModes(engineData.EngineModes); + } + + private void TestEngineModes(IList<IEngineModeDeclarationInputData> engineModes) + { + Assert.AreEqual(1, engineModes.Count); + Assert.AreEqual(600, engineModes[0].IdleSpeed.AsRPM); + + var fullLoadCurve = engineModes[0].FullLoadCurve; + var entryIndex = 0; + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("600.00", "1188.00", "-138.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("800.00", "1661.00", "-143.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("1000.00", "2134.00", "-152.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("1200.00", "2134.00", "-165.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("1400.00", "2134.00", "-187.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("1600.00", "1928.00", "-217.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("1800.00", "1722.00", "-244.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("2000.00", "1253.00", "-278.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("2100.00", "1019.00", "-296.00", fullLoadCurve, ref entryIndex)); + Assert.IsTrue(CheckFullLoadAndDragCurveEntry("2200.00", "0.00", "-314.00", fullLoadCurve, ref entryIndex)); - var prodStages = inputDataProvider.JobInputData.ManufacturingStages; + Assert.AreEqual(1, engineModes[0].Fuels.Count); + Assert.AreEqual(FuelType.DieselCI, engineModes[0].Fuels.First().FuelType); + } + + private bool CheckFullLoadAndDragCurveEntry(string engineSpeed, string maxTorque, string dragTorque, TableData loadCurve, ref int currentRow) + { + var result = engineSpeed == loadCurve.Rows[currentRow][0].ToString() && + maxTorque == loadCurve.Rows[currentRow][1].ToString() && + dragTorque == loadCurve.Rows[currentRow][2].ToString(); + + currentRow++; + return result; + } + + #endregion + + #region Transmission Data Test + + private void TestTransmissionData(IGearboxDeclarationInputData transmissionData) + { + Assert.AreEqual("Generic Gearbox Manufacturer", transmissionData.Manufacturer); + Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", transmissionData.Model); + Assert.AreEqual(CertificationMethod.StandardValues, transmissionData.CertificationMethod); + Assert.AreEqual(DateTime.Parse("2017-01-11T11:00:00Z").ToUniversalTime(), transmissionData.Date); + Assert.AreEqual("3.0.1", transmissionData.AppVersion); + Assert.AreEqual(GearboxType.AMT, transmissionData.Type); + Assert.AreEqual(12, transmissionData.Gears.Count); + + var entryIndex = 0; + Assert.IsTrue(CheckTransmissionGear(1, 14.930, 1900, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(2, 11.640, 1900, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(3, 9.020, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(4, 7.040, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(5, 5.640, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(6, 4.400, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(7, 3.390, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(8, 2.650, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(9, 2.050, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(10, 1.600, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(11, 1.280, null, 2000, transmissionData.Gears[entryIndex], ref entryIndex)); + Assert.IsTrue(CheckTransmissionGear(12, 1.000, null, null, transmissionData.Gears[entryIndex], ref entryIndex)); + } + + private bool CheckTransmissionGear(int gear, double ratio, int? maxTorque, double? maxSpeed, ITransmissionInputData entry, ref int entryIndex) + { + Assert.AreEqual(gear, entry.Gear); + Assert.AreEqual(ratio, entry.Ratio); + + if(maxTorque == null) + Assert.IsNull(entry.MaxTorque); + else + Assert.AreEqual(((int) maxTorque).SI<NewtonMeter>(), entry.MaxTorque); + + if(maxSpeed == null) + Assert.IsNull(entry.MaxInputSpeed); + else + Assert.AreEqual((double)maxSpeed, entry.MaxInputSpeed.AsRPM, 1e-6); + + entryIndex++; + return true; + } + + #endregion + + #region Axelgear Test + private void TestAxelgearData(IAxleGearInputData axelgearData) + { + Assert.AreEqual("Generic Gearbox Manufacturer", axelgearData.Manufacturer); + Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axelgearData.Model); + Assert.AreEqual(CertificationMethod.StandardValues, axelgearData.CertificationMethod); + Assert.AreEqual(DateTime.Parse("2017-01-11T11:00:00Z").ToUniversalTime(), axelgearData.Date); + Assert.AreEqual("3.0.1", axelgearData.AppVersion); + Assert.AreEqual(AxleLineType.SinglePortalAxle, axelgearData.LineType); + Assert.AreEqual(2.590, axelgearData.Ratio); + } + + #endregion + + #region AxleWheels Data Test + private void TestAxelWheelsData(IAxlesDeclarationInputData axelWheels) + { + Assert.AreEqual(3, axelWheels.AxlesDeclaration.Count); + + var entry = axelWheels.AxlesDeclaration[0]; + Assert.AreEqual(AxleType.VehicleNonDriven, entry.AxleType); + Assert.AreEqual(false, entry.TwinTyres); + + var tyre1 = entry.Tyre; + Assert.AreEqual("Generic Wheels Manufacturer", tyre1.Manufacturer); + Assert.AreEqual("Generic Wheel", tyre1.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", tyre1.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T14:00:00Z").ToUniversalTime(), tyre1.Date); + Assert.AreEqual("Tyre Generation App 1.0", tyre1.AppVersion); + Assert.AreEqual("315/70 R22.5", tyre1.Dimension); + Assert.AreEqual(0.0055, tyre1.RollResistanceCoefficient); + Assert.AreEqual(31300, tyre1.TyreTestLoad.Value());//85% of the maximum tyre payload + + Assert.AreEqual("#WHL-5432198760-315-70-R22.5", tyre1.DigestValue.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", tyre1.DigestValue.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", tyre1.DigestValue.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", tyre1.DigestValue.DigestMethod); + Assert.AreEqual("4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=", tyre1.DigestValue.DigestValue); + + + entry = axelWheels.AxlesDeclaration[1]; + Assert.AreEqual(AxleType.VehicleDriven, entry.AxleType); + Assert.AreEqual(true, entry.TwinTyres); + + var tyre2 = entry.Tyre; + Assert.AreEqual("Generic Wheels Manufacturer", tyre2.Manufacturer); + Assert.AreEqual("Generic Wheel", tyre2.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", tyre2.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T14:00:00Z").ToUniversalTime(), tyre2.Date); + Assert.AreEqual("Tyre Generation App 1.0", tyre2.AppVersion); + Assert.AreEqual("315/70 R22.5", tyre2.Dimension); + Assert.AreEqual(0.0063, tyre2.RollResistanceCoefficient); + Assert.AreEqual(31300, tyre2.TyreTestLoad.Value()); + + Assert.AreEqual("#WHL-5432198760-315-70-R22.5", tyre2.DigestValue.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", tyre2.DigestValue.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", tyre2.DigestValue.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", tyre2.DigestValue.DigestMethod); + Assert.AreEqual("KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=", tyre2.DigestValue.DigestValue); + + entry = axelWheels.AxlesDeclaration[2]; + Assert.AreEqual(AxleType.VehicleNonDriven, entry.AxleType); + Assert.AreEqual(false, entry.TwinTyres); + var tyre3 = entry.Tyre; + Assert.AreEqual("Generic Wheels Manufacturer", tyre3.Manufacturer); + Assert.AreEqual("Generic Wheel", tyre3.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", tyre3.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T14:00:00Z").ToUniversalTime(), tyre3.Date); + Assert.AreEqual("Tyre Generation App 1.1", tyre3.AppVersion); + Assert.AreEqual("315/70 R22.5", tyre3.Dimension); + Assert.AreEqual(0.0055, tyre3.RollResistanceCoefficient); + Assert.AreEqual(31300, tyre3.TyreTestLoad.Value()); + + Assert.AreEqual("#WHL-5432198760-315-70-R22.5", tyre3.DigestValue.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", tyre3.DigestValue.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", tyre3.DigestValue.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", tyre3.DigestValue.DigestMethod); + Assert.AreEqual("4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=", tyre3.DigestValue.DigestValue); + } + + + #endregion + + #region Auxiliaries Test + private void TestAuxiliarieData(IBusAuxiliariesDeclarationData aux) + { + Assert.AreEqual("Hydraulic driven - Constant displacement pump", aux.FanTechnology); + + Assert.AreEqual(1, aux.SteeringPumpTechnology.Count); + Assert.AreEqual("Variable displacement elec. controlled", aux.SteeringPumpTechnology[0]); + + Assert.AreEqual(1, aux.ElectricSupply.Alternators.Count); + Assert.AreEqual("default", aux.ElectricSupply.Alternators[0].Technology); + Assert.AreEqual(true, aux.ElectricSupply.SmartElectrics); + Assert.AreEqual(15000, aux.ElectricSupply.MaxAlternatorPower.Value()); + Assert.AreEqual(50.SI(Unit.SI.Watt.Hour).Cast<WattSecond>(), aux.ElectricSupply.ElectricStorageCapacity); + + Assert.AreEqual("Large Supply 2-stage", aux.PneumaticSupply.CompressorSize); + Assert.AreEqual("none", aux.PneumaticSupply.Clutch); + Assert.AreEqual(1.000, aux.PneumaticSupply.Ratio); + Assert.AreEqual(true, aux.PneumaticSupply.SmartAirCompression); + Assert.AreEqual(false, aux.PneumaticSupply.SmartRegeneration); + Assert.AreEqual(ConsumerTechnology.Electrically, aux.PneumaticConsumers.AirsuspensionControl); + Assert.AreEqual(ConsumerTechnology.Electrically, aux.PneumaticConsumers.AirsuspensionControl); + Assert.AreEqual(ConsumerTechnology.Pneumatically, aux.PneumaticConsumers.AdBlueDosing); + + Assert.AreEqual(true, aux.HVACAux.AdjustableCoolantThermostat); + Assert.AreEqual(true, aux.HVACAux.EngineWasteGasHeatExchanger); + } + + #endregion + + #endregion + + #region Input Data Signature Test + + private void TestInputDataSignature(DigestData data) + { + Assert.AreEqual("#VEH-PrimaryBus_SmartPS", data.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", data.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", data.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", data.DigestMethod); + Assert.AreEqual("uqcFIXtDYxvl513ruiYYJCrV1fIiyw37t8vJhg4xxoo=", data.DigestValue); + } + + #endregion + + #region Input Data Manufacturer Signature Test + + private void TestManufacturerRecordSignatureData(DigestData data) + { + Assert.AreEqual("#RESULT-5f30c7fe665a47938f6b", data.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", data.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", data.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", data.DigestMethod); + Assert.AreEqual("KUpFCKh1bu/YPwYj36kJK1uCrv++BTLf2OUZcOt43Os=", data.DigestValue); + } + + #endregion + + #region Application Information Test + + private void TestApplicationInformationData(IApplicationInformation appInfo) + { + Assert.AreEqual("String", appInfo.SimulationToolVersion); + Assert.AreEqual(DateTime.Parse("2017-01-01T00:00:00Z").ToUniversalTime(), appInfo.Date); + } + + #endregion + + #region Results Data Test + + private void TestResultsData(IResultsInputData data) + { + Assert.AreEqual("success", data.Status); + Assert.AreEqual(22, data.Results.Count); + + var index = 0; + CheckResultData(VehicleClass.ClassP33SD, MissionType.HeavyUrban, 21.22359, data.Results[index]); + CheckSimulationParameters(15527.52, 1352.52, 19.89, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.HeavyUrban, 25.40945, data.Results[index]); + CheckSimulationParameters(20937.60, 6762.60, 99.45, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.Urban, 16.74101, data.Results[index]); + CheckSimulationParameters(15527.52, 1352.52, 19.89, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.Urban, 20.24221, data.Results[index]); + CheckSimulationParameters(20937.60, 6762.60, 99.45, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.Suburban, 14.34578, data.Results[index]); + CheckSimulationParameters(15527.52, 1352.52, 19.89, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.Suburban, 17.60016, data.Results[index]); + CheckSimulationParameters(20937.60, 6762.60, 99.45, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.Interurban, 11.82313, data.Results[index]); + CheckSimulationParameters(15469.51, 1294.51, 18.23, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33SD, MissionType.Interurban, 13.24283, data.Results[index]); + CheckSimulationParameters(18411.57, 4236.57, 59.67, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33DD, MissionType.HeavyUrban, 22.72091, data.Results[index]); + CheckSimulationParameters(16303.29, 1578.29, 23.21, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33DD, MissionType.HeavyUrban, 27.95930, data.Results[index]); + CheckSimulationParameters(22616.43, 7891.43, 116.05, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33DD, MissionType.Urban, 17.90756, data.Results[index]); + CheckSimulationParameters(16303.29, 1578.29, 23.21, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33DD, MissionType.Urban, 22.23796, data.Results[index]); + CheckSimulationParameters(22616.43, 7891.43, 116.05, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33DD, MissionType.Suburban, 15.28035, data.Results[index]); + CheckSimulationParameters(16303.29, 1578.29, 23.21, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP33DD, MissionType.Suburban, 19.26201, data.Results[index]); + CheckSimulationParameters(22616.43, 7891.43, 116.05, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34SD, MissionType.Interurban, 11.93701, data.Results[index]); + CheckSimulationParameters(16467.68, 1254.68, 17.67, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34SD, MissionType.Interurban, 13.32341, data.Results[index]); + CheckSimulationParameters(19319.21, 4106.21, 57.83, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34SD, MissionType.Coach, 8.71847, data.Results[index]); + CheckSimulationParameters(16490.49, 1277.49, 17.99, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34SD, MissionType.Coach, 9.20255, data.Results[index]); + CheckSimulationParameters(18406.72, 3193.72, 44.98, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34DD, MissionType.Interurban, 13.58335, data.Results[index]); + CheckSimulationParameters(19588.08, 1738.08, 24.48, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34DD, MissionType.Interurban, 15.56740, data.Results[index]); + CheckSimulationParameters(23643.60, 5793.60, 81.60, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34DD, MissionType.Coach, 9.82937, data.Results[index]); + CheckSimulationParameters(19703.95, 1853.95, 26.11, "single fuel mode", data.Results[index], ref index); + + CheckResultData(VehicleClass.ClassP34DD, MissionType.Coach, 10.56728, data.Results[index]); + CheckSimulationParameters(22484.88, 4634.88, 65.28, "single fuel mode", data.Results[index], ref index); + } + + private void CheckResultData(VehicleClass vGroup, MissionType mission, double energyCon, IResult result) + { + Assert.AreEqual(vGroup, result.VehicleGroup); + Assert.AreEqual(mission, result.Mission); + Assert.AreEqual(FuelType.DieselCI, result.EnergyConsumption.First().Key); + energyCon = energyCon * 1000; + Assert.AreEqual(energyCon.SI<JoulePerMeter>(), result.EnergyConsumption.First().Value); + } + + private void CheckSimulationParameters(double totalMass, double payload, double passenger, string fuelMode, IResult result, ref int index) + { + Assert.AreEqual(totalMass.SI<Kilogram>(), result.SimulationParameter.TotalVehicleMass); + Assert.AreEqual(payload.SI<Kilogram>(), result.SimulationParameter.Payload); + Assert.AreEqual(passenger, result.SimulationParameter.PassengerCount); + Assert.AreEqual(fuelMode, result.SimulationParameter.FuelMode); + + index++; + } + + #endregion + + #region Signature Test + + private void TestSignatureHashData(DigestData data) + { + Assert.AreEqual("#PIF-d10aff76c5d149948046", data.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", data.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", data.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", data.DigestMethod); + Assert.AreEqual("nI+57QQtWA2rFqJTZ41t0XrXcJbcGmc7j4E66iGJyT0=", data.DigestValue); } + + #endregion } } -- GitLab