diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs index 98478bd345989e027e8679339223d76acbaafe86..9e37707518cb2e08b888aa2f0553d40933d67587 100644 --- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs @@ -39,6 +39,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; namespace TUGraz.VectoCore.OutputData @@ -71,12 +72,35 @@ namespace TUGraz.VectoCore.OutputData public interface IResultEntry { + VectoRun.Status Status { get; } MissionType Mission { get; set; } LoadingType LoadingType { get; set; } int FuelMode { get; set; } IList<IFuelProperties> FuelData { get; set; } + + MeterPerSecond AverageSpeed { get; } + + MeterPerSecond AverageDrivingSpeed { get; } + MeterPerSecond MaxSpeed { get; } + MeterPerSecond MinSpeed { get; } + MeterPerSquareSecond MaxDeceleration { get; } + MeterPerSquareSecond MaxAcceleration { get; } + + PerSecond EngineSpeedDrivingMin { get; } + PerSecond EngineSpeedDrivingAvg { get;} + PerSecond EngineSpeedDrivingMax { get; } + double AverageGearboxEfficiency { get; } + + double AverageAxlegearEfficiency { get; } + Scalar FullLoadPercentage { get; } + Scalar GearshiftCount { get; } + Meter Distance { get; } + + IFuelConsumptionCorrection FuelConsumptionFinal(FuelType fuelType); + + Kilogram CO2Total { get; } Kilogram Payload { get; set; } Kilogram TotalVehicleMass { get; set; } CubicMeter CargoVolume { get; set; } @@ -84,7 +108,13 @@ namespace TUGraz.VectoCore.OutputData double? PassengerCount { get; set; } VehicleClass VehicleClass { get; set; } + double WeightingFactor { get; } + void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor); + + string Error { get; } + + string StackTrace { get; } } /// <summary> diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs index 4fdb8ea0826e9addce27141da4d5242956377f48..0ea4d01fea73b0b8828eec91f2b7d28b33bcad98 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/AbstractCustomerReport.cs @@ -8,7 +8,6 @@ using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter; @@ -33,7 +32,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation protected XElement Vehicle { get; set; } - protected IResultWriter Results { get; set; } + protected IResultsWriter Results { get; set; } protected XElement InputDataIntegrity { get; set; } @@ -51,7 +50,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation #region Implementation of IXMLCustomerReport - public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + public virtual void Initialize(VectoRunData modelData) { InitializeVehicleData(modelData.InputData); _ovc = modelData.VehicleData.OffVehicleCharging; @@ -102,11 +101,16 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation Vehicle, InputDataIntegrity, new XElement(Cif_0_9 + XMLNames.Report_ManufacturerRecord_Signature, resultSignature), - Results.GenerateResults(results), + GetResultsXML(), XMLHelper.GetApplicationInfo(Cif_0_9) }; } + protected XElement GetResultsXML() + { + return Results.GenerateResults(results); + } + #endregion diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs index a2146d021a737fed1529ea3361900ec7dbbeaabf..f4a852466e83d364f3c1df4074934391322230cd 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFNinjectModule.cs @@ -403,19 +403,24 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation internal class CIFResultsNinjectModule : NinjectModule { + private VehicleTypeAndArchitectureStringHelperResults _namingHelper = + new VehicleTypeAndArchitectureStringHelperResults(); + public override void Load() { Bind<IResultWriterFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider( new CombineArgumentsToNameInstanceProvider.MethodSettings() { - combineToNameDelegate = , - skipArguments = 6, - takeArguments = 6, + combineToNameDelegate = _namingHelper.CreateName, + skipArguments = 1, + takeArguments = 1, methods = new[] { typeof(IResultWriterFactory).GetMethod(nameof(IResultWriterFactory.GetCIFResultWriter)) } })); - Bind<IResultWriter>().To<ExemptedResultsWriter>(); + Bind<IResultsWriter>().To<ExemptedResultsWriter>().Named( + _namingHelper.GetName(VehicleCategoryHelper.Lorry, true)); + } } } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs index 4421f56fcf2df80736271745180bd2bf9a23b153..1670285a516528d5d973bc68a21807ec063c11ee 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CustomerInformationFile/CustomerInformationFile.cs @@ -7,8 +7,8 @@ using System.Xml.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReport; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; @@ -198,16 +198,19 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation #region CompletedBus - public abstract class CustomerInformationFileCompletedBus : CustomerInformationFile + public abstract class CustomerInformationFileCompletedBus : CustomerInformationFile, IXMLCustomerReportCompletedBus { + private bool _allSuccess; + private int _resultCount; + protected XElement InputDataIntegrityPrimaryVehicle { get; set; } protected XElement ManufacturerReportIntegrityPrimaryVehicle { get; set; } - protected CustomerInformationFileCompletedBus(ICustomerInformationFileFactory cifFactory) : - base(cifFactory) { } + protected CustomerInformationFileCompletedBus(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : + base(cifFactory, resultWriterFactory) { } - public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + public override void Initialize(VectoRunData modelData) { InitializeVehicleData(modelData.InputData); _ovc = modelData.VehicleData.OffVehicleCharging; @@ -216,7 +219,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation if (inputData == null) { throw new VectoException("CompletedBus CustomerInformationFile requires MultistepBusInputData"); } - Results = new XElement(Cif_0_9 + "Results"); + Results = _resultFactory.GetCIFResultWriter(modelData.VehicleData.VehicleCategory, + modelData.JobType, modelData.VehicleData.OffVehicleCharging, modelData.Exempted); InputDataIntegrity = new XElement(Cif_0_9 + XMLNames.Report_InputDataSignature, inputData.JobInputData.ConsolidateManufacturingStage.Signature == null ? XMLHelper.CreateDummySig(_di) @@ -236,17 +240,32 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation ManufacturerReportIntegrityPrimaryVehicle, InputDataIntegrity, new XElement(Cif_0_9 + XMLNames.Report_ManufacturerRecord_Signature, resultSignature), - Results, + GetResultsXML(), XMLHelper.GetApplicationInfo(Cif_0_9) }; } + + #region Implementation of IXMLCustomerReportCompletedBus + + public void WriteResult(IResultEntry genericResult, IResultEntry specificResult, IResult primaryResult) + { + _allSuccess &= genericResult.Status == VectoRun.Status.Success; + _allSuccess &= specificResult.Status == VectoRun.Status.Success; + _resultCount++; + //Results.Add( + // genericResult.Status == VectoRun.Status.Success && specificResult.Status == VectoRun.Status.Success + // ? GetSuccessResultEntry(genericResult, specificResult, primaryResult) + // : GetErrorResultEntry(genericResult, specificResult, primaryResult)); + } + + #endregion } public class Conventional_CompletedBusCIF : CustomerInformationFileCompletedBus { public override string OutputDataType => "Conventional_CompletedBusOutputType"; - public Conventional_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public Conventional_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -260,7 +279,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "HEV_CompletedBusOutputType"; - public HEV_Px_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public HEV_Px_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -274,7 +293,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "HEV_CompletedBusOutputType"; - public HEV_IHPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public HEV_IHPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -288,7 +307,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "HEV_CompletedBusOutputType"; - public HEV_S2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public HEV_S2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -302,7 +321,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "HEV_CompletedBusOutputType"; - public HEV_S3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public HEV_S3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -316,7 +335,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "HEV_CompletedBusOutputType"; - public HEV_S4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public HEV_S4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -330,7 +349,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "HEV_CompletedBusOutputType"; - public HEV_IEPC_S_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public HEV_IEPC_S_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -344,7 +363,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "PEV_CompletedBusOutputType"; - public PEV_E2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public PEV_E2_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -358,7 +377,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "PEV_CompletedBusOutputType"; - public PEV_E3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public PEV_E3_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -372,7 +391,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "PEV_CompletedBusOutputType"; - public PEV_E4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public PEV_E4_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -386,7 +405,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public override string OutputDataType => "PEV_CompletedBusOutputType"; - public PEV_IEPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) + public PEV_IEPC_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } @@ -399,7 +418,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation public class Exempted_CompletedBusCIF : CustomerInformationFileCompletedBus { - public Exempted_CompletedBusCIF(ICustomerInformationFileFactory cifFactory) : base(cifFactory) { } + public Exempted_CompletedBusCIF(ICustomerInformationFileFactory cifFactory, IResultWriterFactory resultWriterFactory) : base(cifFactory, resultWriterFactory) { } #region Overrides of AbstractCustomerReport diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultWriter.cs deleted file mode 100644 index 0c297fb6b6f59ed2aa12127e2d80f3ffca2e2f77..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultWriter.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter -{ - public class IResultWriter - { - - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultsWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..e36d9d7ef75a592c24c6b2e326f841fb7246128d --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/ResultWriter/IResultsWriter.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.ResultWriter +{ + public interface IResultWriterFactory + { + IResultsWriter GetCIFResultWriter(VehicleCategory vehicleCategory, VectoSimulationJobType jobType, bool ovc, + bool exempted); + } + + public interface IResultsWriter + { + XElement GenerateResults(List<IResultEntry> results); + } + + public class ExemptedResultsWriter : IResultsWriter + { + protected XNamespace XmlNS => XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v0.9"); + + #region Implementation of IResultsWriter + + public XElement GenerateResults(List<IResultEntry> results) + { + return new XElement(XmlNS + "Results", + new XElement(XmlNS + "Status", "success"), + new XElement(XmlNS + "ExemptedVehicle")); + } + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs index b255e68761613a07cc1c385d3622cd73b582f427..48316e9377ccaa0c23102a20da4391280d001616 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; @@ -7,9 +8,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation { public interface IXMLCustomerReport { - void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + void Initialize(VectoRunData modelData); XDocument Report { get; } void WriteResult(IResultEntry resultValue); void GenerateReport(XElement resultSignature); } + + public interface IXMLCustomerReportCompletedBus + { + void WriteResult(IResultEntry genericResult, + IResultEntry specificResult, IResult primaryResult); + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs index 5f032fc674960a95e2b438411f60a082ace6ceb5..de2e6cb785c2eb53e7931a980a987cc474cd6669 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs @@ -176,7 +176,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation - public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + public virtual void WriteResult(IResultEntry resultEntry) { //foreach (var resultEntry in entry.ResultEntry) { _allSuccess &= resultEntry.Status == VectoRun.Status.Success; @@ -188,7 +188,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); } - private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry) + private XElement GetErrorResult(IResultEntry resultEntry) { var content = new object[] { }; switch (resultEntry.Status) { @@ -213,7 +213,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation content); } - private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) + private XElement GetSuccessResult(IResultEntry result) { return new XElement( tns + XMLNames.Report_Result_Result, @@ -308,7 +308,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation } public XDocument Report { get; } - public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + public void WriteResult(IResultEntry resultValue) { // MQ 2021-06-14 TODO: fill with meat } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs index b74e6140582b0526c0fb1cb17f762b6f1baabc50..fe1be7891185e278a56a36f465d2108cdc09ec27 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs @@ -306,7 +306,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation Report = h.AddHash(); } - public override void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + public override void WriteResult(IResultEntry resultEntry) { throw new NotSupportedException(); } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs index c2a9c329f76bae99a7d608cdd45fe0ff3260d3a3..9997935a93ebe228a8203105b2ed893a5af9677b 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs @@ -108,14 +108,14 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport } - public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + public virtual void WriteResult(IResultEntry resultEntry) { _allSuccess &= resultEntry.Status == VectoRun.Status.Success; Results.Add( resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); } - protected virtual XElement GetErrorResult( XMLDeclarationReport.ResultEntry resultEntry) + protected virtual XElement GetErrorResult(IResultEntry resultEntry) { var content = new object[] {}; switch (resultEntry.Status) { @@ -149,7 +149,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport content); } - protected virtual XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) + protected virtual XElement GetSuccessResult(IResultEntry result) { return new XElement( tns + XMLNames.Report_Result_Result, @@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport ); } - private XElement GetVehiclePerformance(XMLDeclarationReport.ResultEntry result) + private XElement GetVehiclePerformance(IResultEntry result) { return new XElement( tns + XMLNames.Report_ResultEntry_VehiclePerformance, @@ -212,7 +212,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport ); } - protected virtual XElement GetSimulationParameters(XMLDeclarationReport.ResultEntry result) + protected virtual XElement GetSimulationParameters(IResultEntry result) { return new XElement( tns + XMLNames.Report_ResultEntry_SimulationParameters, diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs index f6507d5c7f1afaea454aabd98ae59ce12df881c9..31f77a85b8137692855dbe5997679e28af85f043 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs @@ -9,7 +9,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport //void InitializeVehicleData(IDeclarationInputDataProvider inputData); void Initialize(VectoRunData modelData); XDocument Report { get; } - void WriteResult(XMLDeclarationReport.ResultEntry resultValue); + void WriteResult(IResultEntry resultValue); void GenerateReport(); } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs index 9a6e487b858e57bad9681f28bcf60ede1ac53ed6..6e9db8bad102e144884ff5bc6843d83abfbecfd6 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/AbstractManufacturerReport.cs @@ -9,7 +9,6 @@ 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.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; using TUGraz.VectoCore.Utils; @@ -52,9 +51,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. #region Implementation of IXMLManufacturerReport - public abstract void InitializeVehicleData(IDeclarationInputDataProvider inputData); + protected abstract void InitializeVehicleData(IDeclarationInputDataProvider inputData); - public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + public virtual void Initialize(VectoRunData modelData) { InitializeVehicleData(modelData.InputData); _ovc = modelData.VehicleData.OffVehicleCharging; @@ -68,7 +67,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. private List<XMLDeclarationReport.ResultEntry> results = new List<XMLDeclarationReport.ResultEntry>(); - public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + public void WriteResult(IResultEntry resultValue) { diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs index b0ec12765772cfa9ab80b2303abd4e0c917135b0..f9fcdad04e4b98b369be19adf97e8869a3a00e33 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs @@ -195,7 +195,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport ); } - protected override XElement GetSimulationParameters(XMLDeclarationReport.ResultEntry result) + protected override XElement GetSimulationParameters(IResultEntry result) { return new XElement( tns + "SimulationParametersCompletedVehicle", @@ -397,7 +397,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport #endregion - public override void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + public override void WriteResult(IResultEntry resultEntry) { throw new NotSupportedException(); } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs index 9222baa24b73e65197b03d23c2347a4fbf3867c0..5663b85f1a2389ab2f214d0c927e90d4641e523a 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs @@ -594,7 +594,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF new XElement( tns + XMLNames.Report_Result_EnergyConsumption, new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), - (result.FuelConsumptionFinal[fuel.FuelType].EnergyDemand / + (result.FuelConsumptionFinal(fuel.FuelType).EnergyDemand / result.Distance.ConvertToKiloMeter() / 1e6) .Value().ToMinSignificantDigits(5, 5))); retVal.Add(fcResult); diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index 20604bce0570a557479f3f2b88122d0ba450031a..5062105983b6749f695e795b94c0569ed49dfc81 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -95,9 +95,14 @@ namespace TUGraz.VectoCore.OutputData.XML public Joule EnergyConsumptionTotal { get; private set; } - public Kilogram CO2Total { get; private set; } + public IFuelConsumptionCorrection FuelConsumptionFinal(FuelType fuelType) + { + return CorrectedFinalFuelConsumption[fuelType]; + } + + public Kilogram CO2Total { get; private set; } - public Dictionary<FuelType, IFuelConsumptionCorrection> FuelConsumptionFinal { get; private set; } + public Dictionary<FuelType, IFuelConsumptionCorrection> CorrectedFinalFuelConsumption { get; private set; } public Meter Distance { get; private set; } @@ -161,7 +166,7 @@ namespace TUGraz.VectoCore.OutputData.XML EngineSpeedDrivingMax = entriesDriving.Max(x => x.nEng); Distance = data.Distance; - FuelConsumptionFinal = data.CorrectedModalData.FuelCorrection; + CorrectedFinalFuelConsumption = data.CorrectedModalData.FuelCorrection; CO2Total = data.CorrectedModalData.CO2Total; EnergyConsumptionTotal = data.CorrectedModalData.EnergyConsumptionTotal; @@ -298,13 +303,13 @@ namespace TUGraz.VectoCore.OutputData.XML }); - public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput) + public static IEnumerable<XElement> GetResults(IResultEntry result, XNamespace tns, bool fullOutput) { //var fuel = result.FuelData; var retVal = new List<XElement>(); foreach (var fuel in result.FuelData) { - var entry = result.FuelConsumptionFinal[fuel.FuelType]; + var entry = result.FuelConsumptionFinal(fuel.FuelType); var fcResult = new XElement(tns + XMLNames.Report_Results_Fuel, new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat())); fcResult.Add( new XElement( diff --git a/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs b/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs index a690fd9ea99ef3c0b9c7c6b3ab11b2339ca8e0bd..916d79e65583bf09c6fd6a3100e4e1e559af71a9 100644 --- a/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs +++ b/VectoCore/VectoCore/Utils/Ninject/VehicleTypeAndArchitectureStringHelper.cs @@ -127,56 +127,28 @@ namespace TUGraz.VectoCore.Utils.Ninject #endregion public struct VehicleClassification { - private readonly VectoSimulationJobType _jobType; - - private VectoSimulationJobType JobType - { - get - { - if (Exempted) { - return VectoSimulationJobType.ConventionalVehicle; //ignored for exempted vehicles - } - return _jobType; - } - } + private const string _singlebus = "SingleBus"; + private readonly VectoSimulationJobType _jobType; + private readonly bool _exempted; private readonly ArchitectureID _archId; - - private ArchitectureID ArchId - { - get - { - if (Exempted) { - return ArchitectureID.UNKNOWN; //ignored for exempted vehicles - } - return _archId; - } - } - private readonly string _vehicleType; + private readonly bool _iepc; + private readonly bool _ihpc; + private readonly bool _isSingleBus; - private string VehicleType => _vehicleType; - - private readonly bool _exempted; + private VectoSimulationJobType JobType => Exempted ? VectoSimulationJobType.ConventionalVehicle : _jobType; //ignored for exempted vehicles - private bool Exempted - { - get - { - return _exempted; - } - } + private ArchitectureID ArchId => Exempted ? ArchitectureID.UNKNOWN : _archId;//ignored for exempted vehicles + + private string VehicleType => _vehicleType; - private readonly bool _iepc; + private bool Exempted => _exempted; private bool Iepc => _iepc; - private readonly bool _ihpc; - private bool Ihpc => _ihpc; - private readonly bool _isSingleBus; - private const string _singlebus = "SingleBus"; private bool IsSingleBus => _isSingleBus; public VehicleClassification(VectoSimulationJobType jobType, ArchitectureID archId, string vehicleType, bool exempted, bool iepc, bool ihpc, bool singleBus = false) @@ -258,6 +230,85 @@ namespace TUGraz.VectoCore.Utils.Ninject IsSingleBus ? "Single Bus" : ""); } + #endregion + } + + } + + public class VehicleTypeAndArchitectureStringHelperResults + { + public CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } = arguments => { + if (arguments[0] is ResultsVehicleClassification classification) { + return GetName(classification); + } else { + throw new ArgumentException($"{nameof(arguments)}[0] must be of type {typeof(ResultsVehicleClassification)}"); + } + }; + + private static string GetName(ResultsVehicleClassification classification) + { + return classification.GetHashCode().ToString(); + } + + public string GetName(string vehicleCategory, VectoSimulationJobType jobType, bool ovc = false, + bool exempted = false) + { + return GetName(new ResultsVehicleClassification(vehicleCategory, jobType, ovc, exempted)); + } + + public string GetName(string vehicleType, bool exempted) + { + return GetName(vehicleType, VectoSimulationJobType.ConventionalVehicle, exempted: exempted); + } + + public struct ResultsVehicleClassification + { + private readonly string _vehicleCategory; + private readonly VectoSimulationJobType _jobType; + private readonly bool _ovc; + private readonly bool _exempted; + + public ResultsVehicleClassification(string vehicleCategory, VectoSimulationJobType jobType, bool ovc, bool exempted) + { + _vehicleCategory = vehicleCategory; + _jobType = jobType; + _ovc = ovc; + _exempted = exempted; + + } + + public bool Exempted => _exempted; + public VectoSimulationJobType JobType => Exempted ? VectoSimulationJobType.ConventionalVehicle : _jobType; + + public string VehicleCategory => _vehicleCategory; + public bool OVC => _ovc; + + #region Overrides of ValueType + + public override bool Equals(object obj) + { + return obj is ResultsVehicleClassification other && Equals(other); + } + + public bool Equals(ResultsVehicleClassification other) + { + return VehicleCategory == other.VehicleCategory + && JobType == other.JobType + && OVC == other.OVC + && Exempted == other.Exempted; + } + + public override int GetHashCode() + { + unchecked { + var hashCode = VehicleCategory != null ? VehicleCategory.GetHashCode() : 0; + hashCode = (hashCode * 397) ^ (int)JobType; + hashCode = (hashCode * 397) ^ OVC.GetHashCode(); + hashCode = (hashCode * 397) ^ Exempted.GetHashCode(); + return hashCode; + } + } + #endregion } } diff --git a/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs b/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs index f9829c3707d92fa5713e64b5ecd463a8fb22a56e..9b12db161fa94d4adecc01ec2e4bbc56c79ae162 100644 --- a/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs +++ b/VectoMockup/VectoMockup/Reports/MockupCustomerReport.cs @@ -3,6 +3,7 @@ using System.Xml.Linq; using System.Xml.XPath; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.OutputData.XML; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; @@ -48,7 +49,7 @@ namespace TUGraz.VectoMockup.Reports } } - public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + public void WriteResult(IResultEntry resultValue) { _originalCustomerReport.WriteResult(resultValue); } diff --git a/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs b/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs index 5e6c8019184f57d38932d0a0a887c65a4fbd1bff..5bd1b7db6f8263c6d09fdcd54cdcf4cd2fb8d383 100644 --- a/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs +++ b/VectoMockup/VectoMockup/Reports/MockupManufacturerReport.cs @@ -5,6 +5,7 @@ using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.OutputData.XML; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9; @@ -29,7 +30,7 @@ namespace TUGraz.VectoMockup.Reports Results = new XElement(Mrf + XMLNames.Report_Results); } - public void WriteMockupResult(XMLDeclarationReport.ResultEntry resultValue) + public void WriteMockupResult(IResultEntry resultValue) { Results.Add(MockupResultReader.GetMRFMockupResult(_outputData, resultValue, Mrf + "Result", _modelData));