Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 5366a037 authored by Harald Martini's avatar Harald Martini
Browse files

Updated filehandling in TempFileOutputWriter, to write two manufacturer...

Updated filehandling in TempFileOutputWriter, to write two manufacturer Reports (1 prim, 1 completed if the VIF is simulated)
parent 814ff3e2
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -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");
......
......@@ -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");
}
......
......@@ -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);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment