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