From b27993bfc88c11e55b2e196b5e21f92d87acd126 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at> Date: Thu, 6 May 2021 14:18:41 +0200 Subject: [PATCH] added additional FileOutputVIFWriter to add multistage number to vif report file name --- .../OutputData/FileIO/FileOutputVIFWriter.cs | 69 +++++++++++++++++++ .../OutputData/FileIO/FileOutputWriter.cs | 11 +-- VectoCore/VectoCore/VectoCore.csproj | 1 + .../Multistage/MultistageVehicleTest.cs | 7 +- 4 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs new file mode 100644 index 0000000000..71ea074303 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs @@ -0,0 +1,69 @@ +using System; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Linq; + + +namespace TUGraz.VectoCore.OutputData.FileIO +{ + public class FileOutputVIFWriter : FileOutputWriter + { + private string _jobFile; + private readonly int _numberOfManufacturingStages; + private string _reportEndingPrefix = "VIF_Report_"; + + public string XMLMultistageReportFileName + { + get { return Path.ChangeExtension(_jobFile, $"{_reportEndingPrefix}{_numberOfManufacturingStages + 2}.xml"); } + } + + public FileOutputVIFWriter(string jobFile, int numberOfManufacturingStages) : base(jobFile) + { + _jobFile = jobFile; + RemoveExistingEndingPrefix(); + _numberOfManufacturingStages = numberOfManufacturingStages; + } + + private void RemoveExistingEndingPrefix() + { + var vifReportIndex = _jobFile.IndexOf(_reportEndingPrefix, StringComparison.Ordinal); + if (vifReportIndex == -1) + return; + + if (!_jobFile.Contains(_reportEndingPrefix)) + return; + + _jobFile = $"{_jobFile.Substring(0, vifReportIndex - 1)}.xml"; + } + + + public override void WriteReport(ReportType type, XDocument data) + { + var fileName = (string)null; + switch (type) { + case ReportType.DeclarationReportMultistageVehicleXML: + fileName = XMLMultistageReportFileName; + break; + default: + base.WriteReport(type, data); + break; + } + + if (fileName == null) + return; + + using (var writer = new FileStream(fileName, FileMode.Create)) + { + using (var xmlWriter = new XmlTextWriter(writer, Encoding.UTF8)) + { + xmlWriter.Formatting = Formatting.Indented; + data.WriteTo(xmlWriter); + xmlWriter.Flush(); + xmlWriter.Close(); + } + } + + } + } +} diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs index 7a4fd849c4..5d471afa18 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs @@ -84,13 +84,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO { get { return Path.ChangeExtension(_jobFile, Constants.FileExtensions.SumFile); } } - - public string XMLMultistageReportFileName - { - get { return Path.ChangeExtension(_jobFile, "VIF_Report.xml"); } - } - - + /// <summary> /// /// </summary> @@ -141,9 +135,6 @@ namespace TUGraz.VectoCore.OutputData.FileIO case ReportType.DeclarationVTPReportXML: fileName = XMLVTPReportName; break; - case ReportType.DeclarationReportMultistageVehicleXML: - fileName = XMLMultistageReportFileName; - break; default: throw new ArgumentOutOfRangeException("ReportType"); } diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 2b3fec2683..c393280676 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -435,6 +435,7 @@ <Compile Include="Models\Simulation\ISimulatorFactoryFactory.cs" /> <Compile Include="Models\Simulation\SimulationFactoryNinjectModule.cs" /> <Compile Include="OutputData\FileIO\BusAuxWriter.cs" /> + <Compile Include="OutputData\FileIO\FileOutputVIFWriter.cs" /> <Compile Include="OutputData\FileIO\JSONFileWriter.cs" /> <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" /> <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" /> diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs index d3617eed5c..19e893c5ce 100644 --- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs @@ -30,7 +30,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage const string InputFilePath = InputDirPath + "vecto_vehicle-stage_input_full-sample.xml"; const string VIFInputFile = VIFDirPath + "vecto_multistage_primary_vehicle_stage_2_3.xml"; - private const string vifResult = VIFDirPath + "vif_vehicle-sample.xml"; + private const string vifResult = VIFDirPath + "vif_vehicle-sample.VIF_Report_3.xml"; protected IXMLInputDataReader xmlInputReader; protected IXMLInputDataReader xmlVIFInputReader; @@ -58,8 +58,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage var vifReader = XmlReader.Create(vifFilename); var vifDataProvider = xmlInputReader.Create(vifReader) as IMultistageBusInputDataProvider; - - var writer = new FileOutputWriter(vifResult); + + var numberOfManufacturingStages = vifDataProvider.JobInputData.ManufacturingStages?.Count ?? 0; + var writer = new FileOutputVIFWriter(vifResult, numberOfManufacturingStages); var inputData = new XMLDeclarationVIFInputData(vifDataProvider, vehicle); var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer); -- GitLab