From f45a608aed2dc1b889da8435a8e13493944bb734 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 3 May 2017 09:37:26 +0200 Subject: [PATCH] make more xml testcases work --- .../InputData/DeclarationInputData.cs | 2 +- .../VectoCommon/Models/AngledriveType.cs | 14 ++ VectoCommon/VectoCommon/Models/GearboxType.cs | 18 ++ .../Utils/DoubleExtensionMethods.cs | 8 + VectoCommon/VectoCommon/Utils/SI.cs | 6 + .../InputData/FileIO/JSON/JSONVehicleData.cs | 6 +- .../OutputData/XML/AbstractXMLWriter.cs | 48 ++-- .../OutputData/XML/XMLDeclarationWriter.cs | 183 ++++++++++----- .../OutputData/XML/XMLEngineeringWriter.cs | 2 +- .../VectoCore/Resources/XMLNames.Designer.cs | 211 +++++++++++++++++- VectoCore/VectoCore/Resources/XMLNames.resx | 7 +- VectoCore/VectoCoreTest/XML/XMLWritingTest.cs | 4 +- 12 files changed, 422 insertions(+), 87 deletions(-) diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index bcd154415f..386b80b08b 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -278,7 +278,7 @@ namespace TUGraz.VectoCommon.InputData double Efficiency { get; } } - public interface ITorqueConverterDeclarationInputData + public interface ITorqueConverterDeclarationInputData : IComponentInputData { /// <summary> /// P091 diff --git a/VectoCommon/VectoCommon/Models/AngledriveType.cs b/VectoCommon/VectoCommon/Models/AngledriveType.cs index fe72337f40..0c6065efd3 100644 --- a/VectoCommon/VectoCommon/Models/AngledriveType.cs +++ b/VectoCommon/VectoCommon/Models/AngledriveType.cs @@ -55,5 +55,19 @@ namespace TUGraz.VectoCommon.Models throw new ArgumentOutOfRangeException("AngledriveType", type, null); } } + + public static string ToXMLFormat(this AngledriveType type) + { + switch (type) { + case AngledriveType.None: + return "None"; + case AngledriveType.SeparateAngledrive: + return "Separate Angledrive"; + case AngledriveType.LossesIncludedInGearbox: + return "Losses included in Gearbox"; + default: + throw new ArgumentOutOfRangeException("Angledrive Type", type, null); + } + } } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Models/GearboxType.cs b/VectoCommon/VectoCommon/Models/GearboxType.cs index b392c7bcd0..a6060586f1 100644 --- a/VectoCommon/VectoCommon/Models/GearboxType.cs +++ b/VectoCommon/VectoCommon/Models/GearboxType.cs @@ -98,5 +98,23 @@ namespace TUGraz.VectoCommon.Models } return 0.SI<Second>(); } + + public static string ToXMLFormat(this GearboxType type) + { + switch (type) { + case GearboxType.MT: + return "SMT"; + case GearboxType.AMT: + return "AMT"; + case GearboxType.DrivingCycle: + return type.ToString(); + case GearboxType.ATSerial: + return "APT-S"; + case GearboxType.ATPowerSplit: + return "APT-P"; + default: + throw new ArgumentOutOfRangeException("GearboxType", type, null); + } + } } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs index 871438e542..1aadb5ad13 100644 --- a/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs +++ b/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs @@ -260,6 +260,14 @@ namespace TUGraz.VectoCommon.Utils { return self.ToString(CultureInfo.InvariantCulture); } + + [DebuggerStepThrough] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static string ToXMLFormat(this double self, uint? decimals = null) + { + decimals = decimals ?? 2; + return self.ToString("F" + decimals.Value); + } } public static class FloatExtensionMethods diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index edcb5b5038..574421d027 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -2274,5 +2274,11 @@ namespace TUGraz.VectoCommon.Utils { return Val.ToGUIFormat(); } + + public string ToXMLFormat(uint? decimals = null) + { + decimals = decimals ?? 2; + return Val.ToString("F" + decimals.Value); + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index 3a4de9a8f6..a235de9368 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -310,7 +310,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public string Model { - get { return "N/A"; } + get { return "N.A."; } } public string Creator @@ -325,12 +325,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public string TechnicalReportId { - get { return "N/A"; } + get { return "N.A."; } } public string CertificationNumber { - get { return "N/A"; } + get { return "N.A."; } } public string DigestValue diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs b/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs index 1f06181ff8..216a296f2e 100644 --- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/AbstractXMLWriter.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Resources; namespace TUGraz.IVT.VectoXML.Writer @@ -17,6 +18,7 @@ namespace TUGraz.IVT.VectoXML.Writer protected XNamespace tns; protected XNamespace rootNamespace; + protected XNamespace di; private const string Creator = "TU Graz, IVT-EM XML Exporter"; protected readonly string Vendor; @@ -28,27 +30,45 @@ namespace TUGraz.IVT.VectoXML.Writer { BasePath = basePath; Vendor = vendor; + + di = "http://www.w3.org/2000/09/xmldsig#"; + } + + protected XElement[] GetDefaultComponentElements(string componentId, string makeAndModel) + { + return new[] { + new XElement(tns + XMLNames.Component_Manufacturer, string.Format("{0,-5}", Vendor)), + new XElement(tns + XMLNames.Component_Model, string.Format("{0,-10}", makeAndModel)), + new XElement(tns + XMLNames.Component_TechnicalReportId, string.Format("{0,-10}", componentId)), + new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)), + new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"), + }; } - protected XElement[] GetDefaultComponentElements(string typeId, string makeAndModel) + protected XElement[] GetDefaultComponentElements(string vin, string makeAndModel, string address) { return new[] { new XElement(tns + XMLNames.Component_Manufacturer, String.Format("{0,-5}", Vendor)), - new XElement(tns + XMLNames.Component_Creator, String.Format("{0,-10}", Creator)), + new XElement(tns + XMLNames.Component_ManufacturerAddress, address), + new XElement(tns + XMLNames.Component_Model, string.Format("{0,-10}", makeAndModel)), + new XElement(tns + XMLNames.Vehicle_VIN, string.Format("{0,-10}", vin)), new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)), - new XElement(tns + XMLNames.Component_Model, String.Format("{0,-10}", makeAndModel)), - new XElement(tns + XMLNames.Component_CertificationNumber, String.Format("{0,-10}", typeId)), }; } - protected object[] EmbedDataTable(DataTable table, Dictionary<string, string> mapping, string tagName = "Entry") + protected object[] EmbedDataTable(DataTable table, Dictionary<string, string> mapping, string tagName = "Entry", + Dictionary<string, uint> precision = null) { return (from DataRow row in table.Rows select new XElement(tns + tagName, table.Columns.Cast<DataColumn>() .Where(c => mapping.ContainsKey(c.ColumnName)) - .Select(c => new XAttribute(mapping[c.ColumnName], row[c])))).Cast<object>().ToArray(); + .Select(c => { + var p = precision != null && precision.ContainsKey(c.ColumnName) ? precision[c.ColumnName] : 2; + return new XAttribute(mapping[c.ColumnName], row.Field<string>(c).ToDouble().ToXMLFormat(p)); + }))) + .Cast<object>().ToArray(); } protected string GetVehicleCategoryXML(VehicleCategory vehicleCategory) @@ -102,21 +122,5 @@ namespace TUGraz.IVT.VectoXML.Writer throw new ArgumentOutOfRangeException("RetarderType", type, null); } } - - protected string GearboxtypeToXML(GearboxType type) - { - switch (type) { - case GearboxType.MT: - case GearboxType.AMT: - case GearboxType.DrivingCycle: - return type.ToString(); - case GearboxType.ATSerial: - return "AT - Serial"; - case GearboxType.ATPowerSplit: - return "AT - PowerSplit"; - default: - throw new ArgumentOutOfRangeException("type", type, null); - } - } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs index da5bb8c6b9..85ed7e47fa 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs @@ -2,10 +2,15 @@ using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using DocumentFormat.OpenXml.Drawing.Diagrams; using TUGraz.IVT.VectoXML; using TUGraz.IVT.VectoXML.Writer; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Resources; namespace TUGraz.VectoCore.OutputData.XML @@ -18,9 +23,9 @@ namespace TUGraz.VectoCore.OutputData.XML public XMLDeclarationWriter(string vendor) : base(null, vendor) { - tns = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v0.6"; - rootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationInput:v0.6"; - componentNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v0.6"; + tns = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v0.8"; + rootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationInput:v0.8"; + componentNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v0.8"; } public XDocument GenerateVectoJob(IDeclarationInputDataProvider data) @@ -92,17 +97,22 @@ namespace TUGraz.VectoCore.OutputData.XML return new XElement(tns + XMLNames.Component_Vehicle, new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model), - GetDefaultComponentElements(vehicle.TechnicalReportId, vehicle.Model), + GetDefaultComponentElements(vehicle.TechnicalReportId, vehicle.Model, "N.A."), + new XElement(tns + "LegislativeClass", "N3"), new XElement(tns + XMLNames.Vehicle_VehicleCategory, GetVehicleCategoryXML(vehicle.VehicleCategory)), new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Vehicle_CurbWeightChassis, vehicle.CurbMassChassis.Value()), - new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value()), - //new XElement(tns + XMLNames.Vehicle_AirDragArea, vehicle.AirDragArea.Value()), - new XElement(tns + XMLNames.Vehicle_SteeredAxles, numSteeredaxles), + new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.ToXMLFormat(0)), + new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.ToXMLFormat(0)), + new XElement(tns + "IdlingSpeed", data.EngineInputData.IdleSpeed.ToXMLFormat(0)), new XElement(tns + XMLNames.Vehicle_RetarderType, GetRetarterTypeXML(retarder.Type)), - retarder.Type.IsDedicatedComponent() ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio) : null, - new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type), - new XElement(tns + XMLNames.Vehicle_PTOType, "None"), + retarder.Type.IsDedicatedComponent() + ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3)) + : null, + new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type.ToXMLFormat()), + new XElement(tns + "PTO", + new XElement(tns + "PTOShaftsGearWheels", "none"), + new XElement(tns + "PTOOtherElements", "none")), + // ToDo: TorqueLimits new XElement(tns + XMLNames.Vehicle_Components, CreateEngine(data.EngineInputData), CreateGearbox(gearbox, gearbox.Type.AutomaticTransmission() ? data.TorqueConverterInputData : null), @@ -112,36 +122,42 @@ namespace TUGraz.VectoCore.OutputData.XML CreateAxleWheels(data.VehicleInputData), CreateAuxiliaries(data.AuxiliaryInputData()), CreateAirdrag(data.AirdragInputData) - ), - new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist, - new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop, - new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled, - data.DriverInputData.StartStop.Enabled)), - new XElement(tns + XMLNames.DriverModel_Overspeed, - new XElement(tns + XMLNames.DriverModel_Overspeed_Mode, data.DriverInputData.OverSpeedEcoRoll.Mode)) - )); + ) + ); } protected XElement CreateEngine(IEngineDeclarationInputData data) { + var id = string.Format("ENG-{0}", data.Model.RemoveWhitespace()); + var fld = EngineFullLoadCurve.Create(data.FullLoadCurve, true); return new XElement(tns + XMLNames.Component_Engine, + new XAttribute("certificationNumber", string.Format("ENG-{0}", data.Model)), new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, string.Format("ENG-{0}", data.Model)), + new XAttribute(XMLNames.Component_ID_Attr, id), GetDefaultComponentElements(string.Format("ENG-{0}", data.Model), data.Model), - new XElement(tns + XMLNames.Engine_Displacement, data.Displacement.Value() * 1000 * 1000), - new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM), - new XElement(tns + XMLNames.Engine_WHTCUrban, data.WHTCUrban), - new XElement(tns + XMLNames.Engine_WHTCRural, data.WHTCRural), - new XElement(tns + XMLNames.Engine_WHTCMotorway, data.WHTCMotorway), - new XElement(tns + XMLNames.Engine_ColdHotBalancingFactor, data.ColdHotBalancingFactor), + new XElement(tns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)), + new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)), + new XElement(tns + "RatedSpeed", fld.RatedSpeed.AsRPM.ToXMLFormat(0)), + new XElement(tns + "RatedPower", fld.FullLoadStationaryPower(fld.RatedSpeed).ToXMLFormat(0)), + new XElement(tns + "MaxEngineTorque", fld.MaxLoadTorque.ToXMLFormat(0)), + new XElement(tns + XMLNames.Engine_WHTCUrban, data.WHTCUrban.ToXMLFormat(4)), + new XElement(tns + XMLNames.Engine_WHTCRural, data.WHTCRural.ToXMLFormat(4)), + new XElement(tns + XMLNames.Engine_WHTCMotorway, data.WHTCMotorway.ToXMLFormat(4)), + new XElement(tns + XMLNames.Engine_ColdHotBalancingFactor, data.ColdHotBalancingFactor.ToXMLFormat(4)), + new XElement(tns + "CFRegPer", "1.0000"), + new XElement(tns + "CFNCV", "1.0000"), + new XElement(tns + "FuelType", "Diesel CI"), new XElement(tns + XMLNames.Engine_FuelConsumptionMap, EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping)), new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve, - EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping)) - ) + EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping) + ) + ), + AddSignatureDummy(id) ); } + protected XElement CreateGearbox(IGearboxDeclarationInputData gbxData, ITorqueConverterDeclarationInputData torqueConverter) { @@ -150,7 +166,7 @@ namespace TUGraz.VectoCore.OutputData.XML foreach (var gearData in gbxData.Gears) { var gear = new XElement(tns + XMLNames.Gearbox_Gears_Gear, new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i++), - new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio), + new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)), gearData.MaxTorque != null ? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value()) : null, @@ -159,14 +175,19 @@ namespace TUGraz.VectoCore.OutputData.XML ); gears.Add(gear); } + var id = string.Format("GBX-{0}", gbxData.Model.RemoveWhitespace()); return new XElement(tns + XMLNames.Component_Gearbox, + new XAttribute("certificationNumber", string.Format("GBX-{0}", gbxData.Model)), new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", gbxData.Model)), + new XAttribute(XMLNames.Component_ID_Attr, id), GetDefaultComponentElements(string.Format("GBX-{0}", gbxData.Model), gbxData.Model), - new XElement(tns + XMLNames.Gearbox_TransmissionType, GearboxtypeToXML(gbxData.Type)), + new XElement(tns + XMLNames.Gearbox_TransmissionType, gbxData.Type.ToXMLFormat()), + new XElement(tns + "MainCertificationMethod", "Standard values"), gears ), - gbxData.Type.AutomaticTransmission() ? CreateTorqueConverter(torqueConverter) : null); + AddSignatureDummy(id), + gbxData.Type.AutomaticTransmission() ? CreateTorqueConverter(torqueConverter) : null + ); } @@ -175,35 +196,52 @@ namespace TUGraz.VectoCore.OutputData.XML if (data == null) { throw new Exception("Torque Converter is required!"); } + var id = string.Format("TC-{0}", data.Model.RemoveWhitespace()); return new XElement(tns + XMLNames.Component_TorqueConverter, + new XAttribute("certificationNumber", id), new XElement(tns + XMLNames.ComponentDataWrapper, + new XAttribute(XMLNames.Component_ID_Attr, id), + GetDefaultComponentElements(data.TechnicalReportId, data.Model), + new XElement(tns + "CertificationMethod", "Standard values"), new XElement(tns + XMLNames.TorqueConverter_Characteristics, - EmbedDataTable(data.TCData, AttributeMappings.TorqueConverterDataMapping) + EmbedDataTable(data.TCData, AttributeMappings.TorqueConverterDataMapping, + precision: new Dictionary<string, uint>() { + { TorqueConverterDataReader.Fields.SpeedRatio, 4 } + }) ) - )); + ), + AddSignatureDummy(id)); } private XElement CreateAngleDrive(IAngledriveInputData data) { + var id = string.Format("ANGL-{0}", data.Model.RemoveWhitespace()); return new XElement(tns + XMLNames.Component_Angledrive, + new XAttribute("certificationNumber", "ANGL-" + data.Model), new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, "ANGL-" + data.Model), + new XAttribute(XMLNames.Component_ID_Attr, id), GetDefaultComponentElements(data.TechnicalReportId, data.Model), - new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio), + new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio.ToXMLFormat(3)), + new XElement(tns + "CertificationMethod", "Standard values"), new XElement(tns + XMLNames.AngleDrive_TorqueLossMap, - EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping)))); + EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))), + AddSignatureDummy(id)); } public XElement CreateRetarder(IRetarderInputData data) { + var id = string.Format("RET-{0}", data.Model.RemoveWhitespace()); return new XElement(tns + XMLNames.Component_Retarder, + new XAttribute("certificationNumber", "RET-none"), new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, "RET-none"), + new XAttribute(XMLNames.Component_ID_Attr, id), GetDefaultComponentElements(data.TechnicalReportId, data.Model), + new XElement(tns + "CertificationMethod", "Standard values"), new XElement(tns + XMLNames.Retarder_RetarderLossMap, EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping) ) - ) + ), + AddSignatureDummy(id) ); } @@ -211,12 +249,16 @@ namespace TUGraz.VectoCore.OutputData.XML { var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio); return new XElement(tns + XMLNames.Component_Axlegear, + new XAttribute("certificationNumber", string.Format("AXL-{0}", data.Model)), new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, typeId), GetDefaultComponentElements(typeId, "N.A."), - new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio), + new XElement(tns + "LineType", "Single portal axle"), + new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)), + new XElement(tns + "CertificationMethod", "Standard values"), new XElement(tns + XMLNames.Axlegear_TorqueLossMap, - EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))) + EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))), + AddSignatureDummy(typeId) ); } @@ -229,14 +271,11 @@ namespace TUGraz.VectoCore.OutputData.XML var axle = axleData[i]; axles.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle, new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, i + 1), - new XAttribute(XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres), - new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleType_Attr, + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_AxleType_Attr, i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()), - GetDefaultComponentElements(string.Format("WHEEL-{0}_{1}", i, - axle.Wheels), axle.Wheels), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.RollResistanceCoefficient), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value()) + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres), + new XElement(tns + "Steered", i == 0), + CreateTyre(axle) )); } @@ -248,6 +287,21 @@ namespace TUGraz.VectoCore.OutputData.XML ); } + private XElement CreateTyre(IAxleDeclarationInputData axle) + { + var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_"); + return new XElement(tns + "Tyre", + new XAttribute("certificationNumber", id), + new XElement(tns + XMLNames.ComponentDataWrapper, + new XAttribute(XMLNames.Component_ID_Attr, id), + GetDefaultComponentElements(string.Format("TYRE-{0}", axle.Wheels), axle.Wheels), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCDeclared, axle.RollResistanceCoefficient.ToXMLFormat(4)), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value().ToXMLFormat(0)) + ), + AddSignatureDummy(id)); + } + public XElement CreateAuxiliaries(IAuxiliariesDeclarationInputData data) { var auxList = new Dictionary<AuxiliaryType, XElement>(); @@ -256,9 +310,7 @@ namespace TUGraz.VectoCore.OutputData.XML auxData.Technology.Select(x => new XElement(tns + XMLNames.Auxiliaries_Auxiliary_Technology, x)).ToArray<object>()); auxList[auxData.Type] = entry; } - var aux = new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, "AUX-DECL") - ); + var aux = new XElement(tns + XMLNames.ComponentDataWrapper); foreach ( var key in new[] { @@ -272,12 +324,16 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement CreateAirdrag(IAirdragDeclarationInputData data) { + var id = string.Format("Airdrag-{0}", data.Model); return new XElement(tns + XMLNames.Component_AirDrag, + new XAttribute("certificationNumber", string.Format("TYRE-{0}", data.Model)), new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, - string.Format("Airdrag-{0}", data.Model)), + new XAttribute(XMLNames.Component_ID_Attr, id), GetDefaultComponentElements(data.Model, "N.A."), - new XElement(tns + XMLNames.AirDrag_DeclaredCdxA, data.AirDragArea.Value())) + new XElement(tns + "CdxA_0", data.AirDragArea.Value().ToXMLFormat(2)), // TODO + new XElement(tns + "TransferredCdxA", data.AirDragArea.Value().ToXMLFormat(2)), // TODO + new XElement(tns + XMLNames.AirDrag_DeclaredCdxA, data.AirDragArea.Value().ToXMLFormat(2))), + AddSignatureDummy(id) ); } @@ -285,5 +341,24 @@ namespace TUGraz.VectoCore.OutputData.XML { return type.ToString(); } + + + private XElement AddSignatureDummy(string id) + { + return new XElement(tns + "Signature", + new XElement(di + "Reference", + new XAttribute("URI", "#" + id), + new XElement(di + "Transforms", + new XElement(di + "Transform", + new XAttribute("Algorithm", "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments")), + new XElement(di + "Transform", + new XAttribute("Algorithm", "urn:vecto:xml:2017:canonicalization")) + ), + new XElement(di + "DigestMethod", + new XAttribute("Algorithm", "http://www.w3.org/2001/04/xmlenc#sha256")), + new XElement(di + "DigestValue", "") + ) + ); + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs index 2676c5b39d..1c55475b19 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs @@ -409,7 +409,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", data.Model)), GetDefaultComponentElements(string.Format("GBX-{0}", data.Model), data.Model), - new XElement(tns + XMLNames.Gearbox_TransmissionType, GearboxtypeToXML(data.Type)), + new XElement(tns + XMLNames.Gearbox_TransmissionType, data.Type.ToXMLFormat()), new XElement(tns + XMLNames.Gearbox_Inertia, data.Inertia.Value()), new XElement(tns + XMLNames.Gearbox_TractionInterruption, data.TractionInterruption.Value()), gears), data.Type.AutomaticTransmission() ? CreateTorqueConverter(tcData) : null); diff --git a/VectoCore/VectoCore/Resources/XMLNames.Designer.cs b/VectoCore/VectoCore/Resources/XMLNames.Designer.cs index c972ed40ca..2f11622492 100644 --- a/VectoCore/VectoCore/Resources/XMLNames.Designer.cs +++ b/VectoCore/VectoCore/Resources/XMLNames.Designer.cs @@ -286,7 +286,7 @@ namespace TUGraz.VectoCore.Resources { } /// <summary> - /// Looks up a localized string similar to axleType. + /// Looks up a localized string similar to AxleType. /// </summary> public static string AxleWheels_Axles_Axle_AxleType_Attr { get { @@ -367,7 +367,7 @@ namespace TUGraz.VectoCore.Resources { } /// <summary> - /// Looks up a localized string similar to twinTyres. + /// Looks up a localized string similar to TwinTyres. /// </summary> public static string AxleWheels_Axles_Axle_TwinTyres_Attr { get { @@ -411,6 +411,15 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to AppVersion. + /// </summary> + public static string Component_AppVersion { + get { + return ResourceManager.GetString("Component_AppVersion", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Auxiliaries. /// </summary> @@ -438,6 +447,15 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to CertificationMethod. + /// </summary> + public static string Component_CertificationMethod { + get { + return ResourceManager.GetString("Component_CertificationMethod", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to CertificationNumber. /// </summary> @@ -492,6 +510,15 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to MainCertificationMethod. + /// </summary> + public static string Component_Gearbox_CertificationMethod { + get { + return ResourceManager.GetString("Component_Gearbox_CertificationMethod", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to id. /// </summary> @@ -510,6 +537,15 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to ManufacturerAddress. + /// </summary> + public static string Component_ManufacturerAddress { + get { + return ResourceManager.GetString("Component_ManufacturerAddress", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Model. /// </summary> @@ -564,6 +600,78 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to Signature. + /// </summary> + public static string DI_Signature { + get { + return ResourceManager.GetString("DI_Signature", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Algorithm. + /// </summary> + public static string DI_Signature_Algorithm_Attr { + get { + return ResourceManager.GetString("DI_Signature_Algorithm_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Reference. + /// </summary> + public static string DI_Signature_Reference { + get { + return ResourceManager.GetString("DI_Signature_Reference", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DigestMethod. + /// </summary> + public static string DI_Signature_Reference_DigestMethod { + get { + return ResourceManager.GetString("DI_Signature_Reference_DigestMethod", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DigestValue. + /// </summary> + public static string DI_Signature_Reference_DigestValue { + get { + return ResourceManager.GetString("DI_Signature_Reference_DigestValue", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Transforms. + /// </summary> + public static string DI_Signature_Reference_Transforms { + get { + return ResourceManager.GetString("DI_Signature_Reference_Transforms", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Transform. + /// </summary> + public static string DI_Signature_Reference_Transforms_Transform { + get { + return ResourceManager.GetString("DI_Signature_Reference_Transforms_Transform", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to URI. + /// </summary> + public static string DI_Signature_Reference_URI_Attr { + get { + return ResourceManager.GetString("DI_Signature_Reference_URI_Attr", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to decisionFactorVel. /// </summary> @@ -825,6 +933,24 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to CFNCV. + /// </summary> + public static string Engine_CorrecionFactor_NCV { + get { + return ResourceManager.GetString("Engine_CorrecionFactor_NCV", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CFRegPer. + /// </summary> + public static string Engine_CorrectionFactor_RegPer { + get { + return ResourceManager.GetString("Engine_CorrectionFactor_RegPer", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Displacement. /// </summary> @@ -888,6 +1014,15 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to FuelType. + /// </summary> + public static string Engine_FuelType { + get { + return ResourceManager.GetString("Engine_FuelType", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to FullLoadAndDragCurve. /// </summary> @@ -942,6 +1077,33 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to MaxEngineTorque. + /// </summary> + public static string Engine_MaxTorque { + get { + return ResourceManager.GetString("Engine_MaxTorque", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RatedPower. + /// </summary> + public static string Engine_RatedPower { + get { + return ResourceManager.GetString("Engine_RatedPower", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RatedSpeed. + /// </summary> + public static string Engine_RatedSpeed { + get { + return ResourceManager.GetString("Engine_RatedSpeed", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to WHTCEngineering. /// </summary> @@ -1617,6 +1779,24 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to IdlingSpeed. + /// </summary> + public static string Vehicle_IdlingSpeed { + get { + return ResourceManager.GetString("Vehicle_IdlingSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to LegislativeClass. + /// </summary> + public static string Vehicle_LegislativeClass { + get { + return ResourceManager.GetString("Vehicle_LegislativeClass", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Loading. /// </summary> @@ -1626,6 +1806,33 @@ namespace TUGraz.VectoCore.Resources { } } + /// <summary> + /// Looks up a localized string similar to PTO. + /// </summary> + public static string Vehicle_PTO { + get { + return ResourceManager.GetString("Vehicle_PTO", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOOtherElements. + /// </summary> + public static string Vehicle_PTO_OtherElements { + get { + return ResourceManager.GetString("Vehicle_PTO_OtherElements", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOShaftsGearWheels. + /// </summary> + public static string Vehicle_PTO_ShaftsGearWheels { + get { + return ResourceManager.GetString("Vehicle_PTO_ShaftsGearWheels", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to PTOCycle. /// </summary> diff --git a/VectoCore/VectoCore/Resources/XMLNames.resx b/VectoCore/VectoCore/Resources/XMLNames.resx index fb7cbd034a..8129ff050d 100644 --- a/VectoCore/VectoCore/Resources/XMLNames.resx +++ b/VectoCore/VectoCore/Resources/XMLNames.resx @@ -433,10 +433,10 @@ <value>axleNumber</value> </data> <data name="AxleWheels_Axles_Axle_TwinTyres_Attr" xml:space="preserve"> - <value>twinTyres</value> + <value>TwinTyres</value> </data> <data name="AxleWheels_Axles_Axle_AxleType_Attr" xml:space="preserve"> - <value>axleType</value> + <value>AxleType</value> </data> <data name="Gearbox_Gear_GearNumber_Attr" xml:space="preserve"> <value>number</value> @@ -683,5 +683,8 @@ </data> <data name="AxleWheels_Axles_Axle_RRCDeclared" xml:space="preserve"> <value>RRCDeclared</value> + </data> + <data name="Component_AppVersion" xml:space="preserve"> + <value>AppVersion</value> </data> </root> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs index 4d9a67d633..7fae8803fa 100644 --- a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs @@ -131,7 +131,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLDeclarationInputDataProvider(reader, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); } [TestMethod] @@ -153,7 +153,7 @@ namespace TUGraz.VectoCore.Tests.XML var xml = new XMLDeclarationInputDataProvider(reader, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N/A", xml.JobInputData().JobName); + Assert.AreEqual("VEH-N.A.", xml.JobInputData().JobName); } } } \ No newline at end of file -- GitLab