diff --git a/VectoCore/VectoCore/InputData/IVectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/IVectoRunDataFactoryFactory.cs deleted file mode 100644 index 9a992a969f40307b5ba8efe3b2f4545d0b2ec4a7..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCore/InputData/IVectoRunDataFactoryFactory.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TUGraz.VectoCore.InputData -{ - public interface IVectoRunDataFactoryFactory - { - - } -} diff --git a/VectoCore/VectoCore/InputData/Reader/IVectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/Reader/IVectoRunDataFactoryFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..b928e4a345969269f4d7f51de04f8e17ff017d04 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/IVectoRunDataFactoryFactory.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JetBrains.Annotations; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.InputData +{ + public interface IVectoRunDataFactoryFactory + { + IVectoRunDataFactory CreateEngineeringRunDataFactory(IEngineeringInputDataProvider inputDataProvider); + + /// <summary> + /// Creates a VectoRunDataFactory based on the type of inputDataProvider + /// </summary> + /// <param name="inputDataProvider"></param> + /// <param name="report"></param> + /// <returns></returns> + IVectoRunDataFactory CreateDeclarationRunDataFactory([NotNull] IInputDataProvider inputDataProvider, + IDeclarationReport report, IVTPReport vtpReport); + } +} diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..e138534474e60d42e74530eba9de56b419d4f530 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JetBrains.Annotations; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.XML; + +namespace TUGraz.VectoCore.InputData.Reader +{ + public class VectoRunDataFactoryFactory : IVectoRunDataFactoryFactory + { + /// <summary> + /// Creates a VectoRunDataFactory based on the type of inputDataProvider + /// </summary> + /// <param name="inputDataProvider"></param> + /// <param name="report"></param> + /// <returns></returns> + public IVectoRunDataFactory CreateDeclarationRunDataFactory([NotNull] IInputDataProvider inputDataProvider, + IDeclarationReport report, IVTPReport vtpReport) + { + if (inputDataProvider == null) + throw new ArgumentNullException(nameof(inputDataProvider)); + + switch (inputDataProvider) + { + case IVTPDeclarationInputDataProvider vtpProvider: + return CreateRunDataReader(vtpProvider, vtpReport); + case ISingleBusInputDataProvider singleBusProvider: + return CreateRunDataReader(singleBusProvider, report); + case IDeclarationInputDataProvider declDataProvider: + return CreateRunDataReader(declDataProvider, report); + case IMultistageVIFInputData multistageVifInputData: + return CreateRunDataReader(multistageVifInputData, report); + default: + break; + } + throw new VectoException("Unknown InputData for Declaration Mode!"); + } + + + private IVectoRunDataFactory CreateRunDataReader(IMultistageVIFInputData multistageVifInputData, IDeclarationReport report) + { + if (multistageVifInputData.VehicleInputData == null) { + return new DeclarationModeCompletedMultistageBusVectoRunDataFactory( + multistageVifInputData.MultistageJobInputData, + report); + } + else { + CastReport<DeclarationModeMultistageBusVectoRunDataFactory>(report); + return new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report); + } + } + + private IVectoRunDataFactory CreateRunDataReader(IDeclarationInputDataProvider declDataProvider, IDeclarationReport report) + { + var vehicleCategory = declDataProvider.JobInputData.Vehicle.VehicleCategory; + if (vehicleCategory.IsLorry()) { + return new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report); + } + + if (vehicleCategory.IsBus()) + switch (declDataProvider.JobInputData.Vehicle.VehicleCategory) + { + case VehicleCategory.HeavyBusCompletedVehicle: + return new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, report); + case VehicleCategory.HeavyBusPrimaryVehicle: + return new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, report); + default: + break; + } + + throw new Exception( + $"Could not create RunDataFactory for Vehicle Category{vehicleCategory}"); + } + + private IVectoRunDataFactory CreateRunDataReader(IVTPDeclarationInputDataProvider vtpProvider, IDeclarationReport report) + { + var vtpReport = CastReport<IVTPReport>(report); + + if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry()) + { + return new DeclarationVTPModeVectoRunDataFactoryLorries(vtpProvider, vtpReport); + } + + if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus()) + { + return new DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider, vtpReport); + } + + + throw new Exception( + $"Could not create RunDataFactory for Vehicle Category{vtpProvider.JobInputData.Vehicle.VehicleCategory}"); + } + + private IVectoRunDataFactory CreateRunDataReader(ISingleBusInputDataProvider singleBusProvider, IDeclarationReport report) + { + return new DeclarationModeSingleBusVectoRunDataFactory(singleBusProvider, report); + } + + + + + public IVectoRunDataFactory CreateEngineeringRunDataFactory(IEngineeringInputDataProvider inputDataProvider) + { + throw new NotImplementedException(); + } + + private T CastReport<T>(object report) + { + if (report is T castedReport) { + return castedReport; + } else { + throw new VectoException("Error creating VectoRunDataFactory - wrong ReportType"); + //return null; + } + } + } +} diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs new file mode 100644 index 0000000000000000000000000000000000000000..7bc75be024efa0c23b34e5d4f3ab1bfbf586a264 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Ninject.Modules; + +namespace TUGraz.VectoCore.InputData.Reader +{ + class VectoRunDataFactoryNinjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IVectoRunDataFactoryFactory>().To<VectoRunDataFactoryFactory>().InSingletonScope(); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs index 6d5135be918e460bafdded1cdbdd832eb0737d24..20cce3d9efe1c6cc84bd5e73e4c854950c63ff2d 100644 --- a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs +++ b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs @@ -44,7 +44,7 @@ using TUGraz.VectoHashing; namespace TUGraz.VectoCore.Models.Simulation { - public class SimulationFactoryNinjectModule : VectoNinjectModule + public class SimulatorFactoryNinjectModule : VectoNinjectModule { #region Overrides of NinjectModule diff --git a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs index 73361e4525fd39b46e21fad46f30903d8ca43296..3f0baeffc70462b2e8adc5a16c6b7e6a2b631675 100644 --- a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs +++ b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs @@ -31,6 +31,7 @@ using Ninject.Modules; using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.OutputData.XML; using TUGraz.VectoCore.OutputData.XML.ComponentWriter; @@ -60,10 +61,12 @@ namespace TUGraz.VectoCore LoadModule<XMLEngineeringWriterInjectModule>(); - LoadModule<SimulationFactoryNinjectModule>(); + LoadModule<SimulatorFactoryNinjectModule>(); LoadModule<XMLDeclarationReportFactoryNinjectModule>(); + LoadModule<VectoRunDataFactoryNinjectModule>(); + LoadModule<GroupWriterNinjectModule>(); LoadModule<ComponentWriterNinjectModule>(); diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 672a39bd589d3998794176dae7a5c9f6071791e3..9e48b4ef3c7b41ac5dda0409ea7373ede383d3e8 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -282,9 +282,11 @@ <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\IVectoRunDataFactoryFactory.cs" /> <Compile Include="InputData\Reader\ComponentData\BatteryInternalResistanceReader.cs" /> <Compile Include="InputData\Reader\ComponentData\BatteryMaxCurrentReader.cs" /> + <Compile Include="InputData\Reader\VectoRunDataFactoryFactory.cs" /> + <Compile Include="InputData\Reader\VectoRunDataFactoryNinjectModule.cs" /> <Compile Include="Models\SimulationComponent\Impl\BatterySystem.cs" /> <Compile Include="Models\SimulationComponent\Impl\PTODriveAuxiliary.cs" /> <Compile Include="Models\SimulationComponent\Impl\RoadSweeperAuxiliary.cs" />