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 9a45e004a8d751e9af0bb04cd45a38f6551c8823..288b74dadc588dd1c7dc858ecf8d179a201cd52d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -712,7 +712,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return validAirdragEntries; } - private bool IsInputDataCompleteExempted(VectoSimulationJobType jobType, bool fullCheck) + private bool IsInputDataCompleteExempted(VectoSimulationJobType jobType, bool fullCheck) { if (fullCheck) { @@ -754,7 +754,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl if (fullCheck) { //use Binary AND to execute all Statements and gather information about missing parameters. return InputComplete(Model, nameof(Model)) - & InputComplete(LegislativeClass, nameof(LegislativeClass)) + & InputComplete(LegislativeClass, nameof(LegislativeClass)) & InputComplete(CurbMassChassis, nameof(CurbMassChassis)) & InputComplete(GrossVehicleMassRating, nameof(GrossVehicleMassRating)) & MethodComplete(IsAirdragEntriesValid(), nameof(IsAirdragEntriesValid)) @@ -777,7 +777,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl } - return InputComplete(Model, nameof(Model)) + return InputComplete(Model, nameof(Model)) && InputComplete(LegislativeClass, nameof(LegislativeClass)) && InputComplete(CurbMassChassis, nameof(CurbMassChassis)) && InputComplete(GrossVehicleMassRating, nameof(GrossVehicleMassRating)) @@ -1173,7 +1173,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl if (fullCheck) { //use Binary AND to execute all Statements and gather information about missing parameters. return InputComplete(_consolidateElectricConsumerData, nameof(_consolidateElectricConsumerData)) - & _consolidateElectricConsumerData.IsInputDataCompleteFullCheck(jobType) + & ((_consolidateElectricConsumerData != null) + && _consolidateElectricConsumerData.IsInputDataCompleteFullCheck(jobType)) & InputComplete(_consolidatedHVACBusAuxiliariesData, nameof(_consolidatedHVACBusAuxiliariesData)) & ((_consolidatedHVACBusAuxiliariesData != null) && _consolidatedHVACBusAuxiliariesData.IsInputDataCompleteFullCheck(jobType)); @@ -1201,7 +1202,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected override IList<string> GetInvalidEntriesTemplate(VectoSimulationJobType jobType) { - return _invalidEntries.Concat(_consolidateElectricConsumerData.GetInvalidEntries(jobType)) + return _invalidEntries.Concat(_consolidateElectricConsumerData?.GetInvalidEntries(jobType) + ?? new List<string>() { XMLNames.BusAux_ElectricSystem }) .Concat(_consolidatedHVACBusAuxiliariesData?.GetInvalidEntries(jobType) ?? new List<string>()).ToList(); } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs index d49ef125a574ef273acff72261510d0bb773ada2..eedd666fe0f3125b5d2f8512ffa3334aba76d33a 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs @@ -144,6 +144,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory public bool SerializeVectoRunData { get; set; } + public List<string> MissingInputEntries { get; protected set; } = new List<string>(); /// <summary> /// Only for testing purposes @@ -161,6 +162,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory bool firstRun = true; var warning1Hz = false; if (!_simulate) { + if (MissingInputEntries.Count > 0) { + throw new VectoException(MissingInputEntries.Select(x => $"<{x}> is bad or missing.").Join("\n")); + } yield break; } foreach (var data in RunDataFactory.NextRun()) { diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs index d5593adef4db1dba489f21977ee3943c1dc07f89..e60f0bf68732c6c1f8e77996a6cbcfe7ef217360 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs @@ -1,4 +1,5 @@ -using TUGraz.VectoCommon.InputData; +using System.Linq; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.InputData; using TUGraz.VectoCore.InputData.FileIO.XML; @@ -101,10 +102,16 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory if (dataProvider is IMultistageVIFInputData multistageVifInputData && multistageVifInputData.VehicleInputData == null) { var inputComplete = multistageVifInputData.MultistageJobInputData.JobInputData.InputComplete; - var declType = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage + var declType = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage ?.Vehicle.VehicleDeclarationType; var final = declType == VehicleDeclarationType.final; - var exempted = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage? + + if (final) { + MissingInputEntries = multistageVifInputData.MultistageJobInputData.JobInputData.InvalidEntries + .Distinct().Where(x => !x.StartsWith("_")).ToList(); + } + + var exempted = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage? .Vehicle.ExemptedVehicle == true; if (!((final || exempted) && inputComplete)) {