diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs index 583166874d3e467de267c56c8076425bd9ea1668..5f0447ef1b0e03cc73383d22aa07667083eb5170 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationJobInputDataProvider.cs @@ -29,28 +29,28 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Resources; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration -{ - // ReSharper disable once InconsistentNaming - public class XMLDeclarationJobInputDataProvider : AbstractDeclarationXMLComponentDataProvider, IDeclarationJobInputData - { - public XMLDeclarationJobInputDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) - { - XBasePath = VehiclePath; - } - - - public IVehicleDeclarationInputData Vehicle - { - get { return InputData.VehicleInputData; } - } - - public string JobName - { - get { return GetAttributeValue("", XMLNames.Component_ID_Attr); } - } - } -} \ No newline at end of file +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration +{ + // ReSharper disable once InconsistentNaming + public class XMLDeclarationJobInputDataProvider : AbstractDeclarationXMLComponentDataProvider, IDeclarationJobInputData + { + public XMLDeclarationJobInputDataProvider(XMLDeclarationInputDataProvider xmlInputDataProvider) : base(xmlInputDataProvider) + { + XBasePath = VehiclePath; + } + + + public IVehicleDeclarationInputData Vehicle + { + get { return InputData.VehicleInputData; } + } + + public string JobName + { + get { return GetAttributeValue("", XMLNames.Component_ID_Attr); } + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs index fe9019df7c625a08db87a1afcf45d61da2ebb12a..6de5fdc8d3479c7aaba172c7ae73246a59a8849d 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationWriter.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Text.RegularExpressions; using System.Xml; using System.Xml.Linq; using TUGraz.IVT.VectoXML; @@ -75,7 +76,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XAttribute(xsi + "schemaLocation", string.Format("{0} {1}VectoInput.xsd", rootNamespace, SchemaLocationBaseUrl)), CreateDeclarationJob(data)) - ); + ); return job; } @@ -102,7 +103,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XAttribute(xsi + "schemaLocation", string.Format("{0} {1}VectoComponent.xsd", componentNamespace, SchemaLocationBaseUrl)), content) - ); + ); return component; } @@ -120,15 +121,21 @@ namespace TUGraz.VectoCore.OutputData.XML var vehicle = data.VehicleInputData; var angledrive = data.AngledriveInputData; + + var id = CreateIdString("VEH-" + vehicle.Model); + return new XElement(tns + XMLNames.Component_Vehicle, - new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model), + new XAttribute(XMLNames.Component_ID_Attr, id), GetDefaultComponentElements(vehicle.CertificationNumber, vehicle.Model, "N.A."), new XElement(tns + XMLNames.Vehicle_LegislativeClass, "N3"), new XElement(tns + XMLNames.Vehicle_VehicleCategory, vehicle.VehicleCategory.ToXMLFormat()), new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()), new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.ToXMLFormat(0)), new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.ToXMLFormat(0)), - new XElement(tns + XMLNames.Vehicle_IdlingSpeed, vehicle.EngineIdleSpeed.AsRPM.ToXMLFormat(0)), + new XElement(tns + XMLNames.Vehicle_IdlingSpeed, + vehicle.EngineIdleSpeed != null + ? vehicle.EngineIdleSpeed.AsRPM.ToXMLFormat(0) + : data.EngineInputData.IdleSpeed.AsRPM.ToXMLFormat(0)), new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()), retarder.Type.IsDedicatedComponent() ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3)) @@ -147,13 +154,14 @@ namespace TUGraz.VectoCore.OutputData.XML CreateAxleWheels(data.VehicleInputData), CreateAuxiliaries(data.AuxiliaryInputData()), CreateAirdrag(data.AirdragInputData) - ) - ); + ) + ); } protected XElement CreateEngine(IEngineDeclarationInputData data, XNamespace ns = null) { - var id = string.Format("ENG-{0}", data.Model.RemoveWhitespace()); + var id = CreateIdString(string.Format("ENG-{0}", data.Model.RemoveWhitespace())); + var fld = FullLoadCurveReader.Create(data.FullLoadCurve, true); return new XElement((ns ?? tns) + XMLNames.Component_Engine, new XElement(tns + XMLNames.ComponentDataWrapper, @@ -175,10 +183,10 @@ namespace TUGraz.VectoCore.OutputData.XML EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping)), new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve, EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping) - ) - ), + ) + ), AddSignatureDummy(id) - ); + ); } protected XElement CreateGearbox(IGearboxDeclarationInputData gbxData, @@ -198,10 +206,12 @@ namespace TUGraz.VectoCore.OutputData.XML : null, new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, EmbedDataTable(gearData.LossMap, AttributeMappings.TransmissionLossmapMapping)) - ); + ); gears.Add(gear); } - var id = string.Format("GBX-{0}", gbxData.Model.RemoveWhitespace()); + var id = CreateIdString(string.Format("GBX-{0}", gbxData.Model.RemoveWhitespace())); + + return new XElement((ns ?? tns) + XMLNames.Component_Gearbox, new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, id), @@ -209,10 +219,10 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Gearbox_TransmissionType, gbxData.Type.ToXMLFormat()), new XElement(tns + XMLNames.Component_Gearbox_CertificationMethod, "Standard values"), gears - ), + ), AddSignatureDummy(id), gbxData.Type.AutomaticTransmission() ? CreateTorqueConverter(torqueConverter) : null - ); + ); } private XElement CreateTorqueConverter(ITorqueConverterDeclarationInputData data) @@ -220,7 +230,10 @@ namespace TUGraz.VectoCore.OutputData.XML if (data == null) { throw new Exception("Torque Converter is required!"); } - var id = string.Format("TC-{0}", data.Model.RemoveWhitespace()); + + var id = CreateIdString(string.Format("TC-{0}", data.Model.RemoveWhitespace())); + + return new XElement(tns + XMLNames.Component_TorqueConverter, new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, id), @@ -231,14 +244,15 @@ namespace TUGraz.VectoCore.OutputData.XML precision: new Dictionary<string, uint>() { { TorqueConverterDataReader.Fields.SpeedRatio, 4 } }) - ) - ), + ) + ), AddSignatureDummy(id)); } private XElement CreateAngleDrive(IAngledriveInputData data, XNamespace ns = null) { - var id = string.Format("ANGL-{0}", data.Model.RemoveWhitespace()); + var id = CreateIdString(string.Format("ANGL-{0}", data.Model.RemoveWhitespace())); + return new XElement((ns ?? tns) + XMLNames.Component_Angledrive, new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, id), @@ -252,7 +266,8 @@ namespace TUGraz.VectoCore.OutputData.XML public XElement CreateRetarder(IRetarderInputData data, XNamespace ns = null) { - var id = string.Format("RET-{0}", data.Model.RemoveWhitespace()); + var id = CreateIdString(string.Format("RET-{0}", data.Model.RemoveWhitespace())); + return new XElement((ns ?? tns) + XMLNames.Component_Retarder, new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, id), @@ -260,15 +275,16 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Component_CertificationMethod, "Standard values"), new XElement(tns + XMLNames.Retarder_RetarderLossMap, EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping) - ) - ), + ) + ), AddSignatureDummy(id) - ); + ); } public XElement CreateAxlegear(IAxleGearInputData data, XNamespace ns = null) { - var typeId = string.Format("AXLGEAR-{0}", data.Ratio.ToString("F3", CultureInfo.InvariantCulture)); + var typeId = CreateIdString(string.Format("AXLGEAR-{0}", data.Ratio.ToString("F3", CultureInfo.InvariantCulture))); + return new XElement((ns ?? tns) + XMLNames.Component_Axlegear, new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, typeId), @@ -279,7 +295,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Axlegear_TorqueLossMap, EmbedDataTable(data.LossMap, AttributeMappings.TransmissionLossmapMapping))), AddSignatureDummy(typeId) - ); + ); } public XElement CreateAxleWheels(IVehicleDeclarationInputData data, XNamespace ns = null) @@ -296,18 +312,19 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres), new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, i == 0), CreateTyre(axle) - )); + )); } return new XElement((ns ?? tns) + XMLNames.Component_AxleWheels, new XElement(tns + XMLNames.ComponentDataWrapper, new XElement(tns + XMLNames.AxleWheels_Axles, axles)) - ); + ); } private XElement CreateTyre(IAxleDeclarationInputData axle) { - var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_"); + var id = CreateIdString(string.Format("TYRE-{0}", axle.Wheels).Replace("/", "_")); + return new XElement(tns + "Tyre", new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, id), @@ -315,7 +332,7 @@ namespace TUGraz.VectoCore.OutputData.XML 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)); } @@ -330,10 +347,10 @@ namespace TUGraz.VectoCore.OutputData.XML var aux = new XElement(tns + XMLNames.ComponentDataWrapper); foreach ( var key in - new[] { - AuxiliaryType.Fan, AuxiliaryType.SteeringPump, AuxiliaryType.ElectricSystem, AuxiliaryType.PneumaticSystem, - AuxiliaryType.HVAC - }) { + new[] { + AuxiliaryType.Fan, AuxiliaryType.SteeringPump, AuxiliaryType.ElectricSystem, AuxiliaryType.PneumaticSystem, + AuxiliaryType.HVAC + }) { aux.Add(auxList[key]); } return new XElement(tns + XMLNames.Component_Auxiliaries, aux); @@ -341,7 +358,8 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement CreateAirdrag(IAirdragDeclarationInputData data, XNamespace ns = null) { - var id = string.Format("Airdrag-{0}", data.Model); + var id = CreateIdString(string.Format("Airdrag-{0}", data.Model)); + return new XElement((ns ?? tns) + XMLNames.Component_AirDrag, new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, id), @@ -350,7 +368,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + "TransferredCdxA", data.AirDragArea.Value().ToXMLFormat(2)), new XElement(tns + XMLNames.AirDrag_DeclaredCdxA, data.AirDragArea.Value().ToXMLFormat(2))), AddSignatureDummy(id) - ); + ); } private string AuxTypeToXML(AuxiliaryType type) @@ -369,12 +387,12 @@ namespace TUGraz.VectoCore.OutputData.XML "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments")), new XElement(di + XMLNames.DI_Signature_Reference_Transforms_Transform, new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, "urn:vecto:xml:2017:canonicalization")) - ), + ), new XElement(di + XMLNames.DI_Signature_Reference_DigestMethod, new XAttribute(XMLNames.DI_Signature_Algorithm_Attr, "http://www.w3.org/2001/04/xmlenc#sha256")), new XElement(di + XMLNames.DI_Signature_Reference_DigestValue, "") - ) - ); + ) + ); } protected XElement[] GetDefaultComponentElements(string componentId, string makeAndModel) @@ -398,5 +416,11 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)), }; } + + private string CreateIdString(string id) + { + var regexp = new Regex("[^a-zA-Z0-9_-]"); + return regexp.Replace(id, ""); + } } -} \ No newline at end of file +}