diff --git a/VectoMockup/VectoMockup/Factories/VectoMockupRunDataFactory.cs b/VectoMockup/VectoMockup/Factories/VectoMockupRunDataFactory.cs deleted file mode 100644 index 2dadca83067062169dc042ce27a118876fcfd6c7..0000000000000000000000000000000000000000 --- a/VectoMockup/VectoMockup/Factories/VectoMockupRunDataFactory.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.InputData; -using TUGraz.VectoCore.InputData.Reader.Impl; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoMockup.RunData; - -namespace TUGraz.VectoMockup.Factories -{ - public class VectoMockUpRunDataFactoryFactory : IVectoRunDataFactoryFactory - { - #region Implementation of IVectoRunDataFactoryFactory - - - - public IVectoRunDataFactory CreateDeclarationRunDataFactory(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) - { - throw new NotImplementedException(); - } - - private IVectoRunDataFactory CreateRunDataReader(IDeclarationInputDataProvider declDataProvider, IDeclarationReport report) - { - var vehicleCategory = declDataProvider.JobInputData.Vehicle.VehicleCategory; - if (vehicleCategory.IsLorry()) - { - return new DeclarationModeMockupTruckVectoRunDataFactory(declDataProvider, report); - } - - if (vehicleCategory.IsBus()) - - switch (declDataProvider.JobInputData.Vehicle.VehicleCategory) - { - case VehicleCategory.HeavyBusCompletedVehicle: - throw new NotImplementedException(); - return new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, report); - case VehicleCategory.HeavyBusPrimaryVehicle: - return new DeclarationModeMockupPrimaryBusVectoRunDataFactory(declDataProvider, report); - default: - break; - } - - throw new Exception( - $"Could not create RunDataFactory for Vehicle Category{vehicleCategory}"); - } - - private IVectoRunDataFactory CreateRunDataReader(ISingleBusInputDataProvider singleBusProvider, IDeclarationReport report) - { - throw new NotImplementedException(); - } - - private IVectoRunDataFactory CreateRunDataReader(IVTPDeclarationInputDataProvider vtpProvider, IVTPReport vtpReport) - { - throw new NotImplementedException(); - } - - public IVectoRunDataFactory CreateEngineeringRunDataFactory(IEngineeringInputDataProvider inputDataProvider) - { - throw new NotImplementedException(); - } - - #endregion - } -} diff --git a/VectoMockup/VectoMockup/Factories/XMLDeclarationMockupReportFactory.cs b/VectoMockup/VectoMockup/Factories/XMLDeclarationMockupReportFactory.cs deleted file mode 100644 index 6992db09a597edb3a634c25424ff3362daacb520..0000000000000000000000000000000000000000 --- a/VectoMockup/VectoMockup/Factories/XMLDeclarationMockupReportFactory.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.XML; -using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; -using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; -using TUGraz.VectoMockup.Reports; - -namespace TUGraz.VectoMockup.Factories -{ - class XMLDeclarationMockupReportFactory : IXMLDeclarationReportFactory - { - private readonly IManufacturerReportFactory _mrfFactory; - private readonly ICustomerInformationFileFactory _cifFactory; - - #region Implementation of IXMLDeclarationReportFactory - - - public XMLDeclarationMockupReportFactory(IManufacturerReportFactory mrfFactory, ICustomerInformationFileFactory cifFactory) - { - _mrfFactory = mrfFactory; - _cifFactory = cifFactory; - } - public IDeclarationReport CreateReport(IInputDataProvider input, IOutputDataWriter outputWriter) - { - switch (input) - { - case IMultistageBusInputDataProvider multistageBusInputDataProvider: - break; - case ISingleBusInputDataProvider singleBusInputDataProvider: - return new XMLDeclarationReport(outputWriter); - case IDeclarationInputDataProvider declarationInputDataProvider: - return CreateDeclarationReport(declarationInputDataProvider, outputWriter); - case IMultiStageTypeInputData multiStageTypeInputData: - break; - case IMultistageVIFInputData multistageVifInputData: - return CreateDeclarationReport(multistageVifInputData, outputWriter); - case IPrimaryVehicleInformationInputDataProvider primaryVehicleInformationInputDataProvider: - break; - case IVTPDeclarationInputDataProvider vtpProvider: - { - return null; - } - case IMultistagePrimaryAndStageInputDataProvider multistagePrimaryAndStageInputData: - { - return null; //No Report for this type (handled in two simulation steps) - } - default: - break; - - } - throw new VectoException($"Could not create Declaration Report for {input.GetType()}"); - } - - public IVTPReport CreateVTPReport(IInputDataProvider input, IOutputDataWriter outputWriter) - { - return input is IVTPDeclarationInputDataProvider - ? new XMLVTPReport(outputWriter) - : null; - } - - private IDeclarationReport CreateDeclarationReport(IMultistageVIFInputData multistageVifInputData, IOutputDataWriter outputDataWriter) - { - if (multistageVifInputData.VehicleInputData == null) - { - var reportCompleted = new XMLDeclarationReportCompletedVehicle(outputDataWriter, true) - { - PrimaryVehicleReportInputData = multistageVifInputData.MultistageJobInputData.JobInputData.PrimaryVehicle, - }; - return reportCompleted; - } - else - { - var report = new XMLDeclarationReportMultistageBusVehicle(outputDataWriter); - return report; - } - } - - private IDeclarationReport CreateDeclarationReport(IDeclarationInputDataProvider declarationInputDataProvider, - IOutputDataWriter outputDataWriter) - { - var vehicleCategory = declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory; - if (vehicleCategory.IsLorry()) - { - return new XMLDeclarationMockupReport(outputDataWriter, _mrfFactory, _cifFactory); - } - - if (vehicleCategory.IsBus()) - switch (declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory) - { - case VehicleCategory.HeavyBusCompletedVehicle: - return new XMLDeclarationReportCompletedVehicle(outputDataWriter, - declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle) - { - PrimaryVehicleReportInputData = declarationInputDataProvider.PrimaryVehicleData, - }; - case VehicleCategory.HeavyBusPrimaryVehicle: - return new XMLDeclarationReportPrimaryVehicle(outputDataWriter, - declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle); - - default: - break; - } - - throw new Exception( - $"Could not create DeclarationReport for Vehicle Category{vehicleCategory}"); - } - - public IVTPReport CreateVTPReport(IVTPDeclarationInputDataProvider input, IOutputDataWriter outputWriter) - { - throw new NotImplementedException(); - } - - #endregion - } -} diff --git a/VectoMockup/VectoMockup/MockupResultReader.cs b/VectoMockup/VectoMockup/MockupResultReader.cs index d341ff436273f8e62c2f1fe0f0f7918edf91b9fb..016935af53a179317ec856a55df7f9a4a54af6d4 100644 --- a/VectoMockup/VectoMockup/MockupResultReader.cs +++ b/VectoMockup/VectoMockup/MockupResultReader.cs @@ -38,6 +38,10 @@ namespace TUGraz.VectoMockup //CIF XMLNames.CIF_OutputDataType_ConventionalLorryOutputType, + + + //VIF //TODO: seperate namespaces + "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1", }; private static HashSet<string> hev = new HashSet<string>() { diff --git a/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs b/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs index 725ecc4e0749b4ed81aea7b2939d7dd23266e735..174fbc94af7e5dc2e0edcdfb2df2a32674ec51bc 100644 --- a/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs +++ b/VectoMockup/VectoMockup/Ninject/CIFMockupModule.cs @@ -1,107 +1,32 @@ -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using System.Xml.XPath; -using Ninject; +using Ninject; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.OutputData.XML; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; -using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportGroupWriter; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; using TUGraz.VectoCore.Utils; -using TUGraz.VectoMockup.Factories; using TUGraz.VectoMockup.Reports; namespace TUGraz.VectoMockup.Ninject { - // ReSharper disable once InconsistentNaming - public class CIFMockupModule : AbstractNinjectModule + // ReSharper disable once InconsistentNaming + public class CIFMockupModule : AbstractNinjectModule { #region Overrides of NinjectModule public override void Load() { Kernel.Bind<ICustomerInformationFileFactory>().To<MockupCustomerInformationFileFactory>() - .WhenInjectedExactlyInto<XMLDeclarationMockupReportFactory>().InSingletonScope(); + .WhenInjectedExactlyInto<MockupReportFactory>().InSingletonScope(); } #endregion } - public class MockupCustomerReport : IXMLCustomerReport, IXMLMockupReport - { - private readonly AbstractCustomerReport _originalCustomerReport; - private XNamespace Cif = AbstractCustomerReport.Cif; - public MockupCustomerReport(IXMLCustomerReport originalReport) - { - _originalCustomerReport = originalReport as AbstractCustomerReport; - _outputData = _originalCustomerReport.OutputDataType; - Results = new XElement(Cif + XMLNames.Report_Results); - } - - private XElement Results; - private readonly string _outputData; - private VectoRunData _modelData; - - #region Implementation of IXMLCustomerReport - - public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - _modelData = modelData; - _originalCustomerReport.Initialize(modelData, fuelModes); - } - - public XDocument Report - { - get - { - var report = _originalCustomerReport.Report; - report.XPathSelectElements($"//*[name()='{XMLNames.Report_Results}']").Single().ReplaceWith(Results); - - return report; - - - } - } - - public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) - { - _originalCustomerReport.WriteResult(resultValue); - } - - public void GenerateReport(XElement resultSignature) - { - _originalCustomerReport.GenerateReport(resultSignature); - } - - #endregion - - #region Implementation of IXMLMockupReport - - public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue) - { - Results.Add(MockupResultReader.GetCIFMockupResult(_outputData, resultValue, Cif + "Result", _modelData)); - } - - public void WriteMockupSummary(XMLDeclarationReport.ResultEntry resultValue) - { - Results.AddFirst(new XElement(Cif + "Status", "success")); - Results.AddFirst(new XComment("Always prints success at the moment")); - Results.Add(MockupResultReader.GetCIFMockupResult(_outputData, resultValue, Cif + "Summary", _modelData)); - } - - #endregion - } - - public class MockupCustomerInformationFileFactory : ICustomerInformationFileFactory + public class MockupCustomerInformationFileFactory : ICustomerInformationFileFactory { private readonly ICustomerInformationFileFactory _cifFactory; diff --git a/VectoMockup/VectoMockup/Ninject/MRFMockupModule.cs b/VectoMockup/VectoMockup/Ninject/MRFMockupModule.cs index d601c387d0a3a4692c71d4fe0e361019722858bf..02d6f3a64f00568c1b71d325bfb5f734461dc29f 100644 --- a/VectoMockup/VectoMockup/Ninject/MRFMockupModule.cs +++ b/VectoMockup/VectoMockup/Ninject/MRFMockupModule.cs @@ -1,116 +1,32 @@ -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using System.Xml.XPath; -using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.OutputData.XML; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; -using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportGroupWriter; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportGroupWriter.CompletedBus; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter.Components; using TUGraz.VectoCore.Utils; -using TUGraz.VectoMockup.Factories; using TUGraz.VectoMockup.Reports; namespace TUGraz.VectoMockup.Ninject { - // ReSharper disable once InconsistentNaming - public class MRFMockupModule : AbstractNinjectModule + // ReSharper disable once InconsistentNaming + public class MRFMockupModule : AbstractNinjectModule { #region Overrides of NinjectModule public override void Load() { Kernel.Bind<IManufacturerReportFactory>().To<MockupManufacturerReportFactory>() - .WhenInjectedExactlyInto<XMLDeclarationMockupReportFactory>().InSingletonScope(); + .WhenInjectedExactlyInto<MockupReportFactory>().InSingletonScope(); } #endregion } - public class MockupManufacturerReport : IXMLManufacturerReport, IXMLMockupReport - { - private AbstractManufacturerReport _ixmlManufacturerReportImplementation; - private VectoRunData _modelData; - - private XNamespace Mrf = AbstractManufacturerReport.Mrf; - private readonly string _outputData; - private XElement Results { get; set; } - public MockupManufacturerReport(IXMLManufacturerReport originalManufacturerReport) - { - _ixmlManufacturerReportImplementation = originalManufacturerReport as AbstractManufacturerReport; - _outputData = _ixmlManufacturerReportImplementation.OutputDataType; - - Results = new XElement(Mrf + XMLNames.Report_Results); - } - - public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue) - { - - Results.Add(MockupResultReader.GetMRFMockupResult(_outputData, resultValue, Mrf + "Result", _modelData)); - - - - } - - public void WriteMockupSummary(XMLDeclarationReport.ResultEntry resultValue) - { - Results.AddFirst(new XElement(Mrf + "Status", "success")); - Results.AddFirst(new XComment("Always prints success at the moment")); - //Results.Add(MockupResultReader.GetMRFMockupResult(OutputDataType, resultValue, Mrf + "Summary", _ovc)); - } - - - #region Implementation of IXMLManufacturerReport - - - public void InitializeVehicleData(IDeclarationInputDataProvider inputData) - { - _ixmlManufacturerReportImplementation.InitializeVehicleData(inputData); - } - - public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - _modelData = modelData; - _ixmlManufacturerReportImplementation.Initialize(modelData, fuelModes); - } - - public XDocument Report - { - get - { - var report = _ixmlManufacturerReportImplementation.Report; - report.XPathSelectElements($"//*[name()='{XMLNames.Report_Results}']").Single().ReplaceWith(Results); - - return report; - } - } - - public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) - { - _ixmlManufacturerReportImplementation.WriteResult(resultValue); - } - - public void GenerateReport() - { - _ixmlManufacturerReportImplementation.GenerateReport(); - } - - #endregion - - - - } - - public class MockupManufacturerReportFactory : IManufacturerReportFactory + public class MockupManufacturerReportFactory : IManufacturerReportFactory { private IManufacturerReportFactory _manufacturerReportFactoryImplementation; diff --git a/VectoMockup/VectoMockup/Ninject/MockupModule.cs b/VectoMockup/VectoMockup/Ninject/MockupModule.cs index 8e35d1b5a28df2aeb9fe39e6113556ccb40e242f..ab1cdbc789d70c091dfb54fe07c404db004cdb99 100644 --- a/VectoMockup/VectoMockup/Ninject/MockupModule.cs +++ b/VectoMockup/VectoMockup/Ninject/MockupModule.cs @@ -4,10 +4,11 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Ninject.Modules; -using TUGraz.VectoMockup.Factories; using TUGraz.VectoCore; using TUGraz.VectoCore.InputData; using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoMockup.Reports; +using TUGraz.VectoMockup.Simulation.RundataFactories; namespace TUGraz.VectoMockup.Ninject { @@ -18,7 +19,7 @@ namespace TUGraz.VectoMockup.Ninject public override void Load() { Rebind<IVectoRunDataFactoryFactory>().To<VectoMockUpRunDataFactoryFactory>(); - Rebind<IXMLDeclarationReportFactory>().To<XMLDeclarationMockupReportFactory>(); + Rebind<IXMLDeclarationReportFactory>().To<MockupReportFactory>(); } #endregion diff --git a/VectoMockup/VectoMockup/Reports/IXMLMockupReport.cs b/VectoMockup/VectoMockup/Reports/IXMLMockupReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..847d4573c35c3015056cafcf90ddec1bb32bb341 --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/IXMLMockupReport.cs @@ -0,0 +1,10 @@ +using TUGraz.VectoCore.OutputData.XML; + +namespace TUGraz.VectoMockup.Reports +{ + internal interface IXMLMockupReport + { + void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue); + void WriteMockupSummary(XMLDeclarationReport.ResultEntry resultValue); + } +} \ No newline at end of file diff --git a/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs b/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..e365d2265fe245a3957885e95f0ac2850daf9c6a --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using System.Xml.XPath; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; + +namespace TUGraz.VectoMockup.Reports +{ + public class MockupCustomerReport : IXMLCustomerReport, IXMLMockupReport + { + private readonly AbstractCustomerReport _originalCustomerReport; + private XNamespace Cif = AbstractCustomerReport.Cif; + public MockupCustomerReport(IXMLCustomerReport originalReport) + { + _originalCustomerReport = originalReport as AbstractCustomerReport; + _outputDataType = _originalCustomerReport.OutputDataType; + Results = new XElement(Cif + XMLNames.Report_Results); + } + + private XElement Results; + private readonly string _outputDataType; + private VectoRunData _modelData; + + #region Implementation of IXMLCustomerReport + + public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + _modelData = modelData; + _originalCustomerReport.Initialize(modelData, fuelModes); + } + + public XDocument Report + { + get + { + var report = _originalCustomerReport.Report; + report.XPathSelectElements($"//*[local-name()='{XMLNames.Report_Results}']").Single().ReplaceWith(Results); + + return report; + + + } + } + + public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + { + _originalCustomerReport.WriteResult(resultValue); + } + + public void GenerateReport(XElement resultSignature) + { + _originalCustomerReport.GenerateReport(resultSignature); + } + + #endregion + + #region Implementation of IXMLMockupReport + + public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue) + { + Results.Add(MockupResultReader.GetCIFMockupResult(_outputDataType, resultValue, Cif + "Result", _modelData)); + } + + public void WriteMockupSummary(XMLDeclarationReport.ResultEntry resultValue) + { + Results.AddFirst(new XElement(Cif + "Status", "success")); + Results.AddFirst(new XComment("Always prints success at the moment")); + Results.Add(MockupResultReader.GetCIFMockupResult(_outputDataType, resultValue, Cif + "Summary", _modelData)); + } + + #endregion + } +} \ No newline at end of file diff --git a/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs b/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..f75d7e22e1b3f45ce64db8ce8c9fcc931b760690 --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using System.Xml.XPath; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; + +namespace TUGraz.VectoMockup.Reports +{ + public class MockupManufacturerReport : IXMLManufacturerReport, IXMLMockupReport + { + private AbstractManufacturerReport _ixmlManufacturerReportImplementation; + private VectoRunData _modelData; + + private XNamespace Mrf = AbstractManufacturerReport.Mrf; + private readonly string _outputData; + private XElement Results { get; set; } + public MockupManufacturerReport(IXMLManufacturerReport originalManufacturerReport) + { + _ixmlManufacturerReportImplementation = originalManufacturerReport as AbstractManufacturerReport; + _outputData = _ixmlManufacturerReportImplementation.OutputDataType; + + Results = new XElement(Mrf + XMLNames.Report_Results); + } + + public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue) + { + + Results.Add(MockupResultReader.GetMRFMockupResult(_outputData, resultValue, Mrf + "Result", _modelData)); + + + + } + + public void WriteMockupSummary(XMLDeclarationReport.ResultEntry resultValue) + { + Results.AddFirst(new XElement(Mrf + "Status", "success")); + Results.AddFirst(new XComment("Always prints success at the moment")); + //Results.Add(MockupResultReader.GetMRFMockupResult(OutputDataType, resultValue, Mrf + "Summary", _ovc)); + } + + + #region Implementation of IXMLManufacturerReport + + + public void InitializeVehicleData(IDeclarationInputDataProvider inputData) + { + _ixmlManufacturerReportImplementation.InitializeVehicleData(inputData); + } + + public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + _modelData = modelData; + _ixmlManufacturerReportImplementation.Initialize(modelData, fuelModes); + } + + public XDocument Report + { + get + { + var report = _ixmlManufacturerReportImplementation.Report; + report.XPathSelectElements($"//*[local-name()='{XMLNames.Report_Results}']").Single().ReplaceWith(Results); + + return report; + } + } + + public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + { + _ixmlManufacturerReportImplementation.WriteResult(resultValue); + } + + public void GenerateReport() + { + _ixmlManufacturerReportImplementation.GenerateReport(); + } + + #endregion + + + + } +} \ No newline at end of file diff --git a/VectoMockup/VectoMockup/Reports/MockupPrimaryReport.cs b/VectoMockup/VectoMockup/Reports/MockupPrimaryReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..151ab64048416e67f635d1ce605232bbfe2354a2 --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/MockupPrimaryReport.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; +using System.Xml.XPath; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; + +namespace TUGraz.VectoMockup.Reports +{ + internal class MockupPrimaryReport : IXMLPrimaryVehicleReport, IXMLMockupReport + { + + private readonly IXMLPrimaryVehicleReport _primaryVehicleReportImplementation; + private VectoRunData _modelData; + + private XElement Results; + public MockupPrimaryReport(IXMLPrimaryVehicleReport primaryVehicleReportImplementation) + { + _primaryVehicleReportImplementation = primaryVehicleReportImplementation; + Results = new XElement(_primaryVehicleReportImplementation.Tns + XMLNames.Report_Results); + } + + + #region Implementation of IXMLPrimaryVehicleReport + + public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + _primaryVehicleReportImplementation.Initialize(modelData, fuelModes); + _modelData = modelData; + } + + public void WriteResult(XMLDeclarationReport.ResultEntry result) + { + _primaryVehicleReportImplementation.WriteResult(result); + } + + public XNamespace Tns => _primaryVehicleReportImplementation.Tns; + + #endregion + + #region Implementation of IXMLMockupReport + + public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue) + { + var xElement = MockupResultReader.GetCIFMockupResult(Tns.NamespaceName, resultValue, Tns + "Result", _modelData); + Results.Add(xElement); + } + + public void WriteMockupSummary(XMLDeclarationReport.ResultEntry resultValue) + { + Results.AddFirst(new XElement(Tns + "Status", "success")); + Results.AddFirst(new XComment("Always prints success at the moment")); + } + + public void GenerateReport(XElement fullReportHash) + { + _primaryVehicleReportImplementation.GenerateReport(fullReportHash); + } + + public XDocument Report + { + get + { + var report = _primaryVehicleReportImplementation.Report; + var resultsElement = report.XPathSelectElements($"//*[local-name()='{XMLNames.Report_Results}']"); + resultsElement.First().ReplaceWith(Results); + return report; + } + } + + #endregion + } +} diff --git a/VectoMockup/VectoMockup/Reports/MockupReportFactory.cs b/VectoMockup/VectoMockup/Reports/MockupReportFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..6efe0cf234625bff3916552bf8781c8a31b14508 --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/MockupReportFactory.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; + +namespace TUGraz.VectoMockup.Reports +{ + class MockupReportFactory : IXMLDeclarationReportFactory + { + private readonly IManufacturerReportFactory _mrfFactory; + private readonly ICustomerInformationFileFactory _cifFactory; + + + #region Implementation of IXMLDeclarationReportFactory + + + public MockupReportFactory(IManufacturerReportFactory mrfFactory, ICustomerInformationFileFactory cifFactory) + { + _mrfFactory = mrfFactory; + _cifFactory = cifFactory; + } + public IDeclarationReport CreateReport(IInputDataProvider input, IOutputDataWriter outputWriter) + { + switch (input) + { + case IMultistageBusInputDataProvider multistageBusInputDataProvider: + break; + case ISingleBusInputDataProvider singleBusInputDataProvider: + return new XMLDeclarationReport(outputWriter); + case IDeclarationInputDataProvider declarationInputDataProvider: + return CreateDeclarationReport(declarationInputDataProvider, outputWriter); + case IMultiStageTypeInputData multiStageTypeInputData: + break; + case IMultistageVIFInputData multistageVifInputData: + return CreateDeclarationReport(multistageVifInputData, outputWriter); + case IPrimaryVehicleInformationInputDataProvider primaryVehicleInformationInputDataProvider: + break; + case IVTPDeclarationInputDataProvider vtpProvider: + { + return null; + } + case IMultistagePrimaryAndStageInputDataProvider multistagePrimaryAndStageInputData: + { + return null; //No Report for this type (handled in two simulation steps) + } + default: + break; + + } + throw new VectoException($"Could not create Declaration Report for {input.GetType()}"); + } + + public IVTPReport CreateVTPReport(IInputDataProvider input, IOutputDataWriter outputWriter) + { + return input is IVTPDeclarationInputDataProvider + ? new XMLVTPReport(outputWriter) + : null; + } + + private IDeclarationReport CreateDeclarationReport(IMultistageVIFInputData multistageVifInputData, IOutputDataWriter outputDataWriter) + { + if (multistageVifInputData.VehicleInputData == null) + { + var reportCompleted = new XMLDeclarationMockupReportCompletedVehicle(outputDataWriter, _mrfFactory, _cifFactory, true) + { + PrimaryVehicleReportInputData = multistageVifInputData.MultistageJobInputData.JobInputData.PrimaryVehicle, + }; + return reportCompleted; + } + else { + throw new NotImplementedException(); + var report = new XMLDeclarationReportMultistageBusVehicle(outputDataWriter); + return report; + } + } + + private IDeclarationReport CreateDeclarationReport(IDeclarationInputDataProvider declarationInputDataProvider, + IOutputDataWriter outputDataWriter) + { + var vehicleCategory = declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory; + if (vehicleCategory.IsLorry()) + { + return new XMLDeclarationMockupReport(outputDataWriter, _mrfFactory, _cifFactory); + } + + if (vehicleCategory.IsBus()) + { + switch (declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory) + { + case VehicleCategory.HeavyBusCompletedVehicle: + throw new NotImplementedException(); + return new XMLDeclarationReportCompletedVehicle(outputDataWriter, + declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory == + VehicleCategory.HeavyBusPrimaryVehicle) + { + PrimaryVehicleReportInputData = declarationInputDataProvider.PrimaryVehicleData, + }; + case VehicleCategory.HeavyBusPrimaryVehicle: + return new XMLDeclarationMockupPrimaryReport(outputDataWriter, _mrfFactory, _cifFactory, + declarationInputDataProvider.JobInputData.Vehicle.VehicleCategory == + VehicleCategory.HeavyBusPrimaryVehicle); + + default: + break; + } + } + + throw new Exception( + $"Could not create DeclarationReport for Vehicle Category{vehicleCategory}"); + } + + public IVTPReport CreateVTPReport(IVTPDeclarationInputDataProvider input, IOutputDataWriter outputWriter) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupPrimaryReport.cs b/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupPrimaryReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..bf6fec9c28f71aa100c4ff205c94c2e85b2b7d06 --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupPrimaryReport.cs @@ -0,0 +1,68 @@ +using System.Linq; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; + +namespace TUGraz.VectoMockup.Reports +{ + public class XMLDeclarationMockupPrimaryReport : XMLDeclarationReportPrimaryVehicle_09 + { + public XMLDeclarationMockupPrimaryReport(IReportWriter writer, + IManufacturerReportFactory mrfFactory, + ICustomerInformationFileFactory cifFactory, + bool writePIF = false) : base(writer, + mrfFactory, + cifFactory, + writePIF) + { + + + + + + + + + } + + protected override void InstantiateReports(VectoRunData modelData) + { + base.InstantiateReports(modelData); + PrimaryReport = new MockupPrimaryReport(PrimaryReport); + } + + #region Overrides of XMLDeclarationReportPrimaryVehicle_09 + + protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) + { + //Do nothing + } + + protected override void WriteResult(ResultEntry result) + { + (ManufacturerRpt as IXMLMockupReport).WriteMockupResult(result); + (PrimaryReport as IXMLMockupReport).WriteMockupResult(result); + } + + #endregion + + #region Overrides of XMLDeclarationReportPrimaryVehicle + + protected override void GenerateReports() + { + (ManufacturerRpt as IXMLMockupReport).WriteMockupSummary(Results.First()); + (PrimaryReport as IXMLMockupReport).WriteMockupSummary(Results.First()); + ManufacturerRpt.GenerateReport(); + var fullReportHash = GetSignature(ManufacturerRpt.Report); + //CustomerRpt.GenerateReport(fullReportHash); + PrimaryReport.GenerateReport(fullReportHash); + } + + + + #endregion + } +} \ No newline at end of file diff --git a/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs b/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs new file mode 100644 index 0000000000000000000000000000000000000000..bb4d5773519219e469bc41171916f76faa63ba39 --- /dev/null +++ b/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; + +namespace TUGraz.VectoMockup.Reports +{ + internal class XMLDeclarationMockupReportCompletedVehicle : XMLDeclarationReportCompletedVehicle + { + private readonly IManufacturerReportFactory _mrfFactory; + private readonly ICustomerInformationFileFactory _cifFactory; + + public XMLDeclarationMockupReportCompletedVehicle(IReportWriter writer, IManufacturerReportFactory mrfFactory, ICustomerInformationFileFactory cifFactory, bool writePIF = false) : base(writer, + writePIF) + { + _mrfFactory = mrfFactory; + _cifFactory = cifFactory; + } + + #region Overrides of XMLDeclarationReportCompletedVehicle + + protected override void InstantiateReports(VectoRunData modelData) + { + var inputData = modelData.InputData as IXMLMultistageInputDataProvider; + + var arch = inputData.JobInputData.PrimaryVehicle.Vehicle.ArchitectureID; + + inputData.JobInputData.PrimaryVehicle.Vehicle.VehicleCategory.GetVehicleType();// HEV/PEV - Sx/Px + + + var ihpc = (inputData.JobInputData.PrimaryVehicle.Vehicle.Components.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0; + var iepc = (inputData.JobInputData.PrimaryVehicle.Vehicle.Components.IEPC != null); + ManufacturerRpt = _mrfFactory.GetManufacturerReport( + inputData.JobInputData.ConsolidateManufacturingStage.Vehicle.VehicleCategory, + inputData.JobInputData.JobType, + inputData.JobInputData.PrimaryVehicle.Vehicle.ArchitectureID, + inputData.JobInputData.PrimaryVehicle.Vehicle.ExemptedVehicle, + iepc, + ihpc); + + //base.InstantiateReports(modelData); + } + + public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + base.InitializeReport(modelData, fuelModes); + } + + protected internal override void DoWriteReport() + { + base.DoWriteReport(); + } + + #endregion + + #region Overrides of XMLDeclarationReport + + protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) + { + base.DoStoreResult(entry, runData, modData); + } + + protected override void WriteResult(ResultEntry result) + { + base.WriteResult(result); + } + + protected override void GenerateReports() + { + base.GenerateReports(); + } + + #endregion + } +} diff --git a/VectoMockup/VectoMockup/Simulation/MockupRun.cs b/VectoMockup/VectoMockup/Simulation/MockupRun.cs new file mode 100644 index 0000000000000000000000000000000000000000..2fd82a4c1f43e9e566afe2ade2ff5e9910a61320 --- /dev/null +++ b/VectoMockup/VectoMockup/Simulation/MockupRun.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.Models.Connector.Ports.Impl; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.Models.Simulation.Impl.Mockup +{ + public class MockupRun : VectoRun + { + private IVehicleContainer _vehicleContainer; + public MockupRun(IVehicleContainer container) : base(container) + { + _vehicleContainer = container; + + + } + + + #region Overrides of VectoRun + public override double Progress => 1; + + protected override IResponse DoSimulationStep() + { + FinishedWithoutErrors = true; + + return new ResponseCycleFinished(this); + } + + public override bool CalculateAggregateValues() + { + return false; + } + + protected override bool CheckCyclePortProgress() + { + return false; + } + + protected override IResponse Initialize() + { + return new ResponseSuccess(this); + } + + #endregion + } +} diff --git a/VectoMockup/VectoMockup/Simulation/MockupRunData.cs b/VectoMockup/VectoMockup/Simulation/MockupRunData.cs new file mode 100644 index 0000000000000000000000000000000000000000..fc05f6cc4f4e9dfe150390c0b8f9c8b92aa2bbac --- /dev/null +++ b/VectoMockup/VectoMockup/Simulation/MockupRunData.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TUGraz.VectoMockup.RunData +{ + internal class MockupRunData + { + } +} diff --git a/VectoMockup/VectoMockup/RunData/DeclarationModeMockupTruckVectoRunDataFactory.cs b/VectoMockup/VectoMockup/Simulation/RundataFactories/MockupLorryVectoRunDataFactory.cs similarity index 88% rename from VectoMockup/VectoMockup/RunData/DeclarationModeMockupTruckVectoRunDataFactory.cs rename to VectoMockup/VectoMockup/Simulation/RundataFactories/MockupLorryVectoRunDataFactory.cs index 1c7e6f2f6b53b101159b82ca298212d335568483..e67ae4c20e8777675ac2ba1617dc08de963669f6 100644 --- a/VectoMockup/VectoMockup/RunData/DeclarationModeMockupTruckVectoRunDataFactory.cs +++ b/VectoMockup/VectoMockup/Simulation/RundataFactories/MockupLorryVectoRunDataFactory.cs @@ -1,41 +1,28 @@ using System; using System.Collections.Generic; using System.Linq; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.OutputData.XML; -namespace TUGraz.VectoMockup.RunData +namespace TUGraz.VectoMockup.Simulation.RundataFactories { - public class DeclarationModeMockupPrimaryBusVectoRunDataFactory : DeclarationModePrimaryBusVectoRunDataFactory + public class MockupLorryVectoRunDataFactory : DeclarationModeTruckVectoRunDataFactory { - public DeclarationModeMockupPrimaryBusVectoRunDataFactory(IDeclarationInputDataProvider dataProvider, - IDeclarationReport report) : - base(dataProvider, report) - { - if (report is IMockupReport mockupReport) - { - mockupReport.Mockup = true; - } - } - } - public class DeclarationModeMockupTruckVectoRunDataFactory : DeclarationModeTruckVectoRunDataFactory - { - public DeclarationModeMockupTruckVectoRunDataFactory(IDeclarationInputDataProvider dataProvider, + public MockupLorryVectoRunDataFactory(IDeclarationInputDataProvider dataProvider, IDeclarationReport report) : base(dataProvider, report, false) { - if (report is IMockupReport mockupReport) - { - mockupReport.Mockup = true; - } + } #region Overrides of AbstractDeclarationVectoRunDataFactory @@ -73,7 +60,6 @@ namespace TUGraz.VectoMockup.RunData fuels = null; } Report.InitializeReport(powertrainConfig, fuels); - } protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, int modeIdx, Mission mission, @@ -111,6 +97,7 @@ namespace TUGraz.VectoMockup.RunData EngineData = CreateMockupEngineData(vehicle, modeIdx), GearboxData = CreateMockupGearboxData(vehicle), AxleGearData = CreateMockupAxleGearData(vehicle), + JobType = InputDataProvider.JobInputData.JobType, }; diff --git a/VectoMockup/VectoMockup/Simulation/RundataFactories/MockupMultistageCompletedBusRunDataFactory.cs b/VectoMockup/VectoMockup/Simulation/RundataFactories/MockupMultistageCompletedBusRunDataFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..ff2f15657d0ab70b0bd18d29e93917fcc50c9b03 --- /dev/null +++ b/VectoMockup/VectoMockup/Simulation/RundataFactories/MockupMultistageCompletedBusRunDataFactory.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoMockup.Simulation.RundataFactories +{ + internal class MockupMultistageCompletedBusRunDataFactory : DeclarationModeCompletedMultistageBusVectoRunDataFactory + { + public MockupMultistageCompletedBusRunDataFactory(IMultistageBusInputDataProvider dataProvider, + IDeclarationReport report) : base(dataProvider, report) + { + + } + + #region Overrides of DeclarationModeCompletedMultistageBusVectoRunDataFactory + + protected override void Initialize() + { + + _segmentCompletedBus = GetCompletedSegment(CompletedVehicle, PrimaryVehicle.AxleConfiguration); + + //base.Initialize(); + } + + protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusCompleted() + { + + return base.VectoRunDataHeavyBusCompleted(); + } + + protected override VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int modeIdx) + { + return base.CreateVectoRunDataSpecific(mission, loading, modeIdx); + } + + protected override VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int modeIdx) + { + return base.CreateVectoRunDataGeneric(mission, loading, primarySegment, modeIdx); + } + + #endregion + } +} diff --git a/VectoMockup/VectoMockup/Simulation/RundataFactories/PrimaryBusMockupRunDataFactory.cs b/VectoMockup/VectoMockup/Simulation/RundataFactories/PrimaryBusMockupRunDataFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..ee5ccfca4db4e591da9efcdb2218bf54a1f7852d --- /dev/null +++ b/VectoMockup/VectoMockup/Simulation/RundataFactories/PrimaryBusMockupRunDataFactory.cs @@ -0,0 +1,292 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Models.BusAuxiliaries; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoMockup.Simulation.RundataFactories +{ + public class PrimaryBusMockupRunDataFactory : DeclarationModePrimaryBusVectoRunDataFactory + { + public PrimaryBusMockupRunDataFactory(IDeclarationInputDataProvider dataProvider, + IDeclarationReport report) : + base(dataProvider, report) + { } + + #region Overrides of AbstractDeclarationVectoRunDataFactory + + protected override void Initialize() + { + _segment = GetSegment(InputDataProvider.JobInputData.Vehicle); + } + + protected override void InitializeReport() + { + if (InputDataProvider.JobInputData.JobType == VectoSimulationJobType.ConventionalVehicle) + { + base.InitializeReport(); + return; + } + + VectoRunData powertrainConfig; + List<List<FuelData.Entry>> fuels; + var vehicle = InputDataProvider.JobInputData.Vehicle; + if (vehicle.ExemptedVehicle) + { + powertrainConfig = CreateVectoRunData(vehicle, 0, null, + new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>()); + fuels = new List<List<FuelData.Entry>>(); + } + else + { + powertrainConfig = _segment.Missions.Select( + mission => CreateVectoRunData( + vehicle, 0, mission, mission.Loadings.First())) + .FirstOrDefault(x => x != null); + fuels = null; + } + + Report.InitializeReport(powertrainConfig, fuels); + } + + #region Overrides of DeclarationModePrimaryBusVectoRunDataFactory + + protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, int modeIdx, + Mission mission, + KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading) + { + + VectoRunData runData; + if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) + { + throw new NotImplementedException(); + } + else + { + var cycle = DeclarationData.CyclesCache.GetOrAdd(mission.MissionType, + _ => + { + return DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", + false); + }); + + + runData = new VectoRunData() + { + Loading = loading.Key, + Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), + ExecutionMode = ExecutionMode.Declaration, + Report = Report, + Mission = mission, + SimulationType = SimulationType.DistanceCycle, + VehicleData = CreateMockupVehicleData(vehicle), + Retarder = CreateMockupRetarder(vehicle), + AxleGearData = CreateMockupAxleGearData(vehicle), + GearboxData = CreateMockupGearboxData(vehicle), + AngledriveData = CreateMockupAngleDriveData(vehicle), + EngineData = CreateMockupEngineData(vehicle, modeIdx), + BusAuxiliaries = CreateMockupBusAux(vehicle), + + }; + } + + runData.InputData = InputDataProvider; + + return runData; + } + + + + #endregion + + #endregion + private IAuxiliaryConfig CreateMockupBusAux(IVehicleDeclarationInputData vehicle) + { + return new AuxiliaryConfig() + { + InputData = vehicle.Components.BusAuxiliaries, + + }; + } + private RetarderData CreateMockupRetarder(IVehicleDeclarationInputData vehicle) + { + var xmlVehicle = vehicle as IXMLDeclarationVehicleData; + return new RetarderData() + { + Type = xmlVehicle.RetarderType, + + Ratio = xmlVehicle.RetarderType.IsDedicatedComponent() ? xmlVehicle.RetarderRatio : 0, + }; + } + + private AngledriveData CreateMockupAngleDriveData(IVehicleDeclarationInputData vehicle) + { + if (vehicle.Components.AngledriveInputData == null) + { + return null; + } + + var componentData = vehicle.Components.AngledriveInputData; + return new AngledriveData() + { + InputData = vehicle.Components.AngledriveInputData, + + + + + Angledrive = new TransmissionData() { + Ratio = componentData.Ratio, + }, + + Manufacturer = componentData.Manufacturer, + ModelName = componentData.Model, + CertificationNumber = componentData.CertificationNumber, + Date = componentData.Date, + }; + } + + private AxleGearData CreateMockupAxleGearData(IVehicleDeclarationInputData vehicle) + { + if (vehicle.Components.AxleGearInputData == null) + { + return null; + } + + var componentData = vehicle.Components.AxleGearInputData; + return new AxleGearData() + { + InputData = vehicle.Components.AxleGearInputData, + + Manufacturer = componentData.Manufacturer, + ModelName = componentData.Model, + CertificationNumber = componentData.CertificationNumber, + Date = componentData.Date, + AxleGear = new TransmissionData() + { + Ratio = vehicle.Components.AxleGearInputData.Ratio, + + } + }; + } + + private GearboxData CreateMockupGearboxData(IVehicleDeclarationInputData vehicle) + { + if (vehicle.Components.GearboxInputData == null) + { + return null; + } + + var componentData = vehicle.Components.GearboxInputData; + var gears = new Dictionary<uint, GearData>(); + foreach (var gearInputData in componentData.Gears) { + gears.Add((uint)gearInputData.Gear, new GearData() { + Ratio = gearInputData.Ratio, + MaxTorque = gearInputData.MaxTorque, + MaxSpeed = gearInputData.MaxInputSpeed, + }); + } + + + return new GearboxData() + { + InputData = vehicle.Components.GearboxInputData, + + Manufacturer = componentData.Manufacturer, + ModelName = componentData.Model, + CertificationNumber = componentData.CertificationNumber, + Date = componentData.Date, + Gears = gears, + + }; + } + + + private CombustionEngineData CreateMockupEngineData(IVehicleDeclarationInputData vehicleData, int modeIdx) + { + + var engine = InputDataProvider.JobInputData.Vehicle.Components.EngineInputData; + if (engine == null) + { + return null; + } + + var engineModes = engine.EngineModes; + var engineMode = engineModes[modeIdx]; + var fuels = new List<CombustionEngineFuelData>(); + foreach (var fuel in engineMode.Fuels) + { + fuels.Add(new CombustionEngineFuelData() + { + FuelData = DeclarationData.FuelData.Lookup(fuel.FuelType, vehicleData.TankSystem) + }); + } + + var componentData = vehicleData.Components.EngineInputData; + return new CombustionEngineData() + { + Fuels = fuels, + RatedPowerDeclared = vehicleData.Components.EngineInputData.RatedPowerDeclared, + IdleSpeed = vehicleData.EngineIdleSpeed, + InputData = vehicleData.Components.EngineInputData, + WHRType = vehicleData.Components.EngineInputData.WHRType, + RatedSpeedDeclared = engine.RatedSpeedDeclared, + Displacement = engine.Displacement, + + Manufacturer = componentData.Manufacturer, + ModelName = componentData.Model, + CertificationNumber = componentData.CertificationNumber, + Date = componentData.Date, + + + }; + } + + private VehicleData CreateMockupVehicleData(IVehicleDeclarationInputData vehicleData) + { + return new VehicleData() + { + + InputData = vehicleData, + SleeperCab = vehicleData.SleeperCab, + VehicleClass = _segment.VehicleClass, + Ocv = vehicleData.OvcHev, + VehicleCategory = vehicleData.VehicleCategory, + ZeroEmissionVehicle = vehicleData.ZeroEmissionVehicle, + ADAS = CreateMockupAdasData(vehicleData), + + Manufacturer = vehicleData.Manufacturer, + ManufacturerAddress = vehicleData.ManufacturerAddress, + ModelName = vehicleData.Model, + VIN = vehicleData.VIN, + LegislativeClass = vehicleData.LegislativeClass, + AxleConfiguration = vehicleData.AxleConfiguration, + Date = vehicleData.Date, + }; + } + + private VehicleData.ADASData CreateMockupAdasData(IVehicleDeclarationInputData vehicleData) + { + var adas = vehicleData.ADAS; + return new VehicleData.ADASData() + { + EcoRoll = adas.EcoRoll, + EngineStopStart = adas.EngineStopStart, + InputData = adas, + PredictiveCruiseControl = adas.PredictiveCruiseControl, + }; + } + } +} diff --git a/VectoMockup/VectoMockup/Simulation/RundataFactories/VectoMockupRunDataFactoryFactory.cs b/VectoMockup/VectoMockup/Simulation/RundataFactories/VectoMockupRunDataFactoryFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..8f2a3a06f1df065538f8e6765a6d4ff7aad4e1ca --- /dev/null +++ b/VectoMockup/VectoMockup/Simulation/RundataFactories/VectoMockupRunDataFactoryFactory.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData; +using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoMockup.RunData; + +namespace TUGraz.VectoMockup.Simulation.RundataFactories +{ + public class VectoMockUpRunDataFactoryFactory : IVectoRunDataFactoryFactory + { + #region Implementation of IVectoRunDataFactoryFactory + + + + public IVectoRunDataFactory CreateDeclarationRunDataFactory(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 MockupMultistageCompletedBusRunDataFactory( + multistageVifInputData.MultistageJobInputData, + report); + } + else { + throw new NotImplementedException(); + return new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report); + } + } + + private IVectoRunDataFactory CreateRunDataReader(IDeclarationInputDataProvider declDataProvider, IDeclarationReport report) + { + var vehicleCategory = declDataProvider.JobInputData.Vehicle.VehicleCategory; + if (vehicleCategory.IsLorry()) + { + return new MockupLorryVectoRunDataFactory(declDataProvider, report); + } + + if (vehicleCategory.IsBus()) + + switch (declDataProvider.JobInputData.Vehicle.VehicleCategory) + { + case VehicleCategory.HeavyBusCompletedVehicle: + throw new NotImplementedException(); + return new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, report); + case VehicleCategory.HeavyBusPrimaryVehicle: + return new PrimaryBusMockupRunDataFactory(declDataProvider, report); + default: + break; + } + + throw new Exception( + $"Could not create RunDataFactory for Vehicle Category{vehicleCategory}"); + } + + private IVectoRunDataFactory CreateRunDataReader(ISingleBusInputDataProvider singleBusProvider, IDeclarationReport report) + { + throw new NotImplementedException(); + } + + private IVectoRunDataFactory CreateRunDataReader(IVTPDeclarationInputDataProvider vtpProvider, IVTPReport vtpReport) + { + throw new NotImplementedException(); + } + + public IVectoRunDataFactory CreateEngineeringRunDataFactory(IEngineeringInputDataProvider inputDataProvider) + { + throw new NotImplementedException(); + } + + #endregion + } +}