From ad8d44e31130d382793d1fbdfeb7a9f6b78bca24 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at> Date: Thu, 1 Apr 2021 00:07:43 +0200 Subject: [PATCH] consolidated multistages implementation added --- .../InputData/IInputDataProvider.cs | 4 + ...MLDeclarationBusAuxiliariesDataProvider.cs | 26 +- .../XMLDeclarationMultistageInputData.cs | 47 + .../XMLDeclarationVehicleDataProvider.cs | 11 +- .../IXMLDeclarationInputDataReader.cs | 5 + .../XMLDeclarationMultistageInputReader.cs | 880 +++++++++++++++++- VectoCore/VectoCoreTest/VectoCoreTest.csproj | 12 + ...LMultistageBusConsolidatedInputDataTest.cs | 190 ++++ .../XML/XMLMultistageBusInputDataTest.cs | 21 +- 9 files changed, 1149 insertions(+), 47 deletions(-) create mode 100644 VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index cca4222667..802f0b1b96 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -99,6 +99,10 @@ namespace TUGraz.VectoCommon.InputData IPrimaryVehicleInformationInputDataProvider PrimaryVehicle { get; } IList<IManufacturingStageInputData> ManufacturingStages { get; } + + IManufacturingStageInputData ConsolidateManufacturingStage { get; } + + bool InputComplete { get; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index c454b9f7ea..3cdf1d8642 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -349,7 +349,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public XMLDeclarationCompleteBusAuxiliariesDataProviderV28(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) - : base(vehicle, componentNode, sourceFile) { } + : base(vehicle, componentNode, sourceFile) {} + + private bool IsBusHVACTagEmpty() + { + return SystemConfiguration == null && HeatPumpTypeDriverCompartment == null && HeatPumpModeDriverCompartment == null && + HeatPumpTypePassengerCompartment == null && HeatPumpModePassengerCompartment == null && AuxHeaterPower == null && + DoubleGlazing == null && AdjustableAuxiliaryHeater == null && SeparateAirDistributionDucts == null && + WaterElectricHeater == null && AirElectricHeater == null && OtherHeatingTechnology == null ; + } + + public override IHVACBusAuxiliariesDeclarationData HVACAux + { + get { return IsBusHVACTagEmpty() ? null : this; } + } public override BusHVACSystemConfiguration? SystemConfiguration @@ -458,6 +471,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + private bool IsElectricConsumersTagEmpty() + { + return InteriorLightsLED == null && DayrunninglightsLED == null && PositionlightsLED == null && + HeadlightsLED == null && BrakelightsLED == null; + } + + + public override IElectricConsumersDeclarationData ElectricConsumers + { + get { return IsElectricConsumersTagEmpty() ? null : this; } + } public override bool? InteriorLightsLED { diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs index f45ee74cac..5919110af9 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationMultistageInputData.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Xml; using System.Xml.Linq; +using Ninject; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; @@ -79,6 +80,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider private IPrimaryVehicleInformationInputDataProvider _primaryVehicle; private IList<IManufacturingStageInputData> _manufacturingStages; + private IManufacturingStageInputData _concolidateManfacturingStage; public XMLDeclarationMultistageJobInputDataV01(XmlNode node, IXMLMultistageInputDataProvider inputProvider, @@ -98,6 +100,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return _manufacturingStages ?? (_manufacturingStages = Reader.ManufacturingStages); } } + public IManufacturingStageInputData ConsolidateManufacturingStage + { + get { return _concolidateManfacturingStage ?? (_concolidateManfacturingStage = Reader.ConsolidateManufacturingStage); } + } + + public bool InputComplete + { + get { return Reader.InputComplete; } + } + public IXMLMultistageJobReader Reader { protected get; set; } public IXMLMultistageInputDataProvider InputData { get; } @@ -268,4 +280,39 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public IXMLMultistageReader Reader { protected get; set; } } + + // --------------------------------------------------------------------------------------- + + + public class XMLDeclarationVIFInputData : IMultistageVIFInputData + { + + private readonly IXMLInputDataReader _xmlInputReader; + + public XMLDeclarationVIFInputData(string vifFileName, IVehicleDeclarationInputData vehicleInput) + { + + var kernel = new StandardKernel(new VectoNinjectModule()); + _xmlInputReader = kernel.Get<IXMLInputDataReader>(); + + VehicleInputData = vehicleInput; + MultistageInputData = CreateMultistageReader(vifFileName); + } + + + private IMultistageBusInputDataProvider CreateMultistageReader(string vifFileName) + { + var reader = XmlReader.Create(vifFileName); + return _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + } + + + public DataSource DataSource + { + get { return null; } + } + public IVehicleDeclarationInputData VehicleInputData { get; } + public IMultistageBusInputDataProvider MultistageInputData { get; } + } + } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index c23c943f06..da8ada2f47 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -1336,13 +1336,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + + public override IVehicleComponentsDeclaration Components { get { if (ComponentNode == null) return null; - return _components ?? (_components = ComponentReader.ComponentInputData); + + if(_components == null) + _components = ComponentReader.ComponentInputData; + + if (_components.BusAuxiliaries == null && _components.AirdragInputData == null) + return null; + + return _components; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs index 7ced5f8e6b..aa47260eab 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs @@ -28,6 +28,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration IPrimaryVehicleInformationInputDataProvider PrimaryVehicle { get; } IList<IManufacturingStageInputData> ManufacturingStages { get; } + + IManufacturingStageInputData ConsolidateManufacturingStage { get; } + + bool InputComplete { get; } + } public interface IXMLMultistageReader 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 22f586ff33..baef09e2f0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -1,10 +1,15 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using System.Xml; using System.Xml.Linq; using Castle.Core.Internal; using Ninject; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Utils; @@ -63,6 +68,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected IXMLDeclarationMultistageJobInputData InputData; protected IPrimaryVehicleInformationInputDataProvider _primaryVehicle; protected IList<IManufacturingStageInputData> _manufacturingStages; + protected ConsolidateManufacturingStages _consolidateManufacturingStages; private XmlNodeList _manufacturingNodeStages; @@ -77,12 +83,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl InputData = inputData; SetManufacturingStageNodes(); } - + public IPrimaryVehicleInformationInputDataProvider PrimaryVehicle { get { return _primaryVehicle ?? (_primaryVehicle = CreateComponent(XMLNames.Bus_PrimaryVehicle, PrimaryVehicleCreator)); } } + protected IPrimaryVehicleInformationInputDataProvider PrimaryVehicleCreator(string version, XmlNode node, + string arg3) + { + var primaryVehicle = Factory.CreatePrimaryMultistageVehicleData(version, node, arg3); + primaryVehicle.Reader = Factory.CreatePrimaryVehicleBusInputReader(version, primaryVehicle, node.FirstChild); + return primaryVehicle; + } + public IList<IManufacturingStageInputData> ManufacturingStages { get @@ -94,25 +108,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } } - protected IPrimaryVehicleInformationInputDataProvider PrimaryVehicleCreator(string version, XmlNode node, - string arg3) - { - var primaryVehicle = Factory.CreatePrimaryMultistageVehicleData(version, node, arg3); - primaryVehicle.Reader = Factory.CreatePrimaryVehicleBusInputReader(version, primaryVehicle, node.FirstChild); - return primaryVehicle; - } - private IList<IManufacturingStageInputData> ManufacturingStagesCreator() { var stages = new List<IManufacturingStageInputData>(); - foreach (XmlNode manufacturingNodeStage in _manufacturingNodeStages) { + foreach (XmlNode manufacturingNodeStage in _manufacturingNodeStages) + { var version = XMLHelper.GetXsdType(manufacturingNodeStage?.SchemaInfo.SchemaType); stages.Add(ManufacturingStageCreator(version, manufacturingNodeStage)); } return stages; } - + protected IManufacturingStageInputData ManufacturingStageCreator(string version, XmlNode node) { var stage = Factory.CreateMultistageData(version, node, null); @@ -120,6 +127,38 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return stage; } + public IManufacturingStageInputData ConsolidateManufacturingStage + { + get + { + if (ManufacturingStages.IsNullOrEmpty()) + return null; + + return _consolidateManufacturingStages ?? + (_consolidateManufacturingStages = GetConsolidateManufacturingStage()); + } + } + + public bool InputComplete + { + get + { + if (ManufacturingStages.IsNullOrEmpty()) + return false; + + if(_consolidateManufacturingStages == null) + _consolidateManufacturingStages = GetConsolidateManufacturingStage(); + + return _consolidateManufacturingStages.IsInputDataComplete(); + } + } + + private ConsolidateManufacturingStages GetConsolidateManufacturingStage() + { + return new ConsolidateManufacturingStages(ManufacturingStages); + } + + private void SetManufacturingStageNodes() { _manufacturingNodeStages = BaseNode.SelectNodes(XMLHelper.QueryLocalName(XMLNames.ManufacturingStage)); @@ -127,7 +166,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } // --------------------------------------------------------------------------------------- - + public class XMLMultistageEntryReaderV01 : AbstractComponentReader, IXMLMultistageReader { public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1; @@ -136,7 +175,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + protected readonly XmlNode JobNode; protected readonly IXMLMultistageEntryInputDataProvider _multistageData; protected IApplicationInformation _applicationInformation; @@ -151,7 +190,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl JobNode = node; _multistageData = multistageData; } - + public IVehicleDeclarationInputData Vehicle { get { return _vehicle ?? (_vehicle = CreateComponent(XMLNames.Tag_Vehicle, VehicleCreator)); } @@ -161,17 +200,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl { var vehicle = Factory.CreateVehicleData(version, null, node, arg3); - if(vehicle.ComponentNode != null) + if (vehicle.ComponentNode != null) vehicle.ComponentReader = GetReader(vehicle, vehicle.ComponentNode, Factory.CreateComponentReader); - - if(vehicle.ADASNode != null) + + if (vehicle.ADASNode != null) vehicle.ADASReader = GetReader(vehicle, vehicle.ADASNode, Factory.CreateADASReader); - + return vehicle; } - public IApplicationInformation ApplicationInformation - { + public IApplicationInformation ApplicationInformation + { get { return _applicationInformation ?? @@ -189,7 +228,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return xmlNode == null ? null : new DigestData(xmlNode); } } - + // --------------------------------------------------------------------------------------- @@ -201,7 +240,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public const string XSD_TYPE = "PrimaryVehicleDataType"; public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - + protected XmlNode JobNode; protected IDeclarationJobInputData _jobData; protected IXMLPrimaryVehicleBusInputData _primaryInputData; @@ -234,7 +273,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl job.Reader = Factory.CreatePrimaryVehicleJobReader(version, job, JobNode); return job; } - + public IResultsInputData ResultsInputData { get @@ -248,17 +287,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl { return Factory.CreateResultsInputDataReader(version, node); } - + public DigestData GetDigestData(XmlNode xmlNode) { return xmlNode == null ? null : new DigestData(xmlNode); } - + protected IApplicationInformation ApplicationCreator(string version, XmlNode node, string agr3) { return Factory.CreateApplicationInformationReader(version, node); } - + public IApplicationInformation ApplicationInformation { get @@ -268,4 +307,791 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } } } + + // --------------------------------------------------------------------------------------- + + + + public abstract class ConsolidatedDataBase + { + protected readonly IList<IManufacturingStageInputData> _manufacturingStages; + + public ConsolidatedDataBase(IList<IManufacturingStageInputData> manufacturingStages) + { + _manufacturingStages = manufacturingStages; + } + + protected T GetPropertyValue<T>(object obj, string name) + { + var propertyValue = GetPropertyValue(obj, name); + if (propertyValue == null) + return default; + + return (T)propertyValue; + } + + protected object GetPropertyValue(object obj, string name) + { + foreach (var part in name.Split('.')) + { + if (obj == null) { return null; } + + var type = obj.GetType(); + var info = type.GetProperty(part); + if (info == null) { return null; } + + obj = info.GetValue(obj, null); + } + return obj; + } + + public abstract bool IsInputDataComplete(); + } + + public class ConsolidateManufacturingStages : ConsolidatedDataBase, IManufacturingStageInputData + { + + private ConsolidatedVehicleData _consolidatedVehicleData; + + public ConsolidateManufacturingStages(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + public DigestData HashPreviousStage + { + get { return _manufacturingStages.Last().HashPreviousStage; } + } + + public int StageCount + { + get { return _manufacturingStages.Last().StageCount; } + } + + public IVehicleDeclarationInputData Vehicle + { + get + { + return _consolidatedVehicleData ?? + (_consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages)); + } + } + + public IApplicationInformation ApplicationInformation + { + get { return _manufacturingStages.Last().ApplicationInformation; } + } + + public DigestData Signature + { + get { return _manufacturingStages.Last().Signature; } + } + + public override bool IsInputDataComplete() + { + if (_consolidatedVehicleData == null) + _consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages); + + return _consolidatedVehicleData.IsInputDataComplete(); + } + } + + + public class ConsolidatedVehicleData : ConsolidatedDataBase, IVehicleDeclarationInputData + { + private ConsolidatedADASData _consolidatedADAS; + private ConsolidatedComponentData _consolidatedComponents; + + public ConsolidatedVehicleData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + #region ManufacturingStage mandatory properties + + public string Manufacturer + { + get { return _manufacturingStages.Last().Vehicle.Manufacturer; } + } + + public string ManufacturerAddress + { + get { return _manufacturingStages.Last().Vehicle.ManufacturerAddress; } + } + + public DateTime Date + { + get { return _manufacturingStages.Last().Vehicle.Date; } + } + + public string VIN + { + get { return _manufacturingStages.Last().Vehicle.VIN; } + } + + public VehicleDeclarationType VehicleDeclarationType + { + get { return _manufacturingStages.Last().Vehicle.VehicleDeclarationType; } + } + + #endregion + + #region ManufacturingStage optional properties + + public string Model + { + get { return GetVehiclePropertyValue<string>(nameof(Model)); } + } + + public LegislativeClass? LegislativeClass + { + get { return GetVehiclePropertyValue<LegislativeClass?>(nameof(LegislativeClass)); } + } + + public Kilogram CurbMassChassis + { + get { return GetVehiclePropertyValue<Kilogram>(nameof(CurbMassChassis)); } + } + + public Kilogram GrossVehicleMassRating + { + get + { + return GetVehiclePropertyValue<Kilogram>(nameof(GrossVehicleMassRating)); + } + } + + public bool? AirdragModifiedMultistage + { + get + { + return GetVehiclePropertyValue<bool?>(nameof(AirdragModifiedMultistage)); + } + } + + public TankSystem? TankSystem + { + get { return GetVehiclePropertyValue<TankSystem?>(nameof(TankSystem)); } + } + + public RegistrationClass? RegisteredClass + { + get { return GetVehiclePropertyValue<RegistrationClass?>(nameof(RegisteredClass)); } + } + + + public int? NumberOfPassengersUpperDeck + { + get + { + return GetVehiclePropertyValue<int?>(nameof(NumberOfPassengersUpperDeck)); + } + } + + public int? NumberOfPassengersLowerDeck + { + get + { + return GetVehiclePropertyValue<int?>(nameof(NumberOfPassengersLowerDeck)); + } + } + + public VehicleCode? VehicleCode + { + get { return GetVehiclePropertyValue<VehicleCode?>(nameof(VehicleCode)); } + } + + public bool? LowEntry + { + get { return GetVehiclePropertyValue<bool?>(nameof(LowEntry)); } + } + + public Meter Height + { + get { return GetVehiclePropertyValue<Meter>(nameof(Height)); } + } + + public Meter Length + { + get { return GetVehiclePropertyValue<Meter>(nameof(Length)); } + } + + public Meter Width + { + get { return GetVehiclePropertyValue<Meter>(nameof(Width)); } + } + + public Meter EntranceHeight + { + get { return GetVehiclePropertyValue<Meter>(nameof(EntranceHeight)); } + } + + public ConsumerTechnology? DoorDriveTechnology + { + get { return GetVehiclePropertyValue<ConsumerTechnology?>(nameof(DoorDriveTechnology)); } + + } + + public IAdvancedDriverAssistantSystemDeclarationInputData ADAS + { + get + { + if (GetVehiclePropertyValue<IAdvancedDriverAssistantSystemDeclarationInputData>(nameof(ADAS)) == null) + return null; + + return _consolidatedADAS + ?? (_consolidatedADAS = new ConsolidatedADASData(_manufacturingStages)); + } + } + + public IVehicleComponentsDeclaration Components + { + get + { + if (GetVehiclePropertyValue<IVehicleComponentsDeclaration>(nameof(Components)) == null) + return null; + + return _consolidatedComponents + ?? (_consolidatedComponents = new ConsolidatedComponentData(_manufacturingStages)); + + } + } + + #endregion + + #region Non set IVehicleDeclarationInputData interface properties + + public DataSource DataSource { get; } + public bool SavedInDeclarationMode { get; } + public string AppVersion { get; } + public CertificationMethod CertificationMethod { get; } + public string CertificationNumber { get; } + public DigestData DigestValue { get; } + public string Identifier { get; } + public bool ExemptedVehicle { get; } + public VehicleCategory VehicleCategory { get; } + public AxleConfiguration AxleConfiguration { get; } + public IList<ITorqueLimitInputData> TorqueLimits { get; } + + public PerSecond EngineIdleSpeed { get; } + public bool VocationalVehicle { get; } + public bool SleeperCab { get; } + public bool ZeroEmissionVehicle { get; } + public bool HybridElectricHDV { get; } + public bool DualFuelVehicle { get; } + public Watt MaxNetPower1 { get; } + public Watt MaxNetPower2 { get; } + public CubicMeter CargoVolume { get; } + public bool Articulated { get; } + + public XmlNode XMLSource { get; } + + #endregion + + private T GetVehiclePropertyValue<T>(string propertyName) + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var value = GetPropertyValue<T>(_manufacturingStages[i].Vehicle, propertyName); + if (value != null) + return value; + } + return default; + } + + public override bool IsInputDataComplete() + { + return Model != null && LegislativeClass != null && CurbMassChassis != null && GrossVehicleMassRating != null + && AirdragModifiedMultistage != null && TankSystem != null && RegisteredClass != null + && NumberOfPassengersLowerDeck != null && NumberOfPassengersUpperDeck != null && VehicleCode != null + && LowEntry != null && Height != null && Length != null && Width != null && EntranceHeight != null + && DoorDriveTechnology != null && _consolidatedADAS != null && _consolidatedADAS.IsInputDataComplete() + && _consolidatedComponents != null && _consolidatedComponents.IsInputDataComplete(); + } + } + + + public class ConsolidatedADASData : ConsolidatedDataBase, IAdvancedDriverAssistantSystemDeclarationInputData + { + public ConsolidatedADASData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + public bool EngineStopStart + { + get { return GetADASPropertyValue<bool>(nameof(EngineStopStart)); } + } + + public EcoRollType EcoRoll + { + get { return GetADASPropertyValue<EcoRollType>(nameof(EcoRoll)); } + } + + public PredictiveCruiseControlType PredictiveCruiseControl + { + get { return GetADASPropertyValue<PredictiveCruiseControlType>(nameof(PredictiveCruiseControl)); } + } + + public bool? ATEcoRollReleaseLockupClutch + { + get { return GetADASPropertyValue<bool?>(nameof(ATEcoRollReleaseLockupClutch)); } + } + + public XmlNode XMLSource { get; } + + + private T GetADASPropertyValue<T>(string propertyName) + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var adas = _manufacturingStages[i].Vehicle.ADAS; + if (adas == null) + continue; + var value = GetPropertyValue<T>(adas, propertyName); + if (value != null) + return value; + } + + return default; + } + + public override bool IsInputDataComplete() + { + return ATEcoRollReleaseLockupClutch != null; + } + } + + public class ConsolidatedComponentData : ConsolidatedDataBase, IVehicleComponentsDeclaration + { + private ConsolidatedAirdragData _consolidateAirdragData; + private ConsolidatedBusAuxiliariesData _consolidateBusAuxiliariesData; + + public ConsolidatedComponentData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + + public IAirdragDeclarationInputData AirdragInputData + { + get + { + if (GetComponentPropertyValue<IAirdragDeclarationInputData>(nameof(AirdragInputData)) == null) + return null; + + return _consolidateAirdragData ?? + (_consolidateAirdragData = new ConsolidatedAirdragData(_manufacturingStages)); + } + } + public IGearboxDeclarationInputData GearboxInputData + { + get { return null; } + } + public ITorqueConverterDeclarationInputData TorqueConverterInputData + { + get { return null; } + } + public IAxleGearInputData AxleGearInputData + { + get { return null; } + } + public IAngledriveInputData AngledriveInputData + { + get { return null; } + } + public IEngineDeclarationInputData EngineInputData + { + get { return null; } + } + public IAuxiliariesDeclarationInputData AuxiliaryInputData + { + get { return null; } + } + public IRetarderInputData RetarderInputData + { + get { return null; } + } + public IPTOTransmissionInputData PTOTransmissionInputData + { + get { return null; } + } + public IAxlesDeclarationInputData AxleWheels + { + get { return null; } + } + + public IBusAuxiliariesDeclarationData BusAuxiliaries + { + get + { + if (GetComponentPropertyValue<IBusAuxiliariesDeclarationData>(nameof(BusAuxiliaries)) == null) + return null; + + return _consolidateBusAuxiliariesData ?? + (_consolidateBusAuxiliariesData = new ConsolidatedBusAuxiliariesData(_manufacturingStages)); + } + } + public IElectricStorageDeclarationInputData ElectricStorage + { + get { return null; } + } + public IElectricMachinesDeclarationInputData ElectricMachines + { + get { return null; } + } + + private T GetComponentPropertyValue<T>(string propertyName) + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var component = _manufacturingStages[i].Vehicle?.Components; + if (component == null) + continue; + var value = GetPropertyValue<T>(component, propertyName); + if (value != null) + return value; + } + + return default; + } + + + public override bool IsInputDataComplete() + { + return _consolidateBusAuxiliariesData != null && _consolidateBusAuxiliariesData.IsInputDataComplete(); + } + } + + + + public class ConsolidatedAirdragData : ConsolidatedDataBase, IAirdragDeclarationInputData + { + public IAirdragDeclarationInputData AirdragEntry { private set; get; } + + public ConsolidatedAirdragData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) + { + SetLastValidAirdragEntry(); + } + + public string Manufacturer + { + get { return AirdragEntry?.Manufacturer; } + } + + public string Model + { + get { return AirdragEntry?.Model; } + } + + public DateTime Date + { + get { return AirdragEntry.Date; } + } + + public string AppVersion + { + get { return AirdragEntry?.AppVersion; } + } + public CertificationMethod CertificationMethod + { + get { return AirdragEntry.CertificationMethod; } + } + public string CertificationNumber + { + get { return AirdragEntry?.CertificationNumber; } + } + public DigestData DigestValue + { + get { return AirdragEntry?.DigestValue; } + } + public SquareMeter AirDragArea + { + get { return AirdragEntry?.AirDragArea; } + } + public DataSource DataSource + { + get { return AirdragEntry?.DataSource; } + } + public bool SavedInDeclarationMode { get; } + + private void SetLastValidAirdragEntry() + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var airdragData = _manufacturingStages[i].Vehicle?.Components?.AirdragInputData; + if (airdragData == null) + continue; + + var value = airdragData.AirDragArea; + if (value == null) + continue; + + AirdragEntry = airdragData; + return; + } + } + + public override bool IsInputDataComplete() + { + return AirdragEntry != null; + } + } + + public class ConsolidatedBusAuxiliariesData : ConsolidatedDataBase, IBusAuxiliariesDeclarationData + { + private ConsolidateElectricConsumerData _consolidateElectricConsumerData; + private ConsolidatedHVACBusAuxiliariesData _consolidatedHVACBusAuxiliariesData; + + + public ConsolidatedBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + public XmlNode XMLSource { get; } + public string FanTechnology + { + get { return null; } + } + public IList<string> SteeringPumpTechnology + { + get { return null; } + } + public IElectricSupplyDeclarationData ElectricSupply + { + get { return null; } + } + + public IElectricConsumersDeclarationData ElectricConsumers + { + get + { + if (GetBusAuxPropertyValue<IElectricConsumersDeclarationData>(nameof(ElectricConsumers)) == null) + return null; + + return _consolidateElectricConsumerData ?? + (_consolidateElectricConsumerData = new ConsolidateElectricConsumerData(_manufacturingStages)); + } + } + + public IPneumaticSupplyDeclarationData PneumaticSupply + { + get { return null; } + } + + public IPneumaticConsumersDeclarationData PneumaticConsumers + { + get { return null; } + } + + public IHVACBusAuxiliariesDeclarationData HVACAux + { + get + { + if (GetBusAuxPropertyValue<IHVACBusAuxiliariesDeclarationData>(nameof(HVACAux)) == null) + return null; + + return _consolidatedHVACBusAuxiliariesData ?? + (_consolidatedHVACBusAuxiliariesData = new ConsolidatedHVACBusAuxiliariesData(_manufacturingStages)); + } + } + + private T GetBusAuxPropertyValue<T>(string propertyName) + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var busAux = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries; + if (busAux == null) + continue; + var value = GetPropertyValue<T>(busAux, propertyName); + if (value != null) + return value; + } + + return default; + } + + public override bool IsInputDataComplete() + { + return _consolidateElectricConsumerData != null && _consolidateElectricConsumerData.IsInputDataComplete() && + _consolidatedHVACBusAuxiliariesData != null && _consolidatedHVACBusAuxiliariesData.IsInputDataComplete(); + } + } + + + public class ConsolidateElectricConsumerData : ConsolidatedDataBase, IElectricConsumersDeclarationData + { + public ConsolidateElectricConsumerData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + public bool? InteriorLightsLED + { + get { return GetElectricConsumerPropertyValue<bool?>(nameof(InteriorLightsLED)); } + } + + public bool? DayrunninglightsLED + { + get { return GetElectricConsumerPropertyValue<bool?>(nameof(DayrunninglightsLED)); } + } + + public bool? PositionlightsLED + { + get { return GetElectricConsumerPropertyValue<bool?>(nameof(PositionlightsLED)); } + } + + public bool? HeadlightsLED + { + get { return GetElectricConsumerPropertyValue<bool?>(nameof(HeadlightsLED)); } + } + + public bool? BrakelightsLED + { + get { return GetElectricConsumerPropertyValue<bool?>(nameof(BrakelightsLED)); } + } + + + private T GetElectricConsumerPropertyValue<T>(string propertyName) + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var electricConsumer = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.ElectricConsumers; + if (electricConsumer == null) + continue; + var value = GetPropertyValue<T>(electricConsumer, propertyName); + if (value != null) + return value; + } + + return default; + } + + public override bool IsInputDataComplete() + { + return InteriorLightsLED != null && DayrunninglightsLED != null && PositionlightsLED != null && + HeadlightsLED != null && BrakelightsLED != null; + } + } + + + public class ConsolidatedHVACBusAuxiliariesData : ConsolidatedDataBase, IHVACBusAuxiliariesDeclarationData + { + public ConsolidatedHVACBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages) + : base(manufacturingStages) { } + + public BusHVACSystemConfiguration? SystemConfiguration + { + get + { + return GetHVACBusAuxPropertyValue<BusHVACSystemConfiguration?>(nameof(SystemConfiguration)); + } + } + + public HeatPumpType? HeatPumpTypeDriverCompartment + { + get + { + return GetHVACBusAuxPropertyValue<HeatPumpType?>(nameof(HeatPumpTypeDriverCompartment)); + } + } + + public HeatPumpMode? HeatPumpModeDriverCompartment + { + get + { + return GetHVACBusAuxPropertyValue<HeatPumpMode?>(nameof(HeatPumpModeDriverCompartment)); + } + } + + public HeatPumpType? HeatPumpTypePassengerCompartment + { + get + { + return GetHVACBusAuxPropertyValue<HeatPumpType?>(nameof(HeatPumpTypePassengerCompartment)); + } + } + + public HeatPumpMode? HeatPumpModePassengerCompartment + { + get + { + return GetHVACBusAuxPropertyValue<HeatPumpMode?>(nameof(HeatPumpModePassengerCompartment)); + } + } + + public Watt AuxHeaterPower + { + get + { + return GetHVACBusAuxPropertyValue<Watt>(nameof(AuxHeaterPower)); + } + } + + public bool? DoubleGlazing + { + get + { + return GetHVACBusAuxPropertyValue<bool?>(nameof(DoubleGlazing)); + } + } + + public bool? AdjustableAuxiliaryHeater + { + get + { + return GetHVACBusAuxPropertyValue<bool?>(nameof(AdjustableAuxiliaryHeater)); + } + } + + public bool? SeparateAirDistributionDucts + { + get + { + return GetHVACBusAuxPropertyValue<bool?>(nameof(SeparateAirDistributionDucts)); + } + } + + public bool? WaterElectricHeater + { + get + { + return GetHVACBusAuxPropertyValue<bool?>(nameof(WaterElectricHeater)); + } + } + + public bool? AirElectricHeater + { + get + { + return GetHVACBusAuxPropertyValue<bool?>(nameof(AirElectricHeater)); + } + } + + public bool? OtherHeatingTechnology + { + get + { + return GetHVACBusAuxPropertyValue<bool?>(nameof(OtherHeatingTechnology)); + } + } + + public bool? AdjustableCoolantThermostat { get; } + + public bool EngineWasteGasHeatExchanger { get; } + + + private T GetHVACBusAuxPropertyValue<T>(string propertyName) + { + for (int i = _manufacturingStages.Count - 1; i >= 0; i--) + { + var havacAux = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.HVACAux; + if (havacAux == null) + continue; + var value = GetPropertyValue<T>(havacAux, propertyName); + if (value != null) + return value; + } + + return default; + } + + public override bool IsInputDataComplete() + { + return SystemConfiguration != null && HeatPumpTypeDriverCompartment != null && HeatPumpModeDriverCompartment != null && + HeatPumpTypePassengerCompartment != null && HeatPumpModePassengerCompartment != null && AuxHeaterPower != null && + DoubleGlazing != null && AdjustableAuxiliaryHeater != null && SeparateAirDistributionDucts != null && + WaterElectricHeater != null && AirElectricHeater != null && OtherHeatingTechnology != null; + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 92a912c391..3f75de7b5c 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -117,6 +117,7 @@ <Compile Include="Integration\Declaration\TestMaxMassInMUCycle.cs" /> <Compile Include="Integration\DualFuel\DualFuelTests.cs" /> <Compile Include="Integration\Hybrid\ParallelHybridTest.cs" /> + <Compile Include="Integration\Multistage\MultistageVehicleTest.cs" /> <Compile Include="Integration\VTP\VTPTest.cs" /> <Compile Include="Integration\FuelTypesTest.cs" /> <Compile Include="Integration\FullCycleDeclarationTest.cs"> @@ -231,6 +232,7 @@ <Compile Include="XML\XMLDeclarationReaderVersionsTest.cs" /> <Compile Include="XML\XMLEngineeringInputRefTest.cs" /> <Compile Include="XML\XMLEngineeringInputSingleTest.cs" /> + <Compile Include="XML\XMLMultistageBusConsolidatedInputDataTest.cs" /> <Compile Include="XML\XMLMultistageBusDataTest.cs" /> <Compile Include="XML\XMLMultistageBusInputDataTest.cs" /> <Compile Include="XML\XMLPrimaryBusInputDataTest.cs" /> @@ -4290,6 +4292,7 @@ </ItemGroup> <ItemGroup> <Folder Include="Integration\FullPowertrain\" /> + <Folder Include="TestData\Integration\DeclarationMode\MultistageVehicle\" /> </ItemGroup> <ItemGroup> <Content Include="TestData\Integration\ADAS\Group5PCCDecl\Tractor_4x2_vehicle-class-5_5_t_0.xml"> @@ -4675,6 +4678,15 @@ <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_mandatory_entries.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_one_stage.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_two_stages.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_primary_vehicle_only.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs new file mode 100644 index 0000000000..e52f176edf --- /dev/null +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs @@ -0,0 +1,190 @@ +using System; +using System.IO; +using System.Xml; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML; + +namespace TUGraz.VectoCore.Tests.XML +{ + [TestFixture] + public class XMLMultistageBusConsolidatedInputDataTest + { + protected IXMLInputDataReader _xmlInputReader; + private IKernel _kernel; + + const string _dirPath = @"TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\"; + const string _consolidatedInputData = _dirPath + "vecto_multistage_consolidated_multiple_stages.xml"; + const string _primaryOnlyInputData = _dirPath + "vecto_multistage_primary_vehicle_only.xml"; + const string _oneStageInputData = _dirPath + "vecto_multistage_consolidated_one_stage.xml"; + const string _twoStagesInputData = _dirPath + "vecto_multistage_consolidated_two_stages.xml"; + + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + + _kernel = new StandardKernel(new VectoNinjectModule()); + _xmlInputReader = _kernel.Get<IXMLInputDataReader>(); + } + + + [TestCase] + public void TestConsolidateMultistageVehicle() + { + var reader = XmlReader.Create(_consolidatedInputData); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + TestConsolidateManufacturingStage(inputDataProvider.JobInputData.ConsolidateManufacturingStage); + Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete); + } + + private void TestConsolidateManufacturingStage(IManufacturingStageInputData consolidateStage) + { + var vehicle = consolidateStage.Vehicle; + Assert.AreEqual("Intermediate Manufacturer 3", vehicle.Manufacturer); + Assert.AreEqual("Intermediate Manufacturer Address 3", vehicle.ManufacturerAddress); + Assert.AreEqual("Intermediate Model 1", vehicle.Model); + Assert.AreEqual("VEH-2234567866", vehicle.VIN); + Assert.AreEqual(DateTime.Parse("2021-02-13T07:20:08.0187663Z").ToUniversalTime(), vehicle.Date); + Assert.AreEqual(LegislativeClass.M3, vehicle.LegislativeClass); + Assert.AreEqual(15000, vehicle.CurbMassChassis.Value());//CorrectedActualMass + Assert.AreEqual(20000, vehicle.GrossVehicleMassRating.Value());//TechnicalPermissibleMaximumLadenMass + Assert.AreEqual(false, vehicle.AirdragModifiedMultistage); + Assert.AreEqual(TankSystem.Liquefied, vehicle.TankSystem);//NgTankSystem + Assert.AreEqual(RegistrationClass.B, vehicle.RegisteredClass);//ClassBus + Assert.AreEqual(10, vehicle.NumberOfPassengersLowerDeck); + Assert.AreEqual(30, vehicle.NumberOfPassengersUpperDeck); + Assert.AreEqual(VehicleCode.CB, vehicle.VehicleCode); + Assert.AreEqual(true, vehicle.LowEntry); + Assert.AreEqual(3, vehicle.Height.Value());//HeightIntegratedBody + Assert.AreEqual(12, vehicle.Length.Value()); + Assert.AreEqual(2.5, vehicle.Width.Value()); + Assert.AreEqual(2.5, vehicle.EntranceHeight.Value()); + Assert.AreEqual(ConsumerTechnology.Mixed, vehicle.DoorDriveTechnology); + Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType); + + Assert.AreEqual(true, vehicle.ADAS.EngineStopStart); + Assert.AreEqual(EcoRollType.WithEngineStop, vehicle.ADAS.EcoRoll); + Assert.AreEqual(PredictiveCruiseControlType.Option_1_2, vehicle.ADAS.PredictiveCruiseControl); + Assert.AreEqual(true, vehicle.ADAS.ATEcoRollReleaseLockupClutch); + + Assert.AreEqual(null, vehicle.Components.AirdragInputData); + + var busAux = vehicle.Components.BusAuxiliaries; + Assert.AreEqual(true, busAux.ElectricConsumers.InteriorLightsLED); + Assert.AreEqual(true, busAux.ElectricConsumers.DayrunninglightsLED); + Assert.AreEqual(false, busAux.ElectricConsumers.PositionlightsLED); + Assert.AreEqual(false, busAux.ElectricConsumers.BrakelightsLED); + Assert.AreEqual(true, busAux.ElectricConsumers.HeadlightsLED); + + var busHVACAux = vehicle.Components.BusAuxiliaries.HVACAux; + Assert.AreEqual(BusHVACSystemConfiguration.Configuration1, busHVACAux.SystemConfiguration); + Assert.AreEqual(HeatPumpType.non_R_744_2_stage, busHVACAux.HeatPumpTypeDriverCompartment); + Assert.AreEqual(HeatPumpMode.heating, busHVACAux.HeatPumpModeDriverCompartment); + Assert.AreEqual(HeatPumpType.non_R_744_3_stage, busHVACAux.HeatPumpTypePassengerCompartment); + Assert.AreEqual(HeatPumpMode.cooling, busHVACAux.HeatPumpModePassengerCompartment); + Assert.AreEqual(50, busHVACAux.AuxHeaterPower.Value()); + Assert.AreEqual(false, busHVACAux.DoubleGlazing); + Assert.AreEqual(true, busHVACAux.AdjustableAuxiliaryHeater); + Assert.AreEqual(false, busHVACAux.SeparateAirDistributionDucts); + Assert.AreEqual(false, busHVACAux.WaterElectricHeater); + Assert.AreEqual(false, busHVACAux.AirElectricHeater); + Assert.AreEqual(true, busHVACAux.OtherHeatingTechnology); + } + + + [TestCase] + public void TestPrimaryOnlyConsolidateMultistageVehicle() + { + var reader = XmlReader.Create(_primaryOnlyInputData); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + + Assert.AreEqual(null, inputDataProvider.JobInputData.ConsolidateManufacturingStage); + Assert.AreEqual(false, inputDataProvider.JobInputData.InputComplete); + } + + [TestCase] + public void TestOneStageConsolidateMultistageVehicle() + { + var reader = XmlReader.Create(_oneStageInputData); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + Assert.AreEqual(false, inputDataProvider.JobInputData.InputComplete); + + + var vehicle = inputDataProvider.JobInputData.ConsolidateManufacturingStage.Vehicle; + Assert.AreEqual("Intermediate Manufacturer 1", vehicle.Manufacturer); + Assert.AreEqual("Intermediate Manufacturer Address 1", vehicle.ManufacturerAddress); + Assert.AreEqual(null, vehicle.Model); + Assert.AreEqual("VEH-1234567890", vehicle.VIN); + Assert.AreEqual(DateTime.Parse("2018-02-15T11:00:00Z").ToUniversalTime(), vehicle.Date); + Assert.AreEqual(null, vehicle.LegislativeClass); + Assert.AreEqual(null, vehicle.CurbMassChassis);//CorrectedActualMass + Assert.AreEqual(null, vehicle.GrossVehicleMassRating);//TechnicalPermissibleMaximumLadenMass + Assert.AreEqual(null, vehicle.AirdragModifiedMultistage); + Assert.AreEqual(null, vehicle.TankSystem);//NgTankSystem + Assert.AreEqual(null, vehicle.RegisteredClass);//ClassBus + Assert.AreEqual(null, vehicle.NumberOfPassengersLowerDeck); + Assert.AreEqual(null, vehicle.NumberOfPassengersUpperDeck); + Assert.AreEqual(null, vehicle.VehicleCode); + Assert.AreEqual(null, vehicle.LowEntry); + Assert.AreEqual(null, vehicle.Height);//HeightIntegratedBody + Assert.AreEqual(null, vehicle.Length); + Assert.AreEqual(null, vehicle.Width); + Assert.AreEqual(null, vehicle.EntranceHeight); + Assert.AreEqual(null, vehicle.DoorDriveTechnology); + Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType); + + Assert.AreEqual(null, vehicle.ADAS); + + Assert.AreEqual(null, vehicle.Components); + } + + [TestCase] + public void TestTwoStagesConsolidateMultistageVehicle() + { + var reader = XmlReader.Create(_twoStagesInputData); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + Assert.AreEqual(false, inputDataProvider.JobInputData.InputComplete); + + var vehicle = inputDataProvider.JobInputData.ConsolidateManufacturingStage.Vehicle; + Assert.AreEqual("Intermediate Manufacturer 2", vehicle.Manufacturer); + Assert.AreEqual("Intermediate Manufacturer Address 2", vehicle.ManufacturerAddress); + Assert.AreEqual("Intermediate Model 1", vehicle.Model); + Assert.AreEqual("VEH-2234567890", vehicle.VIN); + Assert.AreEqual(DateTime.Parse("2021-02-13T07:20:08.0187663Z").ToUniversalTime(), vehicle.Date); + Assert.AreEqual(null, vehicle.LegislativeClass); + Assert.AreEqual(15000, vehicle.CurbMassChassis.Value());//CorrectedActualMass + Assert.AreEqual(null, vehicle.GrossVehicleMassRating);//TechnicalPermissibleMaximumLadenMass + Assert.AreEqual(false, vehicle.AirdragModifiedMultistage); + Assert.AreEqual(TankSystem.Compressed, vehicle.TankSystem);//NgTankSystem + Assert.AreEqual(null, vehicle.RegisteredClass);//ClassBus + Assert.AreEqual(10, vehicle.NumberOfPassengersLowerDeck); + Assert.AreEqual(30, vehicle.NumberOfPassengersUpperDeck); + Assert.AreEqual(VehicleCode.CB, vehicle.VehicleCode); + Assert.AreEqual(true, vehicle.LowEntry); + Assert.AreEqual(3, vehicle.Height.Value());//HeightIntegratedBody + Assert.AreEqual(12, vehicle.Length.Value()); + Assert.AreEqual(2.5, vehicle.Width.Value()); + Assert.AreEqual(2.5, vehicle.EntranceHeight.Value()); + Assert.AreEqual(ConsumerTechnology.Mixed, vehicle.DoorDriveTechnology); + Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType); + + Assert.AreEqual(true, vehicle.ADAS.EngineStopStart); + Assert.AreEqual(EcoRollType.WithEngineStop, vehicle.ADAS.EcoRoll); + Assert.AreEqual(PredictiveCruiseControlType.Option_1_2, vehicle.ADAS.PredictiveCruiseControl); + Assert.AreEqual(null, vehicle.ADAS.ATEcoRollReleaseLockupClutch); + + Assert.AreEqual(null, vehicle.Components.AirdragInputData); + + var busAux = vehicle.Components.BusAuxiliaries.ElectricConsumers; + Assert.AreEqual(null, busAux); + + var busHVACAux = vehicle.Components.BusAuxiliaries.HVACAux; + Assert.AreEqual(null, busHVACAux); + } + } +} diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs index ab48567380..a0ebdde8cd 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs @@ -10,6 +10,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML; namespace TUGraz.VectoCore.Tests.XML { + [TestFixture] public class XMLMultistageBusInputDataTest { protected IXMLInputDataReader xmlInputReader; @@ -205,26 +206,10 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(null, vehicle.Components.AirdragInputData); var electricConsumer = vehicle.Components.BusAuxiliaries.ElectricConsumers; - Assert.AreEqual(null, electricConsumer.InteriorLightsLED); - Assert.AreEqual(null, electricConsumer.DayrunninglightsLED); - Assert.AreEqual(null, electricConsumer.PositionlightsLED); - Assert.AreEqual(null, electricConsumer.BrakelightsLED); - Assert.AreEqual(null, electricConsumer.HeadlightsLED); + Assert.AreEqual(null, electricConsumer); var hvacAux = vehicle.Components.BusAuxiliaries.HVACAux; - Assert.AreEqual(null, hvacAux.SystemConfiguration); - Assert.AreEqual(null, hvacAux.HeatPumpTypeDriverCompartment); - Assert.AreEqual(null, hvacAux.HeatPumpModeDriverCompartment); - Assert.AreEqual(null, hvacAux.HeatPumpTypePassengerCompartment); - Assert.AreEqual(null, hvacAux.HeatPumpModePassengerCompartment); - - Assert.AreEqual(null, hvacAux.AuxHeaterPower); - Assert.AreEqual(null, hvacAux.DoubleGlazing); - Assert.AreEqual(null, hvacAux.AdjustableAuxiliaryHeater); - Assert.AreEqual(null, hvacAux.SeparateAirDistributionDucts); - Assert.AreEqual(null, hvacAux.WaterElectricHeater); - Assert.AreEqual(null, hvacAux.AirElectricHeater); - Assert.AreEqual(null, hvacAux.OtherHeatingTechnology); + Assert.AreEqual(null, hvacAux); } } } -- GitLab