Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 62726a25 authored by Harald MARTINI's avatar Harald MARTINI
Browse files

Added private Methods for the creation of RunDataFactories,

Added method to determine if a job should be simulated
parent 47ba858d
No related branches found
No related tags found
No related merge requests found
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TUGraz.VectoCore.InputData
{
public interface IVectoRunDataFactoryFactory
{
}
}
......@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
using TUGraz.VectoCore.InputData.Reader.Impl;
......@@ -28,42 +29,149 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
IVTPReport vtpReport,
bool validate) : base(ExecutionMode.Declaration, writer, validate)
{
_simulate = CanBeSimulated(dataProvider);
CreateDeclarationDataReader(dataProvider, declarationReport, vtpReport);
//_simFactoryFactory = simFactoryFactory;
}
private bool CanBeSimulated(IInputDataProvider dataProvider)
{
if (dataProvider is IMultistageVIFInputData multistageVifInputData &&
multistageVifInputData.VehicleInputData == null) {
var inputComplete = multistageVifInputData.MultistageJobInputData.JobInputData.InputComplete;
var declType = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage
?.Vehicle.VehicleDeclarationType;
var final = declType == VehicleDeclarationType.final;
var exempted = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage?
.Vehicle.ExemptedVehicle == true;
if (!((final || exempted) && inputComplete)) {
return false;
}
}
return true;
}
private void CreateDeclarationDataReader(IInputDataProvider dataProvider, IDeclarationReport declarationReport, IVTPReport vtpReport)
{
if (dataProvider is IVTPDeclarationInputDataProvider vtpProvider)
{
var report = vtpReport ?? new XMLVTPReport(ReportWriter);
if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
{
DataReader = new DeclarationVTPModeVectoRunDataFactoryLorries(vtpProvider, report);
switch (dataProvider) {
case IVTPDeclarationInputDataProvider vtpProvider: {
DataReader = CreateRunDataReader(vtpProvider, vtpReport);
return;
}
if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus())
{
DataReader = new DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider, report);
case ISingleBusInputDataProvider singleBusProvider: {
DataReader = CreateRunDataReader(singleBusProvider, declarationReport);
return;
}
case IDeclarationInputDataProvider declDataProvider: {
DataReader = CreateRunDataReader(declDataProvider, declarationReport);
return;
}
case IMultistageVIFInputData multistageVifInputData: {
if (multistageVifInputData.VehicleInputData == null)
{
var reportCompleted = new XMLDeclarationReportCompletedVehicle(ReportWriter, true)
{
PrimaryVehicleReportInputData = multistageVifInputData.MultistageJobInputData.JobInputData.PrimaryVehicle,
};
DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
multistageVifInputData.MultistageJobInputData,
reportCompleted);
}
else
{
var report = declarationReport ?? new XMLDeclarationReportMultistageBusVehicle(ReportWriter);
//DataReader = CreateRunDataReader(multistageVifInputData, report);
DataReader = new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report);
_followingSimulatorFactoryCreator = () => {
var container = new StandardKernel(
new VectoNinjectModule()
);
var inputDataReader = container.Get<IXMLInputDataReader>();
var inputData =
inputDataReader.CreateDeclaration(
XmlReader.Create(ReportWriter.MultistageXmlReport.ToString().ToStream()));
#pragma warning disable 618
return CreateSimulatorFactory(_mode, new XMLDeclarationVIFInputData(inputData as IMultistageBusInputDataProvider, null), ReportWriter, report, vtpReport, Validate);
#pragma warning restore 618
};
}
return;
}
case IMultistagePrimaryAndStageInputDataProvider multiStagePrimaryAndStageInputData: {
System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
var tempOutputWriter = new TempFileOutputWriter(ReportWriter, ReportType.DeclarationReportManufacturerXML);
var originalReportWriter = ReportWriter;
ReportWriter = tempOutputWriter;
var tempPrimaryReport = new XMLDeclarationReportPrimaryVehicle(tempOutputWriter, true);
DataReader = CreateRunDataReader(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
//DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
CreateFollowUpSimulatorFactory = true;
_followingSimulatorFactoryCreator = (() => {
//replace with dependency injection
var container = new StandardKernel(
new VectoNinjectModule()
);
try
{
var inputDataReader = container.Get<IXMLInputDataReader>();
var primaryInputData = inputDataReader.CreateDeclaration(tempOutputWriter
.GetDocument(ReportType.DeclarationReportPrimaryVehicleXML).CreateReader());
//var primaryInputData = inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter).XMLPrimaryVehicleReportName);
var vifInputData = new XMLDeclarationVIFInputData(
primaryInputData as IMultistageBusInputDataProvider,
multiStagePrimaryAndStageInputData.StageInputData);
var manStagesCount =
vifInputData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? -1;
originalReportWriter.NumberOfManufacturingStages = manStagesCount;
#pragma warning disable 618
var factory = CreateSimulatorFactory(_mode,
#pragma warning restore 618
vifInputData, originalReportWriter,
null,
vtpReport,
Validate);
factory.CreateFollowUpSimulatorFactory = true;
return factory;
}
catch (Exception ex)
{
Log.Error($"Failed to create additional Simulation run: {ex.Message}");
return null;
}
});
return;
}
return;
default:
throw new VectoException("Unknown InputData for Declaration Mode!");
}
}
if (dataProvider is ISingleBusInputDataProvider)
{
var singleBus = dataProvider as ISingleBusInputDataProvider;
private IVectoRunDataFactory CreateRunDataReader(IDeclarationInputDataProvider declDataProvider,
IDeclarationReport declarationReport)
{
var vehicleCategory = declDataProvider.JobInputData.Vehicle.VehicleCategory;
if(vehicleCategory.IsLorry()) {
var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
DataReader = new DeclarationModeSingleBusVectoRunDataFactory(singleBus, report);
return;
return new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report);
}
if (dataProvider is IDeclarationInputDataProvider declDataProvider)
{
if (declDataProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
{
var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
DataReader = new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report);
return;
}
if(vehicleCategory.IsBus())
switch (declDataProvider.JobInputData.Vehicle.VehicleCategory)
{
case VehicleCategory.HeavyBusCompletedVehicle:
......@@ -73,128 +181,43 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
{
PrimaryVehicleReportInputData = declDataProvider.PrimaryVehicleData,
};
DataReader = new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, reportCompleted);
return;
return new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, reportCompleted);
case VehicleCategory.HeavyBusPrimaryVehicle:
var reportPrimary = declarationReport ??
new XMLDeclarationReportPrimaryVehicle(ReportWriter,
declDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, reportPrimary);
return;
return new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, reportPrimary);
default:
System.Diagnostics.Debug.Assert(false);
break;
}
}
if (dataProvider is IMultistageVIFInputData multistageVifInputData)
{
//ToDo FK: check if data completed == true && final
var inputComplete = multistageVifInputData.MultistageJobInputData.JobInputData.InputComplete;
var declType = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage
?.Vehicle.VehicleDeclarationType;
var final = declType == VehicleDeclarationType.final;
var exempted = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage?
.Vehicle.ExemptedVehicle == true;
throw new Exception(
$"Could not create RunDataFactory for Vehicle Category{vehicleCategory}");
}
if (multistageVifInputData.VehicleInputData == null)
{ // eigener writer für in-memory
var reportCompleted = new XMLDeclarationReportCompletedVehicle(ReportWriter, true)
{
PrimaryVehicleReportInputData = multistageVifInputData.MultistageJobInputData.JobInputData.PrimaryVehicle,
};
DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
multistageVifInputData.MultistageJobInputData,
reportCompleted);
if (!((final || exempted) && inputComplete))
{
_simulate = false;
}
}
else
{
var report = declarationReport ?? new XMLDeclarationReportMultistageBusVehicle(ReportWriter);
DataReader = new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report);
_followingSimulatorFactoryCreator = () => {
var container = new StandardKernel(
new VectoNinjectModule()
);
var inputDataReader = container.Get<IXMLInputDataReader>();
var mode = _mode;
var inputData =
inputDataReader.CreateDeclaration(
XmlReader.Create(ReportWriter.MultistageXmlReport.ToString().ToStream()));
//inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter)
// .XMLMultistageReportFileName);
#pragma warning disable 618
return CreateSimulatorFactory(_mode, new XMLDeclarationVIFInputData(inputData as IMultistageBusInputDataProvider, null), ReportWriter, report, vtpReport, Validate);
#pragma warning restore 618
};
private IVectoRunDataFactory CreateRunDataReader(ISingleBusInputDataProvider singleBusProvider,
IDeclarationReport declarationReport)
{
var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
return new DeclarationModeSingleBusVectoRunDataFactory(singleBusProvider, report);
}
}
return;
private IVectoRunDataFactory CreateRunDataReader(IVTPDeclarationInputDataProvider vtpProvider,
IVTPReport vtpReport)
{
var report = vtpReport ?? new XMLVTPReport(ReportWriter);
if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry()) {
return new DeclarationVTPModeVectoRunDataFactoryLorries(vtpProvider, report);
}
if (dataProvider is IMultistagePrimaryAndStageInputDataProvider multiStagePrimaryAndStageInputData)
{
System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
var tempOutputWriter = new TempFileOutputWriter(ReportWriter, ReportType.DeclarationReportManufacturerXML);
var originalReportWriter = ReportWriter;
ReportWriter = tempOutputWriter;
var tempPrimaryReport = new XMLDeclarationReportPrimaryVehicle(tempOutputWriter, true);
DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
var reportPrimary = new XMLDeclarationReportPrimaryVehicle(ReportWriter,
true);
CreateFollowUpSimulatorFactory = true;
_followingSimulatorFactoryCreator = (() => {
//replace with dependency injection
var container = new StandardKernel(
new VectoNinjectModule()
);
try
{
var inputDataReader = container.Get<IXMLInputDataReader>();
var primaryInputData = inputDataReader.CreateDeclaration(tempOutputWriter
.GetDocument(ReportType.DeclarationReportPrimaryVehicleXML).CreateReader());
//var primaryInputData = inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter).XMLPrimaryVehicleReportName);
var vifInputData = new XMLDeclarationVIFInputData(
primaryInputData as IMultistageBusInputDataProvider,
multiStagePrimaryAndStageInputData.StageInputData);
var manStagesCount =
vifInputData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? -1;
originalReportWriter.NumberOfManufacturingStages = manStagesCount;
#pragma warning disable 618
var factory = CreateSimulatorFactory(_mode,
#pragma warning restore 618
vifInputData, originalReportWriter,
null,
vtpReport,
Validate);
factory.CreateFollowUpSimulatorFactory = true;
return factory;
}
catch (Exception ex)
{
Log.Error($"Failed to create additional Simulation run: {ex.Message}");
return null;
}
});
return;
if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus()) {
return new DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider, report);
}
throw new VectoException("Unknown InputData for Declaration Mode!");
throw new Exception(
$"Could not create RunDataFactory for Vehicle Category{vtpProvider.JobInputData.Vehicle.VehicleCategory}");
}
#region Overrides of SimulatorFactory
......
......@@ -18,35 +18,24 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
CreateEngineeringDataReader(dataProvider);
}
private void CreateEngineeringDataReader(IInputDataProvider dataProvider)
{
if (dataProvider is IVTPEngineeringInputDataProvider vtpProvider)
{
if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
{
switch (dataProvider) {
case IVTPEngineeringInputDataProvider vtpProvider when vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry():
DataReader = new EngineeringVTPModeVectoRunDataFactoryLorries(vtpProvider);
}
if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus())
{
return;
case IVTPEngineeringInputDataProvider vtpProvider when vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus():
DataReader = new EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider);
}
return;
}
if (dataProvider is IEngineeringInputDataProvider engDataProvider)
{
if (engDataProvider.JobInputData.JobType == VectoSimulationJobType.EngineOnlySimulation)
{
return;
case IEngineeringInputDataProvider engDataProvider when engDataProvider.JobInputData.JobType == VectoSimulationJobType.EngineOnlySimulation:
DataReader = new EngineOnlyVectoRunDataFactory(engDataProvider);
}
else
{
return;
case IEngineeringInputDataProvider engDataProvider:
DataReader = new EngineeringModeVectoRunDataFactory(engDataProvider);
}
return;
return;
default:
throw new VectoException("Unknown InputData for Engineering Mode!");
}
throw new VectoException("Unknown InputData for Engineering Mode!");
}
#region Overrides of SimulatorFactory
......
......@@ -282,6 +282,7 @@
<Compile Include="InputData\FileIO\XML\Declaration\IXMLDeclarationInputDataReader.cs" />
<Compile Include="InputData\FileIO\XML\IXMLInputDataReader.cs" />
<Compile Include="InputData\FileIO\XML\XMLInputDataNinjectModule.cs" />
<Compile Include="InputData\IVectoRunDataFactoryFactory.cs" />
<Compile Include="InputData\Reader\ComponentData\BatteryInternalResistanceReader.cs" />
<Compile Include="InputData\Reader\ComponentData\BatteryMaxCurrentReader.cs" />
<Compile Include="Models\SimulationComponent\Impl\BatterySystem.cs" />
......@@ -525,6 +526,7 @@
<Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLMultistageBusReport.cs" />
<Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLPrimaryBusVehicleReport.cs" />
<Compile Include="OutputData\XML\GroupWriter\XMLGroupWriterNinjectModule.cs" />
<Compile Include="Utils\Ninject\PerMethodInstanceProvider.cs" />
<Compile Include="Utils\Ninject\UseFirstArgumentAsInstanceProvider.cs" />
<Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationReaderInjectModule.cs" />
<Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationVehicleDataProvider.cs" />
......
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