diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index c547d2ba266205024044fb36fb63cff3d8e17bb3..fdf65e99c486dcc36fc6a3857588c4ae133ea08f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -539,5 +539,30 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + + public override IPneumaticSupplyDeclarationData PneumaticSupply + { + get { return null; } + } + + public override IElectricSupplyDeclarationData ElectricSupply + { + get { return null; } + } + + public override IPneumaticConsumersDeclarationData PneumaticConsumers + { + get { return null; } + } + + public override string FanTechnology + { + get { return null; } + } + + public override IList<string> SteeringPumpTechnology + { + get { return null; } + } } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs index 7ce1448b37f9315c92e8bcdce74851960661d07e..81a00b88ef33796e7ab6b1996d38661ee3d1db04 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs @@ -367,10 +367,25 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override IBusAuxiliariesDeclarationData BusAuxiliaries { - get { return _busAuxiliaries ?? (_busAuxiliaries = ComponentReader.BusAuxiliariesInputData); } - } + get + { + if (!ElementExists(XMLNames.Component_Auxiliaries)) + return null; - } + return _busAuxiliaries ?? (_busAuxiliaries = GetBusAuxiliaries()); + } + } + private IBusAuxiliariesDeclarationData GetBusAuxiliaries() + { + var busAux = ComponentReader.BusAuxiliariesInputData; + if (busAux.ElectricConsumers == null && busAux.HVACAux == null && + busAux.PneumaticConsumers == null && busAux.PneumaticSupply == null && + busAux.ElectricSupply == null && busAux.FanTechnology == null && + busAux.SteeringPumpTechnology == null) + return null; + return busAux; + } + } } \ No newline at end of file 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 b3ce6d274747e600464488f807bbde76d7f07859..097c8f28bc4426eba9610c0da90862e85a78a40c 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -151,16 +151,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl if (ManufacturingStages.IsNullOrEmpty()) return false; - if(_consolidateManufacturingStages == null) + if (_consolidateManufacturingStages == null) _consolidateManufacturingStages = GetConsolidateManufacturingStage(); - return _consolidateManufacturingStages.IsInputDataComplete(); + return _consolidateManufacturingStages.IsInputDataComplete(JobType); } } private ConsolidateManufacturingStages GetConsolidateManufacturingStage() { - return new ConsolidateManufacturingStages(ManufacturingStages); + return new ConsolidateManufacturingStages(PrimaryVehicle, ManufacturingStages.Reverse()); } @@ -316,12 +316,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl // --------------------------------------------------------------------------------------- - - public abstract class ConsolidatedDataBase + #region Generate Consolidated Multistage InputData + + public abstract class ConsolidatedDataBase { - protected readonly IList<IManufacturingStageInputData> _manufacturingStages; + protected readonly IEnumerable<IManufacturingStageInputData> _manufacturingStages; - public ConsolidatedDataBase(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidatedDataBase(IEnumerable<IManufacturingStageInputData> manufacturingStages) { _manufacturingStages = manufacturingStages; } @@ -350,89 +351,102 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return obj; } - public abstract bool IsInputDataComplete(); + public abstract bool IsInputDataComplete(VectoSimulationJobType jobType); } + // --------------------------------------------------------------------------------------- + public class ConsolidateManufacturingStages : ConsolidatedDataBase, IManufacturingStageInputData { - private ConsolidatedVehicleData _consolidatedVehicleData; - - public ConsolidateManufacturingStages(IList<IManufacturingStageInputData> manufacturingStages) - : base(manufacturingStages) { } + private IPrimaryVehicleInformationInputDataProvider _primaryVehicle; + + public ConsolidateManufacturingStages(IPrimaryVehicleInformationInputDataProvider primaryVehicle, + IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) + { + _primaryVehicle = primaryVehicle; + } public DigestData HashPreviousStage { - get { return _manufacturingStages.Last().HashPreviousStage; } + get { return _manufacturingStages.First().HashPreviousStage; } } public int StageCount { - get { return _manufacturingStages.Last().StageCount; } + get { return _manufacturingStages.First().StageCount; } } public IVehicleDeclarationInputData Vehicle { get { - return _consolidatedVehicleData ?? - (_consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages)); + return GetConsolidatedVehicleData(); } } public IApplicationInformation ApplicationInformation { - get { return _manufacturingStages.Last().ApplicationInformation; } + get { return _manufacturingStages.First().ApplicationInformation; } } public DigestData Signature { - get { return _manufacturingStages.Last().Signature; } + get { return _manufacturingStages.First().Signature; } } - public override bool IsInputDataComplete() + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { - if (_consolidatedVehicleData == null) - _consolidatedVehicleData = new ConsolidatedVehicleData(_manufacturingStages); - - return _consolidatedVehicleData.IsInputDataComplete(); + return GetConsolidatedVehicleData().IsInputDataComplete(jobType); + } + + private ConsolidatedVehicleData GetConsolidatedVehicleData() + { + return _consolidatedVehicleData ?? + (_consolidatedVehicleData = new ConsolidatedVehicleData(_primaryVehicle, _manufacturingStages)); } + } + // --------------------------------------------------------------------------------------- public class ConsolidatedVehicleData : ConsolidatedDataBase, IVehicleDeclarationInputData { private ConsolidatedADASData _consolidatedADAS; private ConsolidatedComponentData _consolidatedComponents; + private readonly IPrimaryVehicleInformationInputDataProvider _primaryVehicle; - public ConsolidatedVehicleData(IList<IManufacturingStageInputData> manufacturingStages) - : base(manufacturingStages) { } + public ConsolidatedVehicleData(IPrimaryVehicleInformationInputDataProvider primaryVehicle, + IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) + { + _primaryVehicle = primaryVehicle; + } #region ManufacturingStage mandatory properties public string Manufacturer { - get { return _manufacturingStages.Last().Vehicle.Manufacturer; } + get { return _manufacturingStages.First().Vehicle.Manufacturer; } } public string ManufacturerAddress { - get { return _manufacturingStages.Last().Vehicle.ManufacturerAddress; } + get { return _manufacturingStages.First().Vehicle.ManufacturerAddress; } } public DateTime Date { - get { return _manufacturingStages.Last().Vehicle.Date; } + get { return _manufacturingStages.First().Vehicle.Date; } } public string VIN { - get { return _manufacturingStages.Last().Vehicle.VIN; } + get { return _manufacturingStages.First().Vehicle.VIN; } } public VehicleDeclarationType VehicleDeclarationType { - get { return _manufacturingStages.Last().Vehicle.VehicleDeclarationType; } + get { return _manufacturingStages.First().Vehicle.VehicleDeclarationType; } } #endregion @@ -535,27 +549,31 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public IAdvancedDriverAssistantSystemDeclarationInputData ADAS { - get - { - if (GetVehiclePropertyValue<IAdvancedDriverAssistantSystemDeclarationInputData>(nameof(ADAS)) == null) - return null; + get { return GetADAS(); } + } - return _consolidatedADAS - ?? (_consolidatedADAS = new ConsolidatedADASData(_manufacturingStages)); - } + private IAdvancedDriverAssistantSystemDeclarationInputData GetADAS() + { + 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; + get { return GetComponents(); } + } - return _consolidatedComponents - ?? (_consolidatedComponents = new ConsolidatedComponentData(_manufacturingStages)); + private IVehicleComponentsDeclaration GetComponents() + { + if (GetVehiclePropertyValue<IVehicleComponentsDeclaration>(nameof(Components)) == null) + return null; - } + return _consolidatedComponents + ?? (_consolidatedComponents = new ConsolidatedComponentData(_manufacturingStages)); } #endregion @@ -591,30 +609,69 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private T GetVehiclePropertyValue<T>(string propertyName) { - for (int i = _manufacturingStages.Count - 1; i >= 0; i--) - { - var value = GetPropertyValue<T>(_manufacturingStages[i].Vehicle, propertyName); + foreach (var manufacturingStage in _manufacturingStages) { + var value = GetPropertyValue<T>(manufacturingStage.Vehicle, propertyName); if (value != null) return value; } return default; } - public override bool IsInputDataComplete() + private bool PrimaryEngineWithNGTankSystem() + { + var enginePrimaryEngine = _primaryVehicle?.Vehicle?.Components?.EngineInputData; + if (enginePrimaryEngine == null) + return false; + + foreach (var engineMode in enginePrimaryEngine.EngineModes) + { + foreach (var fuel in engineMode.Fuels) + { + if (fuel.FuelType == FuelType.NGPI || fuel.FuelType == FuelType.NGCI) + return true; + } + } + + return false; + } + + + private bool IsTankSystemValid() + { + if (PrimaryEngineWithNGTankSystem()) + return TankSystem != null; + return true; + } + + private bool WithoutAirdrag() + { + foreach (var manufacturingStage in _manufacturingStages) { + if (manufacturingStage.Vehicle.AirdragModifiedMultistage != null || + manufacturingStage.Vehicle.Components?.AirdragInputData != null) + return false; + } + return true; + } + + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { + GetADAS(); + GetComponents(); + return Model != null && LegislativeClass != null && CurbMassChassis != null && GrossVehicleMassRating != null - && AirdragModifiedMultistage != null && TankSystem != null && RegisteredClass != null + && (WithoutAirdrag() || AirdragModifiedMultistage != null) && IsTankSystemValid() && 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(); + && DoorDriveTechnology != null && _consolidatedADAS != null && _consolidatedADAS.IsInputDataComplete(jobType) + && _consolidatedComponents != null && _consolidatedComponents.IsInputDataComplete(jobType); } } + // --------------------------------------------------------------------------------------- public class ConsolidatedADASData : ConsolidatedDataBase, IAdvancedDriverAssistantSystemDeclarationInputData { - public ConsolidatedADASData(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidatedADASData(IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) { } public bool EngineStopStart @@ -642,9 +699,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private T GetADASPropertyValue<T>(string propertyName) { - for (int i = _manufacturingStages.Count - 1; i >= 0; i--) - { - var adas = _manufacturingStages[i].Vehicle.ADAS; + foreach (var manufacturingStage in _manufacturingStages) { + var adas = manufacturingStage.Vehicle.ADAS; if (adas == null) continue; var value = GetPropertyValue<T>(adas, propertyName); @@ -655,32 +711,37 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return default; } - public override bool IsInputDataComplete() + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { return ATEcoRollReleaseLockupClutch != null; } } + // --------------------------------------------------------------------------------------- + public class ConsolidatedComponentData : ConsolidatedDataBase, IVehicleComponentsDeclaration { private ConsolidatedAirdragData _consolidateAirdragData; private ConsolidatedBusAuxiliariesData _consolidateBusAuxiliariesData; - public ConsolidatedComponentData(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidatedComponentData(IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) { } public IAirdragDeclarationInputData AirdragInputData { - get - { - if (GetComponentPropertyValue<IAirdragDeclarationInputData>(nameof(AirdragInputData)) == null) - return null; + get { return GetAirdragInputData(); } + } - return _consolidateAirdragData ?? - (_consolidateAirdragData = new ConsolidatedAirdragData(_manufacturingStages)); - } + private IAirdragDeclarationInputData GetAirdragInputData() + { + if (GetComponentPropertyValue<IAirdragDeclarationInputData>(nameof(AirdragInputData)) == null) + return null; + + return _consolidateAirdragData ?? + (_consolidateAirdragData = new ConsolidatedAirdragData(_manufacturingStages)); } + public IGearboxDeclarationInputData GearboxInputData { get { return null; } @@ -720,15 +781,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public IBusAuxiliariesDeclarationData BusAuxiliaries { - get - { - if (GetComponentPropertyValue<IBusAuxiliariesDeclarationData>(nameof(BusAuxiliaries)) == null) - return null; + get { return GetBusAuxiliaries(); } + } - return _consolidateBusAuxiliariesData ?? - (_consolidateBusAuxiliariesData = new ConsolidatedBusAuxiliariesData(_manufacturingStages)); - } + private IBusAuxiliariesDeclarationData GetBusAuxiliaries() + { + if (GetComponentPropertyValue<IBusAuxiliariesDeclarationData>(nameof(BusAuxiliaries)) == null) + return null; + + return _consolidateBusAuxiliariesData ?? + (_consolidateBusAuxiliariesData = new ConsolidatedBusAuxiliariesData(_manufacturingStages)); } + + public IElectricStorageDeclarationInputData ElectricStorage { get { return null; } @@ -740,9 +805,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private T GetComponentPropertyValue<T>(string propertyName) { - for (int i = _manufacturingStages.Count - 1; i >= 0; i--) - { - var component = _manufacturingStages[i].Vehicle?.Components; + + foreach (var manufacturingStage in _manufacturingStages) { + var component = manufacturingStage.Vehicle?.Components; if (component == null) continue; var value = GetPropertyValue<T>(component, propertyName); @@ -754,19 +819,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } - public override bool IsInputDataComplete() + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { - return _consolidateBusAuxiliariesData != null && _consolidateBusAuxiliariesData.IsInputDataComplete(); + GetAirdragInputData(); + GetBusAuxiliaries(); + + return _consolidateBusAuxiliariesData != null && _consolidateBusAuxiliariesData.IsInputDataComplete(jobType); } } - + // --------------------------------------------------------------------------------------- public class ConsolidatedAirdragData : ConsolidatedDataBase, IAirdragDeclarationInputData { public IAirdragDeclarationInputData AirdragEntry { private set; get; } - public ConsolidatedAirdragData(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidatedAirdragData(IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) { SetLastValidAirdragEntry(); @@ -815,9 +883,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private void SetLastValidAirdragEntry() { - for (int i = _manufacturingStages.Count - 1; i >= 0; i--) - { - var airdragData = _manufacturingStages[i].Vehicle?.Components?.AirdragInputData; + foreach (var manufacturingStage in _manufacturingStages) { + var airdragData = manufacturingStage.Vehicle?.Components?.AirdragInputData; if (airdragData == null) continue; @@ -830,19 +897,21 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } } - public override bool IsInputDataComplete() + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { return AirdragEntry != null; } } + // --------------------------------------------------------------------------------------- + public class ConsolidatedBusAuxiliariesData : ConsolidatedDataBase, IBusAuxiliariesDeclarationData { private ConsolidateElectricConsumerData _consolidateElectricConsumerData; private ConsolidatedHVACBusAuxiliariesData _consolidatedHVACBusAuxiliariesData; - public ConsolidatedBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidatedBusAuxiliariesData(IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) { } public XmlNode XMLSource { get; } @@ -861,14 +930,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public IElectricConsumersDeclarationData ElectricConsumers { - get - { - if (GetBusAuxPropertyValue<IElectricConsumersDeclarationData>(nameof(ElectricConsumers)) == null) - return null; - - return _consolidateElectricConsumerData ?? - (_consolidateElectricConsumerData = new ConsolidateElectricConsumerData(_manufacturingStages)); - } + get { return GetElectricConsumers(); } + } + + private IElectricConsumersDeclarationData GetElectricConsumers() + { + if (GetBusAuxPropertyValue<IElectricConsumersDeclarationData>(nameof(ElectricConsumers)) == null) + return null; + + return _consolidateElectricConsumerData ?? + (_consolidateElectricConsumerData = new ConsolidateElectricConsumerData(_manufacturingStages)); } public IPneumaticSupplyDeclarationData PneumaticSupply @@ -883,21 +954,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public IHVACBusAuxiliariesDeclarationData HVACAux { - get - { - if (GetBusAuxPropertyValue<IHVACBusAuxiliariesDeclarationData>(nameof(HVACAux)) == null) - return null; - - return _consolidatedHVACBusAuxiliariesData ?? - (_consolidatedHVACBusAuxiliariesData = new ConsolidatedHVACBusAuxiliariesData(_manufacturingStages)); - } + get { return GetHVACAux(); } + } + + private IHVACBusAuxiliariesDeclarationData GetHVACAux() + { + 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; + foreach (var manufacturingStage in _manufacturingStages) { + var busAux = manufacturingStage.Vehicle?.Components?.BusAuxiliaries; if (busAux == null) continue; var value = GetPropertyValue<T>(busAux, propertyName); @@ -908,17 +980,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return default; } - public override bool IsInputDataComplete() + + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { - return _consolidateElectricConsumerData != null && _consolidateElectricConsumerData.IsInputDataComplete() && - _consolidatedHVACBusAuxiliariesData != null && _consolidatedHVACBusAuxiliariesData.IsInputDataComplete(); + GetElectricConsumers(); + GetHVACAux(); + + return _consolidateElectricConsumerData != null && _consolidateElectricConsumerData.IsInputDataComplete(jobType) && + _consolidatedHVACBusAuxiliariesData != null && _consolidatedHVACBusAuxiliariesData.IsInputDataComplete(jobType); } } + // --------------------------------------------------------------------------------------- public class ConsolidateElectricConsumerData : ConsolidatedDataBase, IElectricConsumersDeclarationData { - public ConsolidateElectricConsumerData(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidateElectricConsumerData(IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) { } public bool? InteriorLightsLED @@ -949,30 +1026,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private T GetElectricConsumerPropertyValue<T>(string propertyName) { - for (int i = _manufacturingStages.Count - 1; i >= 0; i--) - { - var electricConsumer = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.ElectricConsumers; + foreach (var manufacturingStage in _manufacturingStages) { + var electricConsumer = manufacturingStage.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() + public override bool IsInputDataComplete(VectoSimulationJobType jobType) { return InteriorLightsLED != null && DayrunninglightsLED != null && PositionlightsLED != null && HeadlightsLED != null && BrakelightsLED != null; } } - + // --------------------------------------------------------------------------------------- public class ConsolidatedHVACBusAuxiliariesData : ConsolidatedDataBase, IHVACBusAuxiliariesDeclarationData { - public ConsolidatedHVACBusAuxiliariesData(IList<IManufacturingStageInputData> manufacturingStages) + public ConsolidatedHVACBusAuxiliariesData(IEnumerable<IManufacturingStageInputData> manufacturingStages) : base(manufacturingStages) { } public BusHVACSystemConfiguration? SystemConfiguration @@ -1078,9 +1153,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private T GetHVACBusAuxPropertyValue<T>(string propertyName) { - for (int i = _manufacturingStages.Count - 1; i >= 0; i--) - { - var havacAux = _manufacturingStages[i].Vehicle?.Components?.BusAuxiliaries?.HVACAux; + foreach (var manufacturingStage in _manufacturingStages) { + var havacAux = manufacturingStage.Vehicle?.Components?.BusAuxiliaries?.HVACAux; if (havacAux == null) continue; var value = GetPropertyValue<T>(havacAux, propertyName); @@ -1090,13 +1164,55 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return default; } + + private bool IsCorrectSystemConfiguration() + { + return SystemConfiguration != null && SystemConfiguration != BusHVACSystemConfiguration.Unknown; + } - public override bool IsInputDataComplete() + private bool IsCorrectDriverPumpTypeDriverPumpMode() { - 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; + if (HeatPumpModeDriverCompartment == null) + return false; + + if (HeatPumpTypeDriverCompartment == HeatPumpType.none) + return HeatPumpModeDriverCompartment == null || HeatPumpModeDriverCompartment == HeatPumpMode.N_A; + + return HeatPumpTypeDriverCompartment != null && HeatPumpModeDriverCompartment != null; + } + + private bool IsCorrectPassengerPumpTypeDriverPumpMode() + { + if (HeatPumpTypePassengerCompartment == null) + return false; + if (HeatPumpTypePassengerCompartment == HeatPumpType.none) + return HeatPumpModePassengerCompartment == null || HeatPumpModePassengerCompartment == HeatPumpMode.N_A; + + return HeatPumpTypePassengerCompartment != null && HeatPumpModePassengerCompartment != null; + } + + private bool RequiredParametersForJobType(VectoSimulationJobType jobType) + { + switch (jobType) { + case VectoSimulationJobType.ConventionalVehicle: + return true; + case VectoSimulationJobType.ParallelHybridVehicle: + case VectoSimulationJobType.SerialHybridVehicle: + case VectoSimulationJobType.BatteryElectricVehicle: + return WaterElectricHeater != null && AirElectricHeater != null && OtherHeatingTechnology != null; + default: + return false; + } + } + + public override bool IsInputDataComplete(VectoSimulationJobType jobType) + { + return IsCorrectSystemConfiguration() && IsCorrectDriverPumpTypeDriverPumpMode() && + IsCorrectPassengerPumpTypeDriverPumpMode() && AuxHeaterPower != null && DoubleGlazing != null && + AdjustableAuxiliaryHeater != null && SeparateAirDistributionDucts != null && + RequiredParametersForJobType(jobType); } } + + #endregion } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml index e0dba57e8c097ea76caaf7e07fe09d7d8d0a82e9..f9d02df26c14cdcdf4a2c1e209fd876bbb970b4a 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml @@ -668,28 +668,6 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile <v2.8:EntranceHeight>2500</v2.8:EntranceHeight> <v2.8:DeclarationType>interim</v2.8:DeclarationType> <v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> - <v2.8:AirDrag> - <v2.0:Data xsi:type="v2.0:AirDragDataDeclarationType" id="CabinX24h"> - <v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer> - <v2.0:Model>Generic Model</v2.0:Model> - <v2.0:CertificationNumber>e12*0815/8051*2017/05E1000*00</v2.0:CertificationNumber> - <v2.0:Date>2018-03-24T15:00:00Z</v2.0:Date> - <v2.0:AppVersion>Vecto AirDrag x.y.z</v2.0:AppVersion> - <v2.0:CdxA_0>6.31</v2.0:CdxA_0> - <v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA> - <v2.0:DeclaredCdxA>6.36</v2.0:DeclaredCdxA> - </v2.0:Data> - <v2.0:Signature> - <di:Reference URI="#CabinX24h"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/28N8=</di:DigestValue> - </di:Reference> - </v2.0:Signature> - </v2.8:AirDrag> <v2.8:Auxiliaries> <v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"/> </v2.8:Auxiliaries> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml index aaf56b04d68f75779eb30f00093b626d3e0f8341..0b10feb4885a6a1e025cea2a22a4ab27a7c62a67 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/vecto_multistage_consolidated_one_stage.xml @@ -658,6 +658,11 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile <v2.8:VIN>VEH-1234567890</v2.8:VIN> <v2.8:Date>2018-02-15T11:00:00Z</v2.8:Date> <v2.8:DeclarationType>interim</v2.8:DeclarationType> + <v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> + <v2.8:Auxiliaries> + <v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"/> + </v2.8:Auxiliaries> + </v2.8:Components> </Vehicle> <ApplicationInformation> <SimulationToolVersion>!!NOT FOR CERTIFICATION!!</SimulationToolVersion> diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 2f9437dc7a68470b86b5716ada9177cbb1e43976..05a4ae7fcc646c3eb852bbf896535533bdd45372 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -4684,6 +4684,18 @@ <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_multiple_stages_airdrag.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_heatPump.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_hev.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_one_stage.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs index e52f176edff266e45157337de3ab2e67506ea942..5f19a19789d9d268604f6174f1076af4926e84cf 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusConsolidatedInputDataTest.cs @@ -21,8 +21,13 @@ namespace TUGraz.VectoCore.Tests.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"; - + const string _consolidatedInputDataAirdrag = _dirPath + "vecto_multistage_consolidated_multiple_stages_airdrag.xml"; + const string _consolidatedInputDataHeatPump = _dirPath + "vecto_multistage_consolidated_multiple_stages_heatPump.xml"; + const string _consolidatedInputDataHeatHev = _dirPath + "vecto_multistage_consolidated_multiple_stages_hev.xml"; + const string _consolidatedInputDataHeatNgTank = _dirPath + "vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml"; + + [OneTimeSetUp] public void RunBeforeAnyTests() { @@ -38,8 +43,8 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = XmlReader.Create(_consolidatedInputData); var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; - TestConsolidateManufacturingStage(inputDataProvider.JobInputData.ConsolidateManufacturingStage); Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete); + TestConsolidateManufacturingStage(inputDataProvider.JobInputData.ConsolidateManufacturingStage); } private void TestConsolidateManufacturingStage(IManufacturingStageInputData consolidateStage) @@ -53,7 +58,7 @@ namespace TUGraz.VectoCore.Tests.XML 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(null, vehicle.AirdragModifiedMultistage); Assert.AreEqual(TankSystem.Liquefied, vehicle.TankSystem);//NgTankSystem Assert.AreEqual(RegistrationClass.B, vehicle.RegisteredClass);//ClassBus Assert.AreEqual(10, vehicle.NumberOfPassengersLowerDeck); @@ -177,14 +182,41 @@ namespace TUGraz.VectoCore.Tests.XML 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); + } - Assert.AreEqual(null, vehicle.Components.AirdragInputData); - var busAux = vehicle.Components.BusAuxiliaries.ElectricConsumers; - Assert.AreEqual(null, busAux); + [TestCase] + public void TestConsolidateMultistageAirdrag() + { + var reader = XmlReader.Create(_consolidatedInputDataAirdrag); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete); + } - var busHVACAux = vehicle.Components.BusAuxiliaries.HVACAux; - Assert.AreEqual(null, busHVACAux); + [TestCase] + public void TestConsolidateMultistageHeatPump() + { + var reader = XmlReader.Create(_consolidatedInputDataHeatPump); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete); + } + + [TestCase] + public void TestConsolidateMultistageHeatHev() + { + var reader = XmlReader.Create(_consolidatedInputDataHeatHev); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete); + } + + [TestCase] + public void TestConsolidateMultistageHeatNgTankSystem() + { + var reader = XmlReader.Create(_consolidatedInputDataHeatNgTank); + var inputDataProvider = _xmlInputReader.Create(reader) as IMultistageBusInputDataProvider; + Assert.AreEqual(true, inputDataProvider.JobInputData.InputComplete); } } } diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs index 98032576f3886853a4bd64a51a25a6e15a005d6e..414a3f058c3c9f59790c078f8ad8b3af96c6d583 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusInputDataTest.cs @@ -203,13 +203,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(PredictiveCruiseControlType.Option_1_2_3, vehicle.ADAS.PredictiveCruiseControl); Assert.AreEqual(null, vehicle.ADAS.ATEcoRollReleaseLockupClutch); - Assert.AreEqual(null, vehicle.Components.AirdragInputData); - - var electricConsumer = vehicle.Components.BusAuxiliaries.ElectricConsumers; - Assert.AreEqual(null, electricConsumer); - - var hvacAux = vehicle.Components.BusAuxiliaries.HVACAux; - Assert.AreEqual(null, hvacAux); + Assert.AreEqual(null , vehicle.Components); }