diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index 7c9aa0b33f5fb207188ca7a7cb1b7b26d524f390..159bc878c56bc49583e567d30d6e73b14069737d 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -68,6 +68,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private Func<ISimulatorFactory> _followingSimulatorFactoryCreator = null; + private bool _simulate = true; + public ISimulatorFactory FollowUpSimulatorFactory { get => CreateFollowUpSimulatorFactory ? _followingSimulatorFactoryCreator?.Invoke() : null; @@ -86,6 +88,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public SimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer, IDeclarationReport declarationReport = null, IVTPReport vtpReport = null, bool validate = true) { + System.Diagnostics.Debug.WriteLine("Created Simulator Factory"); Log.Info("########## VectoCore Version {0} ##########", Assembly.GetExecutingAssembly().GetName().Version); JobNumber = Interlocked.Increment(ref _jobNumberCounter); _mode = mode; @@ -174,28 +177,29 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory( multistageVifInputData.MultistageJobInputData, reportCompleted); - if ((final || exempted) && inputComplete) { - _followingSimulatorFactoryCreator = () => { - var container = new StandardKernel( - new VectoNinjectModule() - ); - var inputDataReader = container.Get<IXMLInputDataReader>(); - - var mode = _mode; - var inputData = - inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter) - .XMLMultistageReportFileName); - - return new SimulatorFactory( - mode: _mode, - dataProvider: new XMLDeclarationVIFInputData( - inputData as IMultistageBusInputDataProvider, null), - writer: ReportWriter, - declarationReport: reportCompleted, - vtpReport: vtpReport, - validate: Validate); - - }; + if (!((final || exempted) && inputComplete)) { + _simulate = false; + //_followingSimulatorFactoryCreator = () => { + // var container = new StandardKernel( + // new VectoNinjectModule() + // ); + // var inputDataReader = container.Get<IXMLInputDataReader>(); + + // var mode = _mode; + // var inputData = + // inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter) + // .XMLMultistageReportFileName); + + // return new SimulatorFactory( + // mode: _mode, + // dataProvider: new XMLDeclarationVIFInputData( + // inputData as IMultistageBusInputDataProvider, null), + // writer: ReportWriter, + // declarationReport: reportCompleted, + // vtpReport: vtpReport, + // validate: Validate); + + //}; } } else { @@ -225,7 +229,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl { System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle); - var tempOutputWriter = new TempFileOutputWriter(ReportWriter.JobFile); + var tempOutputWriter = new TempFileOutputWriter(ReportWriter.JobFile, ReportType.DeclarationReportManufacturerXML); var originalReportWriter = ReportWriter; ReportWriter = tempOutputWriter; @@ -327,7 +331,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl { var i = 0; var warning1Hz = false; - + if (!_simulate) { + yield break; + } foreach (var data in DataReader.NextRun()) { var current = i++; var d = data; diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs index f6b382f1f21d2de4436e25c16ed99506bbeecacd..a6a94c4656e9ca15aec0118bc3e942640ab905e1 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs @@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO { public class FileOutputWriter : LoggingObject, IOutputDataWriter { - private readonly string _jobFile; + protected readonly string _jobFile; public string JobFile => _jobFile; @@ -82,7 +82,8 @@ namespace TUGraz.VectoCore.OutputData.FileIO public string PDFReportName => Path.ChangeExtension(_jobFile, Constants.FileExtensions.PDFReport); - public string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER.xml"); + public virtual string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER.xml"); + public string XMLCustomerReportName => Path.ChangeExtension(_jobFile, "RSLT_CUSTOMER.xml"); diff --git a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs index a6c934e957bfc19f99d42c66589c6b80f03d6c4f..94a3bd18a17460810d88c015e7d42d1dff193fbf 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs @@ -3,24 +3,42 @@ using System.Collections.Generic; using System.Data; using System.IO; using System.Xml.Linq; +using Castle.Core.Internal; using TUGraz.VectoCommon.Models; namespace TUGraz.VectoCore.OutputData.FileIO { public class TempFileOutputWriter : FileOutputWriter { - private Dictionary<ReportType, XDocument> _writtenReports = new Dictionary<ReportType, XDocument>(); + private readonly Dictionary<ReportType, XDocument> _storedReports = new Dictionary<ReportType, XDocument>(); + private readonly HashSet<ReportType> _reportsToWrite; - public TempFileOutputWriter(string jobFile) : base(jobFile) - { + #region Overrides of FileOutputWriter + + public override string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER_PRIMARY.xml"); + + #endregion + /// <summary> + /// Stores all written Documents by default. + /// </summary> + /// <param name="jobFile"></param> + /// <param name="reportsToWrite">ReportTypes specified here are written to disk</param> + public TempFileOutputWriter(string jobFile, params ReportType[] reportsToWrite) : base(jobFile) + { + _reportsToWrite = new HashSet<ReportType>(); + if (!reportsToWrite.IsNullOrEmpty()) { + foreach (var reportType in reportsToWrite) { + _reportsToWrite.Add(reportType); + } + } } #region Overrides of FileOutputWriter public override IDictionary<ReportType, string> GetWrittenFiles() { - return new Dictionary<ReportType, string>(); + return base.GetWrittenFiles(); } #endregion @@ -38,9 +56,11 @@ namespace TUGraz.VectoCore.OutputData.FileIO throw new ArgumentOutOfRangeException("PDF is not supported by TempFileOutputWriter"); } - + if (_reportsToWrite.Contains(type)) { + base.WriteReport(type, data); + } - _writtenReports.Add(type, data); + _storedReports.Add(type, data); } public override void WriteReport(ReportType type, Stream data) @@ -52,7 +72,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO public XDocument GetDocument(ReportType type) { - var docStored = _writtenReports.TryGetValue(type, out var report); + var docStored = _storedReports.TryGetValue(type, out var report); if (!docStored) { Log.Warn($"No Document with type {type} stored"); } diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs index c635441bc2e9125381c64a632e2b8f7cbd5e55c7..9f9354c1e525a38a22eaa87e2410032e1487c166 100644 --- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs @@ -29,6 +29,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage private FileOutputWriter _sumFileWriter; private SummaryDataContainer _sumContainer; private JobContainer _jobContainer; + + private FileOutputWriter _fileoutputWriter; + private TempFileOutputWriter _tempFileOutputWriter; private ExecutionMode _mode = ExecutionMode.Declaration; private string _outputDirectory; @@ -64,19 +67,20 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage { var inputFile = Path.GetFullPath(CompletedExempted); var input = JSONInputDataFactory.ReadJsonJob(inputFile); - var fileWriter = StartSimulation(input); + StartSimulation(input); while (!_jobContainer.AllCompleted) { //Busy wait } - var writtenFiles = fileWriter.GetWrittenFiles(); - ShowWrittenFiles(fileWriter.GetWrittenFiles()); + var writtenFiles = GetWrittenFiles(); + ShowWrittenFiles(writtenFiles); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML)); + Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName)); } @@ -86,7 +90,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage { var inputFile = Path.GetFullPath(InterimExempted); var input = JSONInputDataFactory.ReadJsonJob(inputFile); - var fileWriter = StartSimulation(input); + StartSimulation(input); while (!_jobContainer.AllCompleted) @@ -94,12 +98,25 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage //Busy wait } - var writtenFiles = fileWriter.GetWrittenFiles(); - ShowWrittenFiles(fileWriter.GetWrittenFiles()); + var writtenFiles = GetWrittenFiles(); + ShowWrittenFiles(writtenFiles); + + Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName)); + Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName)); + Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML)); + } + + private IList<string> GetWrittenFiles() + { + var files = new List<string>(); + var outputWriters = _jobContainer.GetOutputDataWriters(); + foreach (var outputDataWriter in outputWriters) { + files.AddRange(outputDataWriter.GetWrittenFiles().Values); + } + + return files; } //SpecialCase II @@ -108,7 +125,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage { var inputFile = Path.GetFullPath(CompletedDiesel); var input = JSONInputDataFactory.ReadJsonJob(inputFile); - var fileWriter = StartSimulation(input); + StartSimulation(input); while (!_jobContainer.AllCompleted) @@ -116,12 +133,13 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage //Busy wait } - var writtenFiles = fileWriter.GetWrittenFiles(); - ShowWrittenFiles(fileWriter.GetWrittenFiles()); + var writtenFiles = GetWrittenFiles(); + ShowWrittenFiles(writtenFiles); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML)); + Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName)); } @@ -132,7 +150,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage { var inputFile = Path.GetFullPath(InterimDiesel); var input = JSONInputDataFactory.ReadJsonJob(inputFile); - var fileWriter = StartSimulation(input); + + + StartSimulation(input); while (!_jobContainer.AllCompleted) @@ -140,19 +160,21 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage //Busy wait } - var writtenFiles = fileWriter.GetWrittenFiles(); - ShowWrittenFiles(fileWriter.GetWrittenFiles()); + var writtenFiles = GetWrittenFiles(); + ShowWrittenFiles(writtenFiles); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML)); - Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML)); + Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName)); + Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName)); + Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName)); + Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName)); } - private FileOutputWriter StartSimulation(IInputDataProvider input) + private void StartSimulation(IInputDataProvider input) { - var fileWriter = new FileOutputWriter(_outputDirectory); - var runsFactory = new SimulatorFactory(_mode, input, fileWriter) + _fileoutputWriter = new FileOutputWriter(_outputDirectory); + _tempFileOutputWriter = new TempFileOutputWriter(_outputDirectory); + var runsFactory = new SimulatorFactory(_mode, input, _fileoutputWriter) { WriteModalResults = true, ModalResults1Hz = true, @@ -166,19 +188,17 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage _jobContainer.AddRuns(runsFactory); _jobContainer.Execute(); - return fileWriter; } - private void ShowWrittenFiles(IDictionary<ReportType, string> getWrittenFiles) + private void ShowWrittenFiles(IList<string> writtenFiles) { - if (getWrittenFiles.Count == 0) + if (writtenFiles.Count == 0) { TestContext.WriteLine("No Files Written"); } - foreach (var keyValuePair in getWrittenFiles) + foreach (var fileName in writtenFiles) { - TestContext.WriteLine(keyValuePair.Key.ToString()); - TestContext.WriteLine(keyValuePair.Value.ToString()); + TestContext.WriteLine(fileName); } }