diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings index 72ab10a7f7948db3ba37bf3ac00b510794cd2a0f..5838ac913881193f6c1c9fcfdc398240c300bd8a 100644 --- a/VECTO.sln.DotSettings +++ b/VECTO.sln.DotSettings @@ -2,6 +2,7 @@ <s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/WrapIntoRegions/@EntryValue">True</s:Boolean> <s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=HashingTool_002EAnnotations/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=VECTO3GUI2020_002EAnnotations/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Evdri/@EntryIndexedValue">True</s:Boolean> <s:String x:Key="/Default/CodeStyle/CodeCleanup/SilentCleanupProfile/@EntryValue">Default: Reformat Code</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CommonFormatter/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String> @@ -124,4 +125,6 @@ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsWrapperSettingsUpgrader/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EVB_002ECodeStyle_002ESettingsUpgrade_002EVBSpaceAfterUnaryMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EXml_002ECodeStyle_002EFormatSettingsUpgrade_002EXmlMoveToCommonFormatterSettingsUpgrade/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/Housekeeping/ExcludedProjects/ProjectMasksToIgnore/=_002A_002A_002Evdri/@EntryIndexedValue">False</s:Boolean> + <s:Boolean x:Key="/Default/Housekeeping/ExcludedProjects/ProjectMasksToIgnore/=_002A_002Evdri/@EntryIndexedValue">False</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=RESS/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 8d3fa15223a3f2ec11023195f1810c103e7066ae..22992910309679fb26be528ee45ef286d74f417a 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -620,7 +620,6 @@ Public Class DummyVehicle Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle Public Property VIN As String Implements IVehicleDeclarationInputData.VIN - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration @@ -653,7 +652,8 @@ Public Class DummyVehicle Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1 Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2 - Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology + Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck Public ReadOnly Property NumberPassengersStandingLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengersStandingLowerDeck diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 3f24eecc22bf20f68c58b07050e50057c4a612d0..317fdaaa86da67c5f78b3aa552b9f9c4cf419bab 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -802,7 +802,6 @@ Public Class MockEngineeringVehicle Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle Public Property VIN As String Implements IVehicleDeclarationInputData.VIN - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration @@ -839,6 +838,7 @@ Public Class MockEngineeringVehicle Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1 Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2 + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck diff --git a/VECTO/Input Files/MockVehicleInputData.vb b/VECTO/Input Files/MockVehicleInputData.vb index 0ff5fff18194700bcd5118c54631dc26b275fbf9..3b484d4c0486e8f5305b31385f504c001eba1d8c 100644 --- a/VECTO/Input Files/MockVehicleInputData.vb +++ b/VECTO/Input Files/MockVehicleInputData.vb @@ -19,7 +19,6 @@ Public Class MockVehicleInputData Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle Public Property VIN As String Implements IVehicleDeclarationInputData.VIN - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration @@ -41,6 +40,7 @@ Public Class MockVehicleInputData Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1 Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2 + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index f501510b56920b19d4761bddbed45fb77e03295d..c2259f8da151268f021b380cb99c489f3220deb8 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -380,8 +380,6 @@ Public Class Vehicle End Get End Property - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory - Public ReadOnly Property LegislativeClass As LegislativeClass? Implements IVehicleEngineeringInputData.LegislativeClass Get Return legClass @@ -856,7 +854,9 @@ end Property End Get End Property - Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology + + Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck Public ReadOnly Property NumberPassengersStandingLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengersStandingLowerDeck diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs index 86dbd231f7e3dd335f799c6bd9ede924e857af08..9ffa326e265b11f4f4582c5fde25b96b7ff33559 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs @@ -179,8 +179,6 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle set => throw new NotImplementedException(); } - public virtual string LegislativeCategory => throw new NotImplementedException(); - LegislativeClass? IVehicleDeclarationInputData.LegislativeClass { get; } public virtual LegislativeClass LegislativeClass @@ -282,6 +280,8 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle set => throw new NotImplementedException(); } + public string ExemptedTechnology { get; } + RegistrationClass? IVehicleDeclarationInputData.RegisteredClass { get; } int? IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck { get; } int? IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck { get; } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs index 6acdf1436719dc0f725bed27144a42c983a09446..c362975ad4e2e663fa9967ad9d80a74324137f0c 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -687,6 +687,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #endregion; + public string ExemptedTechnology { get; } + public RegistrationClass? RegisteredClass { get => _registeredClass; @@ -739,10 +741,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #region not implemented - public string LegislativeCategory - { - get => throw new NotImplementedException(); - } public IGearboxDeclarationInputData GearboxInputData => throw new NotImplementedException(); public ITorqueConverterDeclarationInputData TorqueConverterInputData => throw new NotImplementedException(); diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index d9ba954aa970cf40a7b8f64bfd36b1b6552bb622..e643884fb20226ba65ef2781423d63e64baaa711 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -99,8 +99,6 @@ namespace TUGraz.VectoCommon.InputData string VIN { get; } - string LegislativeCategory { get; } - LegislativeClass? LegislativeClass { get; } /// <summary> @@ -169,6 +167,9 @@ namespace TUGraz.VectoCommon.InputData Watt MaxNetPower2 { get; } + string ExemptedTechnology { get; } + + RegistrationClass? RegisteredClass { get; } int? NumberPassengerSeatsUpperDeck { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index aa0e5815a8293e7ae0035bcc8ef301f66b85d5f7..b3521a3aba47e528532f0d1968704257c5a26800 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -233,11 +233,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return VehicleData.VIN; } } - public string LegislativeCategory - { - get { return null; } - } - public LegislativeClass? LegislativeClass { get { return VehicleData.LegislativeClass; } @@ -562,6 +557,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return null; } } + public string ExemptedTechnology + { + get { return null; } + } + public RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index cd231ad39666df421a3091944a5d571dde2b6170..6b4e9b9e9843af3c253d0ddfe9b813524c42b5c2 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -259,11 +259,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Constants.NOT_AVailABLE; } } - public string LegislativeCategory - { - get { return null; } - } - public virtual LegislativeClass? LegislativeClass { get { @@ -647,6 +642,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return null; } } + public string ExemptedTechnology + { + get { return null; } + } + public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 15de858e1ec65989b13ce5c405642bf4f7f3f2d2..def9197ec79295101c7942784ca18c22ce0b990a 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -120,14 +120,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } - public virtual string LegislativeCategory - { - get { return null; } - } - public virtual LegislativeClass? LegislativeClass { - get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); } + get { return GetString("LegislativeCategory").ParseEnum<LegislativeClass>(); } } public virtual VehicleCategory VehicleCategory @@ -150,7 +145,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual Kilogram GrossVehicleMassRating { - get { return GetDouble(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); } + get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); } } public virtual IList<ITorqueLimitInputData> TorqueLimits @@ -278,6 +273,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + public virtual string ExemptedTechnology + { + get { return null; } + } + public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown; } @@ -741,6 +741,123 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } + public class XMLDeclarationExemptedPrimaryBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; + + public new const string XSD_TYPE = "ExemptedPrimaryHeavyBusType"; + + public new static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationExemptedPrimaryBusDataProviderV26( + IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) + { + SourceType = DataSourceType.XMLEmbedded; + + } + + #region Overrides of AbstractXMLResource + + protected override XNamespace SchemaNamespace { + get { return NAMESPACE_URI; } + } + + protected override DataSourceType SourceType { get; } + + #endregion + + public override VehicleCategory VehicleCategory { + get { return VehicleCategory.HeavyBusPrimaryVehicle; } + } + + public override bool ExemptedVehicle { + get { return true; } + } + + + public override IList<ITorqueLimitInputData> TorqueLimits { + get { return new List<ITorqueLimitInputData>(); } + } + + public override PerSecond EngineIdleSpeed { + get { return null; } + } + + public override bool VocationalVehicle { + get { return false; } + } + + public override bool SleeperCab { + get { return false; } + } + + public override TankSystem? TankSystem { + get { return null; } + } + + public override IAdvancedDriverAssistantSystemDeclarationInputData ADAS { + get { return null; } + } + + public override bool ZeroEmissionVehicle { + get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ZeroEmissionVehicle)); } + } + + public override bool HybridElectricHDV { + get { return false; } + } + + public override bool DualFuelVehicle { + get { return false; } + } + + public override Watt MaxNetPower1 { + get { return GetDouble("SumNetPower").SI<Watt>(); } + } + + public override Watt MaxNetPower2 { + get { return null; } + } + + public override string ExemptedTechnology + { + get { return GetString("Technology"); } + } + + public override IVehicleComponentsDeclaration Components { + get { return null; } + } + + public override XmlElement ComponentNode { + get { return null; } + } + + public override XmlElement PTONode { + get { return null; } + } + + public override XmlElement ADASNode { + get { return null; } + } + + public override AngledriveType AngledriveType { + get { return AngledriveType.None; } + } + + public override RetarderType RetarderType { + get { return RetarderType.None; } + } + + public override double RetarderRatio { + get { return 0; } + } + + public override IPTOTransmissionInputData PTOTransmissionInputData { + get { return null; } + } + } + public class XMLDeclarationMediumLorryVehicleDataProviderV26 : XMLDeclarationVehicleDataProviderV21 { public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; @@ -804,6 +921,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider protected override DataSourceType SourceType { get; } #endregion + + public override XmlElement ComponentNode { + get { return null; } + } + + + public override XmlElement ADASNode { + get { return null; } + } + + public override AngledriveType AngledriveType { + get { return AngledriveType.None; } + } + + public override RetarderType RetarderType { + get { return RetarderType.None; } + } + + public override double RetarderRatio { + get { return 0; } + } + } public class XMLDeclarationCompletedBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20 @@ -970,9 +1109,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } - public string LegislativeCategory + public LegislativeClass? LegislativeClass { - get { return GetString(XMLNames.Bus_LegislativeCategory); } + get { return GetString(XMLNames.Bus_LegislativeCategory)?.ParseEnum<LegislativeClass>(); } } public VehicleCategory VehicleCategory @@ -1070,7 +1209,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public string Identifier { get; } public bool ExemptedVehicle { get; } - public LegislativeClass? LegislativeClass { get; } public int? NumberPassengerSeatsUpperDeck { get; } public int? NumberPassengerSeatsLowerDeck { get; } public int? NumberPassengersStandingLowerDeck { get; } @@ -1090,6 +1228,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public bool DualFuelVehicle { get; } public Watt MaxNetPower1 { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } public RegistrationClass? RegisteredClass { get; } public VehicleCode? VehicleCode { get; } public bool? LowEntry { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs index d2a946a414c4cdb9f521cf0bb662b866d5d027a3..ab7b6e506f1d8f1e309a108317c953ea8937663d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs @@ -18,6 +18,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules { Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationCompletedBusDataProviderV26>() .Named(XMLDeclarationCompletedBusDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationExemptedPrimaryBusDataProviderV26>() + .Named(XMLDeclarationExemptedPrimaryBusDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationPrimaryBusComponentsDataProviderV26>() .Named(XMLDeclarationPrimaryBusComponentsDataProviderV26.QUALIFIED_XSD_TYPE); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs index aca0d0a9e7f3ca929114984d2e52b9c9455e3bf2..3fe5644d8b92b3fe9f706c581bd1c7ea2e52c5f9 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -13,6 +13,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl @@ -468,11 +469,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl get { return _manufacturingStages.First().Vehicle.VIN; } } - public string LegislativeCategory - { - get { return null; } - } - public VehicleDeclarationType VehicleDeclarationType { get { return _manufacturingStages.First().Vehicle.VehicleDeclarationType; } @@ -633,6 +629,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public bool DualFuelVehicle { get; } public Watt MaxNetPower1 { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } + public CubicMeter CargoVolume { get; } public bool Articulated { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs index 0856567215232a6ed62cf5190ef0a5f62c8a6a18..e2fc9ac0e0478d775e7f9389a50c21822aa1bbde 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs @@ -108,11 +108,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } - public string LegislativeCategory - { - get { return null; } - } - public virtual LegislativeClass? LegislativeClass { get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); } @@ -206,6 +201,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider get { return null; } } + public string ExemptedTechnology { get; } + public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown;} } public virtual int? NumberPassengerSeatsUpperDeck { get { return 0; } } public virtual int? NumberPassengerSeatsLowerDeck { get { return 0; } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index f7b09265fd25ac83a610590545459d9b1481b567..bac7250881df05bb3fd71949d9bf92a0034e5901 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -34,11 +34,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational) { var retVal = base.CreateVehicleData(data, segment, mission, loading, allowVocational); + if (data.ExemptedVehicle) { + return retVal; + } retVal.CurbMass = mission.CurbMass; retVal.GrossVehicleMass = 40000.SI<Kilogram>(); return retVal; } + protected override VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data) + { + var exempted = new VehicleData { + InputData = data, + SavedInDeclarationMode = data.SavedInDeclarationMode, + Manufacturer = data.Manufacturer, + ModelName = data.Model, + Date = data.Date, + //CertificationNumber = data.CertificationNumber, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", + VehicleCategory = data.VehicleCategory, + //CurbMass = data.CurbMassChassis, + GrossVehicleMass = data.GrossVehicleMassRating, + AirDensity = Physics.AirDensity, + }; + exempted.VIN = data.VIN; + exempted.ManufacturerAddress = data.ManufacturerAddress; + exempted.LegislativeClass = data.LegislativeClass; + exempted.ZeroEmissionVehicle = data.ZeroEmissionVehicle; + exempted.HybridElectricHDV = data.HybridElectricHDV; + exempted.DualFuelVehicle = data.DualFuelVehicle; + exempted.MaxNetPower1 = data.MaxNetPower1; + exempted.MaxNetPower2 = data.MaxNetPower2; + exempted.AxleConfiguration = data.AxleConfiguration; + return exempted; + } + public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto) { return null; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs index 20791a0cba50fc7257b62fd843df3e1009534885..7a1382a8113bc322fb78da49fa896a68f0ac4d69 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs @@ -191,6 +191,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl return simulationRunData; } - + } } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs index fa3fcf02e873933a62d93bf7e6da95d303f654ed..31de49f7708027e99af34e5faae4e896eb30c63f 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs @@ -32,10 +32,19 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected override IEnumerable<VectoRunData> GetNextRun() { if (InputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle) { - return VectoRunDataHeavyBusPrimary(); + if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) { + yield return CreateVectoRunData(InputDataProvider.JobInputData.Vehicle, 0, null, + new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>()); + } else { + foreach (var vectoRunData in VectoRunDataHeavyBusPrimary()) { + yield return vectoRunData; + } + } } - return new List<VectoRunData>(); + foreach (var entry in new List<VectoRunData>()) { + yield return entry; + } } protected override Segment GetSegment(IVehicleDeclarationInputData vehicle) @@ -80,6 +89,19 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected override VectoRunData CreateVectoRunData( IVehicleDeclarationInputData vehicle, int modeIdx, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading) { + if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) { + return new VectoRunData() { + Exempted = true, + Report = Report, + Mission = new Mission() { MissionType = MissionType.ExemptedMission }, + VehicleData = DataAdapter.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, new Segment(), + null, + new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(LoadingType.ReferenceLoad, + Tuple.Create<Kilogram, double?>(0.SI<Kilogram>(), null)), _allowVocational), + InputDataHash = InputDataProvider.XMLHash + }; + } + var engine = vehicle.Components.EngineInputData; var engineModes = engine.EngineModes; var engineMode = engineModes[modeIdx]; diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..dc7e48050a1b6f7231f33dc1115e4db6f7f820ef --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile +{ + public interface IXMLCustomerReport + { + void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + XDocument Report { get; } + void WriteResult(XMLDeclarationReport.ResultEntry resultValue); + void GenerateReport(XElement resultSignature); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs similarity index 95% rename from VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs index 7f3224de4d1eb39ec16adee55e5b8e057a41157f..5cb19313b4e8233fd8f9d162bf6bf4aa8e9c5b36 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs @@ -1,296 +1,319 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -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; -using TUGraz.VectoCore.Utils; -using TUGraz.VectoHashing; - -namespace TUGraz.VectoCore.OutputData.XML -{ - public class XMLCustomerReport - { - public const string CURRENT_SCHEMA_VERSION = "0.8"; - - protected readonly XElement VehiclePart; - - protected XElement InputDataIntegrity; - - protected readonly XElement Results; - - protected readonly XNamespace rootNS = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput"); - protected readonly XNamespace tns = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v" + CURRENT_SCHEMA_VERSION); - protected readonly XNamespace di = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#"); - protected readonly XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - - protected bool _allSuccess = true; - - protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>(); - - protected Kilogram _weightedPayload = 0.SI<Kilogram>(); - protected double _passengerCount = 0; - - - public XMLCustomerReport() - { - - VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); - Results = new XElement(tns + XMLNames.Report_Results); - } - - public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - var exempted = modelData.Exempted; - VehiclePart.Add( - new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), - new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), - new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), - new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), - new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), - new XElement( - tns + XMLNames.Vehicle_GrossVehicleMass, - XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)), - new XElement( - tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), - new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), - new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV), - new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle) - ); - - if (exempted) { - VehiclePart.Add(new XAttribute(xsi + "type", "ExemptedVehicleType"), - ExemptedData(modelData)); - Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); - } else { - VehiclePart.Add( - new XAttribute(xsi + "type", "VehicleType"), - new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), - new XElement(tns + XMLNames.Vehicle_VocationalVehicle, modelData.VehicleData.VocationalVehicle), - new XElement(tns + XMLNames.Vehicle_SleeperCab, modelData.VehicleData.SleeperCab), - GetADAS(modelData.VehicleData.ADAS), - ComponentData(modelData, fuelModes) - ); - } - InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature, - modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash)); - } - - private object[] ExemptedData(VectoRunData modelData) - { - return new object[] { - modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower1, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)) : null, - modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower2, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower2, XMLNames.Unit_W)) : null - }; - } - - protected XElement GetADAS(VehicleData.ADASData adasData) - { - return new XElement(tns + XMLNames.Vehicle_ADAS, - new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()), - new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None) - ); - } - - protected virtual XElement[] ComponentData(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - return new[] { - new XElement( - tns + XMLNames.Report_Vehicle_EngineRatedPower, - XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)), - new XElement( - tns + XMLNames.Report_Vehicle_EngineDisplacement, - XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)), - new XElement( - tns + XMLNames.Report_Vehicle_FuelTypes, - fuelModes.SelectMany(x => x.Select(f => f.FuelType.ToXMLFormat())).Distinct() - .Select(x => new XElement(tns + XMLNames.Engine_FuelType, x)) - ), - new XElement( - tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod, - modelData.GearboxData.CertificationMethod.ToXMLFormat()), - new XElement(tns + XMLNames.Gearbox_TransmissionType, modelData.GearboxData.Type.ToXMLFormat()), - new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, modelData.GearboxData.Gears.Count), - new XElement(tns + XMLNames.Report_Vehicle_Retarder, modelData.Retarder.Type.IsDedicatedComponent()), - new XElement(tns + XMLNames.Report_Vehicle_AxleRatio, modelData.AxleGearData.AxleGear.Ratio.ToXMLFormat(3)), - new XElement( - tns + XMLNames.Report_Vehicle_AverageRRC, modelData.VehicleData.AverageRollingResistanceTruck.ToXMLFormat(4)), - - //new XElement( - // tns + XMLNames.Report_Vehicle_AverageRRCLabel, - // DeclarationData.Wheels.TyreClass.Lookup(modelData.VehicleData.AverageRollingResistanceTruck)) - }.Concat( - modelData.VehicleData.AxleData.Where(x => x.AxleType != AxleType.Trailer).Select( - (x, idx) => new XElement(tns + "FuelEfficiencyLabelMotorVehicleTyre", - new XAttribute("axleNbr", idx+1), - x.FuelEfficiencyClass))).ToArray(); - - } - - - - public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) - { - //foreach (var resultEntry in entry.ResultEntry) { - _allSuccess &= resultEntry.Status == VectoRun.Status.Success; - if (resultEntry.Status == VectoRun.Status.Success) { - _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; - _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; - _passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor; - } - Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); - } - - private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry) - { - var content = new object[] { }; - switch (resultEntry.Status) { - case VectoRun.Status.Pending: - case VectoRun.Status.Running: - content = null; // should not happen! - break; - case VectoRun.Status.Canceled: - case VectoRun.Status.Aborted: - content = new object[] { - new XElement(tns + "Error", resultEntry.Error) - }; - break; - default: - throw new ArgumentOutOfRangeException(); - } - - return new XElement(tns + XMLNames.Report_Result_Result, - new XAttribute(XMLNames.Report_Result_Status_Attr, "error"), - new XAttribute(xsi + "type", "ResultErrorType"), - new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), - content); - } - - private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) - { - return new XElement( - tns + XMLNames.Report_Result_Result, - new XAttribute(XMLNames.Report_Result_Status_Attr, "success"), - new XAttribute(xsi + "type", "ResultSuccessType"), - new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()), - new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, - XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)), - new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), - result.PassengerCount.HasValue && result.PassengerCount.Value > 0 - ? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1)) - : null, - new XElement(tns + XMLNames.Report_Result_FuelMode, - result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single), - new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), - XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray() - ); - } - - protected XElement GetApplicationInfo() - { - var versionNumber = VectoSimulationCore.VersionNumber; -#if CERTIFICATION_RELEASE - // add nothing to version number -#else - versionNumber += " !!NOT FOR CERTIFICATION!!"; -#endif - return new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation, - new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, versionNumber), - new XElement(tns + XMLNames.Report_ApplicationInfo_Date, - XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc))); - } - - public virtual void GenerateReport(XElement resultSignature) - { - - var retVal = new XDocument(); - var results = new XElement(Results); - results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); - var summary = _allSuccess && _weightedPayload > 0 - ? new XElement(tns + XMLNames.Report_Results_Summary, - new XElement(tns + XMLNames.Report_SpecificCO2Emissions, - new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_gCO2Pertkm), - (_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1) - ), - new XElement(tns + XMLNames.Report_AveragePayload, - new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t), - _weightedPayload.ConvertToTon().ToXMLFormat(3) - ), - _passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null - ) - : null; - results.Add(summary); - var vehicle = new XElement(VehiclePart); - vehicle.Add(InputDataIntegrity); - retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); - retVal.Add(new XElement(rootNS + XMLNames.VectoCustomerReport, - //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), - new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), - new XAttribute(XNamespace.Xmlns + "tns", rootNS), - new XAttribute(XNamespace.Xmlns + "di", di), - new XAttribute(xsi + "schemaLocation", - string.Format("{0} {1}DEV/VectoOutputCustomer.xsd", rootNS, AbstractXMLWriter.SchemaLocationBaseUrl)), - new XElement(rootNS + XMLNames.Report_DataWrap, - new XAttribute(xsi + "type", "VectoOutputDataType"), - vehicle, - new XElement(tns + XMLNames.Report_ResultData_Signature, resultSignature), - results, - GetApplicationInfo()) - ) - ); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(retVal); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - var h = VectoHash.Load(stream); - Report = h.AddHash(); - } - - public XDocument Report { get; protected set; } - } -} +/* +* This file is part of VECTO. +* +* Copyright © 2012-2019 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML.Writer; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +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; +using TUGraz.VectoCore.Utils; +using TUGraz.VectoHashing; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile +{ + public class XMLCustomerReport : IXMLCustomerReport + { + public const string CURRENT_SCHEMA_VERSION = "0.8"; + + protected readonly XElement VehiclePart; + + protected XElement InputDataIntegrity; + + protected readonly XElement Results; + + protected readonly XNamespace rootNS = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput"); + protected readonly XNamespace tns = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v" + CURRENT_SCHEMA_VERSION); + protected readonly XNamespace di = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#"); + protected readonly XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); + + protected bool _allSuccess = true; + + protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>(); + + protected Kilogram _weightedPayload = 0.SI<Kilogram>(); + protected double _passengerCount = 0; + + + public XMLCustomerReport() + { + + VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); + Results = new XElement(tns + XMLNames.Report_Results); + } + + public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + var exempted = modelData.Exempted; + VehiclePart.Add( + new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement( + tns + XMLNames.Vehicle_GrossVehicleMass, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)), + new XElement( + tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV), + new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle) + ); + + if (exempted) { + VehiclePart.Add(new XAttribute(xsi + "type", "ExemptedVehicleType"), + ExemptedData(modelData)); + Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); + } else { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehicleType"), + new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), + new XElement(tns + XMLNames.Vehicle_VocationalVehicle, modelData.VehicleData.VocationalVehicle), + new XElement(tns + XMLNames.Vehicle_SleeperCab, modelData.VehicleData.SleeperCab), + GetADAS(modelData.VehicleData.ADAS), + ComponentData(modelData, fuelModes) + ); + } + InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature, + modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash)); + } + + private object[] ExemptedData(VectoRunData modelData) + { + return new object[] { + modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower1, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)) : null, + modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower2, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower2, XMLNames.Unit_W)) : null + }; + } + + protected XElement GetADAS(VehicleData.ADASData adasData) + { + return new XElement(tns + XMLNames.Vehicle_ADAS, + new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()), + new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None) + ); + } + + protected virtual XElement[] ComponentData(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + return new[] { + new XElement( + tns + XMLNames.Report_Vehicle_EngineRatedPower, + XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)), + new XElement( + tns + XMLNames.Report_Vehicle_EngineDisplacement, + XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)), + new XElement( + tns + XMLNames.Report_Vehicle_FuelTypes, + fuelModes.SelectMany(x => x.Select(f => f.FuelType.ToXMLFormat())).Distinct() + .Select(x => new XElement(tns + XMLNames.Engine_FuelType, x)) + ), + new XElement( + tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod, + modelData.GearboxData.CertificationMethod.ToXMLFormat()), + new XElement(tns + XMLNames.Gearbox_TransmissionType, modelData.GearboxData.Type.ToXMLFormat()), + new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, modelData.GearboxData.Gears.Count), + new XElement(tns + XMLNames.Report_Vehicle_Retarder, modelData.Retarder.Type.IsDedicatedComponent()), + new XElement(tns + XMLNames.Report_Vehicle_AxleRatio, modelData.AxleGearData.AxleGear.Ratio.ToXMLFormat(3)), + new XElement( + tns + XMLNames.Report_Vehicle_AverageRRC, modelData.VehicleData.AverageRollingResistanceTruck.ToXMLFormat(4)), + + //new XElement( + // tns + XMLNames.Report_Vehicle_AverageRRCLabel, + // DeclarationData.Wheels.TyreClass.Lookup(modelData.VehicleData.AverageRollingResistanceTruck)) + }.Concat( + modelData.VehicleData.AxleData.Where(x => x.AxleType != AxleType.Trailer).Select( + (x, idx) => new XElement(tns + "FuelEfficiencyLabelMotorVehicleTyre", + new XAttribute("axleNbr", idx+1), + x.FuelEfficiencyClass))).ToArray(); + + } + + + + public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + { + //foreach (var resultEntry in entry.ResultEntry) { + _allSuccess &= resultEntry.Status == VectoRun.Status.Success; + if (resultEntry.Status == VectoRun.Status.Success) { + _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; + _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; + _passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor; + } + Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); + } + + private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry) + { + var content = new object[] { }; + switch (resultEntry.Status) { + case VectoRun.Status.Pending: + case VectoRun.Status.Running: + content = null; // should not happen! + break; + case VectoRun.Status.Canceled: + case VectoRun.Status.Aborted: + content = new object[] { + new XElement(tns + "Error", resultEntry.Error) + }; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return new XElement(tns + XMLNames.Report_Result_Result, + new XAttribute(XMLNames.Report_Result_Status_Attr, "error"), + new XAttribute(xsi + "type", "ResultErrorType"), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), + content); + } + + private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) + { + return new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute(XMLNames.Report_Result_Status_Attr, "success"), + new XAttribute(xsi + "type", "ResultSuccessType"), + new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()), + new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, + XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), + result.PassengerCount.HasValue && result.PassengerCount.Value > 0 + ? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1)) + : null, + new XElement(tns + XMLNames.Report_Result_FuelMode, + result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single), + new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), + XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray() + ); + } + + protected XElement GetApplicationInfo() + { + var versionNumber = VectoSimulationCore.VersionNumber; +#if CERTIFICATION_RELEASE + // add nothing to version number +#else + versionNumber += " !!NOT FOR CERTIFICATION!!"; +#endif + return new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation, + new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, versionNumber), + new XElement(tns + XMLNames.Report_ApplicationInfo_Date, + XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc))); + } + + public virtual void GenerateReport(XElement resultSignature) + { + + var retVal = new XDocument(); + var results = new XElement(Results); + results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); + var summary = _allSuccess && _weightedPayload > 0 + ? new XElement(tns + XMLNames.Report_Results_Summary, + new XElement(tns + XMLNames.Report_SpecificCO2Emissions, + new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_gCO2Pertkm), + (_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1) + ), + new XElement(tns + XMLNames.Report_AveragePayload, + new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t), + _weightedPayload.ConvertToTon().ToXMLFormat(3) + ), + _passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null + ) + : null; + results.Add(summary); + var vehicle = new XElement(VehiclePart); + vehicle.Add(InputDataIntegrity); + retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); + retVal.Add(new XElement(rootNS + XMLNames.VectoCustomerReport, + //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), + new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), + new XAttribute("xmlns", tns), + new XAttribute(XNamespace.Xmlns + "tns", rootNS), + new XAttribute(XNamespace.Xmlns + "di", di), + new XAttribute(xsi + "schemaLocation", + string.Format("{0} {1}DEV/VectoOutputCustomer.xsd", rootNS, AbstractXMLWriter.SchemaLocationBaseUrl)), + new XElement(rootNS + XMLNames.Report_DataWrap, + new XAttribute(xsi + "type", "VectoOutputDataType"), + vehicle, + new XElement(tns + XMLNames.Report_ResultData_Signature, resultSignature), + results, + GetApplicationInfo()) + ) + ); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(retVal); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + var h = VectoHash.Load(stream); + Report = h.AddHash(); + } + + public XDocument Report { get; protected set; } + } + + public class XMLCustomerReportExemptedPrimaryBus : IXMLCustomerReport + { + #region Implementation of IXMLCustomerReport + + public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + // MQ 2021-06-14 TODO: fill with meat + } + + public XDocument Report { get; } + public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + { + // MQ 2021-06-14 TODO: fill with meat + } + + public void GenerateReport(XElement resultSignature) + { + // MQ 2021-06-14 TODO: fill with meat + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs similarity index 98% rename from VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs index c53f43e48c30f4c0edda372a091e6565e2d88afd..56d42396c3b5628f6107076c810dce734116b727 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs @@ -4,7 +4,6 @@ using System.IO; using System.Linq; using System.Xml.Linq; using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; @@ -12,10 +11,11 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; -namespace TUGraz.VectoCore.OutputData.XML { +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile { public class XMLCustomerReportCompletedBus : XMLCustomerReport { private int _resultCount = 0; diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs similarity index 97% rename from VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs index 920521811ccf9fe1ca1e7da7da910299abe3c67e..7663933f52c73121d047fffb3717456d59108425 100644 --- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs @@ -18,16 +18,8 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport { - public interface IXMLManufacturerReport - { - void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); - XDocument Report { get; } - void WriteResult(XMLDeclarationReport.ResultEntry resultValue); - void GenerateReport(); - } - public abstract class AbstractXMLManufacturerReport : IXMLManufacturerReport { protected XElement VehiclePart; @@ -38,10 +30,12 @@ namespace TUGraz.VectoCore.OutputData.XML protected XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8"; + protected XNamespace vns; protected XNamespace di = "http://www.w3.org/2000/09/xmldsig#"; protected AbstractXMLManufacturerReport() { + vns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8"; VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); Results = new XElement(tns + XMLNames.Report_Results); } @@ -67,16 +61,17 @@ namespace TUGraz.VectoCore.OutputData.XML //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), + new XAttribute("xmlns", vns), new XAttribute(XNamespace.Xmlns + "di", di), - //new XAttribute(XNamespace.Xmlns + "tns", tns), - new XAttribute(XNamespace.Xmlns + "mrf", mrf), + new XAttribute(XNamespace.Xmlns + "tns", tns), + new XAttribute(XNamespace.Xmlns + "vns", vns), + new XAttribute(XNamespace.Xmlns + "mrf", mrf), new XAttribute( xsi + "schemaLocation", string.Format("{0} {1}/DEV/VectoOutputManufacturer.xsd", mrf, AbstractXMLWriter.SchemaLocationBaseUrl)), new XElement( mrf + XMLNames.Report_DataWrap, - new XAttribute(xsi + "type", "VectoOutputDataType"), + new XAttribute(xsi + "type", "tns:VectoOutputDataType"), vehicle, results, GetApplicationInfo()) @@ -229,7 +224,7 @@ namespace TUGraz.VectoCore.OutputData.XML protected virtual XElement GetInputDataSignature(VectoRunData modelData) { return new XElement( - tns + XMLNames.Report_Input_Signature, + vns + XMLNames.Report_Input_Signature, modelData.InputDataHash == null ? CreateDummySig() : new XElement(modelData.InputDataHash)); } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..7bc13048203c9b0ff9e7fdfcb92f36b5b4a96ef3 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport +{ + public interface IXMLManufacturerReport + { + void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + XDocument Report { get; } + void WriteResult(XMLDeclarationReport.ResultEntry resultValue); + void GenerateReport(); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs similarity index 99% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs index cb166c50c44758fb2ae47b81f43b93ef549b4a77..e4bf8ccf77b7ba003da38c2cde71de7d4752d87f 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs @@ -14,7 +14,7 @@ using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.OutputData.XML { +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport { public class XMLManufacturerReportCompletedBus : AbstractXMLManufacturerReport { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs similarity index 96% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs index 510bae3f30ee10216dfb476141a512a27cdbaac8..1fe9400d30dc7511c957873c074bad77509cf8f8 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs @@ -6,7 +6,8 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.OutputData.XML { +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport +{ public class XMLManufacturerReportExemptedTruck : AbstractXMLManufacturerReport { public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs new file mode 100644 index 0000000000000000000000000000000000000000..0a656e0ccb5aa32e35a6da4ec96096efea66852c --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport +{ + public class XMLManufacturerReportExeptedPrimaryBus : AbstractXMLManufacturerReport + { + + public XMLManufacturerReportExeptedPrimaryBus() + { + vns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1"; + } + + public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehicleExemptedPrimaryBusType"), + new XElement(vns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(vns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(vns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(vns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(vns + "LegislativeCategory", modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement(vns + XMLNames.Bus_ChassisConfiguration, "Bus"), + new XElement(vns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(vns + XMLNames.Vehicle_Articulated, modelData.VehicleData.InputData.Articulated), + new XElement( + vns + XMLNames.Vehicle_TPMLM, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_kg, 1)), + //new XElement( + // tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(vns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(vns + "SumNetPower", XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)), + new XElement(vns + "Technology", modelData.VehicleData.InputData.ExemptedTechnology) + + ); + Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); + + InputDataIntegrity = GetInputDataSignature(modelData); + } + + protected override XElement VehicleComponents(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + return null; + } + + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs similarity index 97% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs index f1b62a28de21ca8620866c8eff7e573c2160194a..3b8604cb9a67c21b1ab5831b6223a1ba366b55e0 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs @@ -5,6 +5,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.OutputData.XML { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs similarity index 98% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs index d14364d2369ebc7cc0e80d85e1e480ed1c8981b2..e65b7972036240c0cb70f326d8f2520c4e9ac991 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs @@ -38,7 +38,7 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport { public class XMLManufacturerReportTruck : AbstractXMLManufacturerReport { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VTPReport/XMLVTPReport.cs similarity index 100% rename from VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VTPReport/XMLVTPReport.cs diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..8111f0f90327ad62916024eb1a0593f6d8343f86 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs @@ -0,0 +1,12 @@ +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile +{ + public interface IXMLMultistageReport + { + void Initialize(VectoRunData modelData); + XDocument Report { get; } + void GenerateReport(); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..f28672258a5e8043e12bedfe8736f3b5c85ba629 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile +{ + public interface IXMLPrimaryVehicleReport + { + void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + void WriteResult(XMLDeclarationReport.ResultEntry result); + void GenerateReport(XElement fullReportHash); + XDocument Report { get; } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..7857a92f0ad86356aad18f5c8e50bfc8381b162c --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.Hashing; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile +{ + public class XMLExemptedPrimaryBusVehicleReport : XMLPrimaryBusVehicleReport + { + #region Implementation of IXMLPrimaryVehicleReport + + public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehicleExemptedPrimaryBusType"), + new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(tns + "LegislativeCategory", modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement(tns + XMLNames.Bus_ChassisConfiguration, "Bus"), + new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(tns + XMLNames.Vehicle_Articulated, modelData.VehicleData.InputData.Articulated), + new XElement( + tns + XMLNames.Vehicle_TPMLM, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_kg, 1)), + //new XElement( + // tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(tns + "SumNetPower", XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)), + new XElement(tns + "Technology", modelData.VehicleData.InputData.ExemptedTechnology) + + ); + Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); + + InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature, + modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash)); + + } + + public override void WriteResult(XMLDeclarationReport.ResultEntry result) + { + // no results for exempted vehicle + } + + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs similarity index 99% rename from VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs index 106ef6b5d02102fa977ed58382f0fc881e618764..f4689b1324c787fa7526d0271e3d2bac3ccd04dc 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs @@ -18,16 +18,8 @@ using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; - -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile { - public interface IXMLMultistageReport - { - void Initialize(VectoRunData modelData); - XDocument Report { get; } - void GenerateReport(); - } - public class XMLMultistageBusReport: IXMLMultistageReport { protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"; diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs similarity index 97% rename from VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs index 1f3a72425991957da71fba810e05e09fb421965b..378038f5ebc7d5cf1206ebcfe94cf4e55527b007 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs @@ -21,9 +21,9 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile { - public class XMLPrimaryVehicleReport + public class XMLPrimaryBusVehicleReport : IXMLPrimaryVehicleReport { protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"; protected XNamespace di = "http://www.w3.org/2000/09/xmldsig#"; @@ -40,19 +40,19 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement InputDataIntegrity; protected XElement Results; - private bool _allSuccess = true; + protected bool _allSuccess = true; - public XMLPrimaryVehicleReport() + public XMLPrimaryBusVehicleReport() { VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); Results = new XElement(tns + XMLNames.Report_Results); } - public XDocument Report { get; private set; } + public XDocument Report { get; protected set; } - public void GenerateReport(XElement resultSignature) + public virtual void GenerateReport(XElement resultSignature) { var retVal = new XDocument(); retVal.Add( @@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML Report = retVal; } - private XElement GeneratePrimaryVehicle(XElement resultSignature) + protected virtual XElement GeneratePrimaryVehicle(XElement resultSignature) { var results = new XElement(Results); results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); @@ -95,7 +95,7 @@ namespace TUGraz.VectoCore.OutputData.XML return primaryVehicle; } - private XElement GetSignatureElement(XElement stage) + protected XElement GetSignatureElement(XElement stage) { var stream = new MemoryStream(); var writer = new StreamWriter(stream); @@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.OutputData.XML (VectoHash.DefaultCanonicalizationMethod, VectoHash.DefaultDigestMethod)); } - private XElement GetApplicationInfo() + protected XElement GetApplicationInfo() { var versionNumber = VectoSimulationCore.VersionNumber; #if CERTIFICATION_RELEASE // add nothing to version number @@ -518,7 +518,7 @@ namespace TUGraz.VectoCore.OutputData.XML }; } - public void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) { _allSuccess &= resultEntry.Status == VectoRun.Status.Success; @@ -594,11 +594,10 @@ namespace TUGraz.VectoCore.OutputData.XML return retVal.Cast<object>().ToArray(); } - - private string GetGUID() + + protected string GetGUID() { return Guid.NewGuid().ToString("n").Substring(0, 20); } } - } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index 8c9264c404579050ee16321ea83fdad749140bbb..5cc169a643ce6acb7c6808e221e0d0a942e76e74 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -46,6 +46,8 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; namespace TUGraz.VectoCore.OutputData.XML { @@ -53,7 +55,7 @@ namespace TUGraz.VectoCore.OutputData.XML { protected IXMLManufacturerReport ManufacturerRpt; - protected XMLCustomerReport CustomerRpt; + protected IXMLCustomerReport CustomerRpt; protected IDictionary<Tuple<MissionType, LoadingType>, double> _weightingFactors; diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs index 918d4055ff4f250e6a92d9c409665bb04dffcd10..22c3b6e80a1e91c72f5e8dff42444b1feedef5d2 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs @@ -7,6 +7,8 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; namespace TUGraz.VectoCore.OutputData.XML { public class XMLDeclarationReportCompletedVehicle : XMLDeclarationReport diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs index b26cbb222e3baf40aac3ad94d5c32aad7dd04f69..b203ee8c5b9066368ad1ff5429bd4a31eb589ca9 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs @@ -5,12 +5,13 @@ using System.Text; using System.Threading.Tasks; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; namespace TUGraz.VectoCore.OutputData.XML { public class XMLDeclarationReportMultistageBusVehicle : XMLDeclarationReport { - private readonly XMLMultistageBusReport _multistageBusReport; + private readonly IXMLMultistageReport _multistageBusReport; public XMLDeclarationReportMultistageBusVehicle(IReportWriter writer) : base(writer) diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs index 55b66e65deed1369944482d30ae80a0b61a208f7..276ef4230de386f53001e20d07498e2b1712604a 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs @@ -3,16 +3,18 @@ using System.Collections.Generic; using System.Xml.Linq; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; namespace TUGraz.VectoCore.OutputData.XML { public class XMLDeclarationReportPrimaryVehicle : XMLDeclarationReport { - private XMLPrimaryVehicleReport _primaryReport; + protected IXMLPrimaryVehicleReport PrimaryReport; public XMLDeclarationReportPrimaryVehicle(IReportWriter writer, bool writePIF = false) : base(writer) { - _primaryReport = new XMLPrimaryVehicleReport(); } public override XDocument CustomerReport @@ -22,7 +24,7 @@ namespace TUGraz.VectoCore.OutputData.XML { public override XDocument PrimaryVehicleReport { - get { return _primaryReport?.Report; } + get { return PrimaryReport?.Report; } } @@ -30,14 +32,24 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void InstantiateReports(VectoRunData modelData) { - ManufacturerRpt = new XMLManufacturerReportPrimaryBus(); - CustomerRpt = new XMLCustomerReport(); + if (modelData.Exempted) { + ManufacturerRpt = new XMLManufacturerReportExeptedPrimaryBus(); + CustomerRpt = new XMLCustomerReportExemptedPrimaryBus(); + PrimaryReport = new XMLExemptedPrimaryBusVehicleReport(); + + } else { + ManufacturerRpt = new XMLManufacturerReportPrimaryBus(); + CustomerRpt = new XMLCustomerReport(); + PrimaryReport = new XMLPrimaryBusVehicleReport(); + } + + } public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) { base.InitializeReport(modelData, fuelModes); - _primaryReport.Initialize(modelData,fuelModes); + PrimaryReport.Initialize(modelData,fuelModes); } @@ -45,7 +57,7 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void WriteResult(ResultEntry result) { base.WriteResult(result); - _primaryReport.WriteResult(result); + PrimaryReport.WriteResult(result); } protected override void GenerateReports() @@ -53,7 +65,7 @@ namespace TUGraz.VectoCore.OutputData.XML { ManufacturerRpt.GenerateReport(); var fullReportHash = GetSignature(ManufacturerRpt.Report); CustomerRpt.GenerateReport(fullReportHash); - _primaryReport.GenerateReport(fullReportHash); + PrimaryReport.GenerateReport(fullReportHash); } @@ -61,7 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void OutputReports() { Writer.WriteReport(ReportType.DeclarationReportManufacturerXML, ManufacturerRpt.Report); - Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, _primaryReport.Report); + Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, PrimaryReport.Report); } #endregion diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs deleted file mode 100644 index fee1b8a01c79260c085be20696ce3b4a61710c4b..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs +++ /dev/null @@ -1,218 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using System.Xml.Schema; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Utils; -using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; - -namespace TUGraz.VectoCore.OutputData.XML -{ - public class XMLMonitoringReport - { - public const string CURRENT_SCHEMA_VERSION = "0.8"; - - public const string NAMESPACE_BASE_URI = "urn:tugraz:ivt:VectoAPI:MonitoringOutput"; - - private readonly IXMLManufacturerReport _manufacturerReport; - - protected XNamespace tns; - protected XNamespace di; - private XElement _additionalFields; - - - public XMLMonitoringReport(IXMLManufacturerReport manufacturerReport) - { - di = "http://www.w3.org/2000/09/xmldsig#"; - tns = NAMESPACE_BASE_URI + ":v" + CURRENT_SCHEMA_VERSION; - _manufacturerReport = manufacturerReport; - } - - public XDocument Report - { - get { - var mrf = _manufacturerReport.Report; - if (mrf == null) { - return null; - } - - var errors = new List<string>(); - var mrfErrors = false; - mrf.Validate(XMLValidator.GetXMLSchema(XmlDocumentType.ManufacturerReport), (o, e) => { - mrfErrors = true; - errors.Add(e.Message); - }, true); - if (mrfErrors) { - LogManager.GetLogger(typeof(XMLMonitoringReport).FullName).Warn("XML Validation of manufacturer record failed! errors: {0}", string.Join(System.Environment.NewLine, errors)); - } - - var mrfType = mrf.Root?.GetSchemaInfo()?.SchemaType?.QualifiedName ?? new XmlQualifiedName("urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:AbstractVectoOutputManufacturerType"); - - var retVal = GenerateReport(); - var prefix = "mrf" + mrfType.Namespace.Split(':').Last(); - - var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - - retVal.Root?.Add( - new XAttribute(XNamespace.Xmlns + prefix, mrfType.Namespace), - new XElement( - tns + "ManufacturerRecord", - new XAttribute(xsi + "type", string.Format("{0}:{1}", prefix, mrfType.Name)), - new XAttribute("xmlns", mrfType.Namespace), - new XAttribute(XNamespace.Xmlns + "m", tns), - GetManufacturerData(mrf)), - _additionalFields - ); - return retVal; - } - } - - private XmlQualifiedName GetXMLType(XElement mrfRoot) - { - var si = mrfRoot.GetSchemaInfo(); - - return si?.SchemaType?.BaseXmlSchemaType.QualifiedName; - } - - - private object[] GetManufacturerData(XDocument mrf) - { - return mrf.Root?.XPathSelectElements("./*").ToArray<object>(); - } - - private XDocument GenerateReport() - { - var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - var retVal = new XDocument(); - - //retVal.Add( - // new XProcessingInstruction( - // "xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); - retVal.Add( - new XElement( - tns + "VectoMonitoring", - new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), - new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), - new XAttribute(XNamespace.Xmlns + "di", di), - new XAttribute( - xsi + "schemaLocation", - string.Format( - "{0} {1}VectoMonitoring.xsd", NAMESPACE_BASE_URI, AbstractXMLWriter.SchemaLocationBaseUrl)) - ) - ); - return retVal; - } - - public void Initialize(VectoRunData modelData) - { - var numAxles = modelData.VehicleData.AxleData?.Count(x => x.AxleType != AxleType.Trailer) ?? 0; - var axleData = new object[numAxles]; - for (var i = 0; i < axleData.Length; i++) { - axleData[i] = new XElement(tns + "Axle", - new XAttribute("axleNumber", i+1), - new XElement(tns + "Tyre", GetStandardFields(string.Format("TYRE_{0}", i+1)) - )); - } - - var components = new object[0]; - if (!modelData.Exempted) { - components = new object[] { - new XElement( - tns + "Engine", - new XElement( - tns + "WHTC", - new XElement(tns + "CO2", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)), - new XElement(tns + "FuelConsumption", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)) - ), - new XElement( - tns + "WHSC", - new XElement(tns + "CO2", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)), - new XElement(tns + "FuelConsumption", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)) - ) - ), - new XElement(tns + "Gearbox", GetStandardFields("GEARBOX")), - new XElement(tns + "Axlegear", GetStandardFields("AXLEGEAR")), - new XElement(tns + "AxleWheels", axleData), - }; - } - _additionalFields = new XElement( - tns + "AdditionalData", - new XElement(tns + "Vehicle", - new XElement(tns + "Make", "##VEHICLE_MAKE##")), - components, - new XElement(tns + "AdvancedReducingTechnologies", new XComment(GetReducingTechnologiesExample())), - new XElement(tns + "VectoLicenseNbr", "##VECTO_LICENSE_NUMBER##") - ); - } - - private object[] GetStandardFields(string prefix) - { - return new[] { - new XElement(tns + "Manufacturer", string.Format("##{0}_MANUFACTURER##", prefix)), - new XElement(tns + "ManufacturerAddress", string.Format("##{0}_MANUFACTURERADDRESS##", prefix)), - new XElement(tns + "Make", string.Format("##{0}_MAKE##", prefix)) - }; - } - - private string GetReducingTechnologiesExample() - { - var categories = new[] { - "advanced aerodynamic measures", - "advanced rolling resistance measures", - "advanced drivetrain technologies", - "advanced engine technologies", - "advanced auxiliary technologies", - "additional ADAS technologies", - "advanced powertrain integration and hybridisation", - "other" - }; - var retVal = new object[categories.Length]; - //var tmp = new XElement(tns + "foo"); - for (var i = 0; i < retVal.Length; i++) { - retVal[i] = new XElement("Entry", - new XAttribute("category", categories[i]), - "##TECHNOLOGY_BRAND_NAME##" - ); - } - - return Environment.NewLine + string.Join(Environment.NewLine, retVal.Select(x => x.ToString())) + Environment.NewLine; - } - } -} diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd index d326dd477692891a60ebeaa3bba600af1ab05c09..6bb0fa8e1e20a64fc317c3642108a725dfca7c93 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd @@ -640,4 +640,73 @@ <xs:enumeration value="CJ"/> </xs:restriction> </xs:simpleType> + <xs:complexType name="ExemptedPrimaryHeavyBusType"> + <xs:complexContent> + <xs:extension base="v2.0:AbstractVehicleDeclarationType"> + <xs:sequence> + <xs:element name="Manufacturer" type="v1.0:ManufacturerType"/> + <xs:element name="ManufacturerAddress" type="v1.0:ManufacturerAddressType"/> + <xs:element name="Model" type="v1.0:ModelType"> + <xs:annotation> + <xs:documentation>P236</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="v1.0:VINType"> + <xs:annotation> + <xs:documentation>P238</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> + <xs:annotation> + <xs:documentation>P239</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeCategory" type="v2.6:LegislativeClassDeclarationType"> + <xs:annotation> + <xs:documentation>P251 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P036 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Articulated" type="xs:boolean"/> + <xs:element name="TechnicalPermissibleMaximumLadenMass" type="v1.0:VehicleGrossVehicleMassType"> + <xs:annotation> + <xs:documentation>P041 - [kg]</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ZeroEmissionVehicle" type="xs:boolean"/> + <xs:element name="SumNetPower" type="xs:int"> + <xs:annotation> + <xs:documentation>P331 - [W]</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Technology"> + <xs:annotation> + <xs:documentation>P332 - enum</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="HEV Article 9 exempted"/> + <xs:enumeration value="PEV Article 9 exempted"/> + <xs:enumeration value="HV Article 9 exempted"/> + <xs:enumeration value="Fuel cell vehicle"/> + <xs:enumeration value="H2 ICE"/> + <xs:enumeration value="Dual fuel vehicle Article 9 exempted"/> + <xs:enumeration value="In-motion charging Article 9 exempted"/> + <xs:enumeration value="Other technology Article 9 exempted"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> </xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd index c04dc2a75dbde19273614fbe58362afd065ba69f..43f695abf03d9dea35bb2ed2c9c895186263f487 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd @@ -1,8 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> <xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:ns1="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8"> - <xs:complexType name="AbstractVTPReportDataType" abstract="true"/> <xs:complexType name="AbstractPrimaryVehicleDataPIFType" abstract="true"/> - <xs:complexType name="AbstractVectoOutputManufacturerDataType" abstract="true"/> <xs:complexType name="AbstractVectoOutputCustomerDataType" abstract="true"/> + <xs:complexType name="AbstractVectoOutputManufacturerDataType" abstract="true"/> + <xs:complexType name="AbstractVTPReportDataType" abstract="true"/> + <xs:simpleType name="DistanceUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MassUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kg"/> + <xs:enumeration value="t"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PercentType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="%"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PowerUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="kW"/> + <xs:enumeration value="W"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="SpeedUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km/h"/> + </xs:restriction> + </xs:simpleType> </xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd index e1bfb206fc04705a054f38d017b2744360ed5a9c..c40ec091c6ba6181f0b65687458adf411c5e3fa3 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> <!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)--> <xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8"> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> @@ -1126,6 +1126,9 @@ </xs:sequence> </xs:complexType> <xs:complexType name="VehiclePrimaryBusType"> + <xs:annotation> + <xs:documentation>No longer neede?</xs:documentation> + </xs:annotation> <xs:complexContent> <xs:extension base="AbstractVehicleType"> <xs:sequence> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd new file mode 100644 index 0000000000000000000000000000000000000000..522aca77427222263adc183917fc0eb7b5fa128b --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)--> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" schemaLocation="VectoDeclarationDefinitions.2.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" schemaLocation="VectoDeclarationDefinitions.2.1.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" schemaLocation="VectoOutputManufacturer.0.8.xsd"/> + <xs:complexType name="VehicleExemptedPrimaryBusType"> + <xs:complexContent> + <xs:extension base="v0.8:AbstractVehicleType"> + <xs:sequence> + <xs:element name="Manufacturer" type="vdecdef:ManufacturerType"> + <xs:annotation> + <xs:documentation>P235 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType"> + <xs:annotation> + <xs:documentation>P252 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P236 / I.1.1.2</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="vdecdef:VINType"> + <xs:annotation> + <xs:documentation>P238 / I.1.1.3 / #1</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeCategory"> + <xs:annotation> + <xs:documentation>P251 / I.1.1.4 / #10</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P036 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Articulated" type="xs:boolean"/> + <xs:element name="TechnicalPermissibleMaximumLadenMass"> + <xs:annotation> + <xs:documentation>P041 / I.1.1.6 / #12</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="ZeroEmissionVehicle" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P269 / I.1.1.10</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SumNetPower"> + <xs:annotation> + <xs:documentation>P277</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Technology"> + <xs:annotation> + <xs:documentation>P332 - enum</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="HEV Article 9 exempted"/> + <xs:enumeration value="PEV Article 9 exempted"/> + <xs:enumeration value="HV Article 9 exempted"/> + <xs:enumeration value="Fuel cell vehicle"/> + <xs:enumeration value="H2 ICE"/> + <xs:enumeration value="Dual fuel vehicle Article 9 exempted"/> + <xs:enumeration value="In-motion charging Article 9 exempted"/> + <xs:enumeration value="Other technology Article 9 exempted"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="InputDataSignature" type="vdecdef:SignatureType"> + <xs:annotation> + <xs:documentation>I.3.1.3</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd index 1c14db9cfee97f8591d562778b16f074e6af2593..946f5f9d82887fc1f54f77d1239061f21b1cb9ff 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:mrf0.5="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:mrf0.6="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" xmlns:mrf0.7="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" xmlns:mrf0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:mrf0.5="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:mrf0.6="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" xmlns:mrf0.7="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" xmlns:mrf0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:mrf0.9.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.9.1" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:ns1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> <!-- This is a convienience file that imports the schema for all supported versions of manufacturer records file and all supported declaration definitions @@ -11,6 +11,7 @@ <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" schemaLocation="VectoOutputManufacturer.0.6.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" schemaLocation="VectoOutputManufacturer.0.7.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" schemaLocation="VectoOutputManufacturer.0.8.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" schemaLocation="VectoOutputManufacturer.0.9.1.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> <xs:element name="VectoOutput" type="mrf:VectoOutputManufacturerType"> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd index a85e0519d4d3deebc3ca5035b4cddf972fb61ad2..7aee298418b965f64503b298a1b99cf40a4b1dc4 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Franz Josef Kober (Technische Universität Graz) --> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xmlns:v2.4="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.4" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> @@ -9,47 +9,88 @@ <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" schemaLocation="VectoDeclarationDefinitions.2.3_DEV.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" schemaLocation="VectoDeclarationDefinitions.2.8_Stage.xsd"/> - <xs:complexType name="AbstractAxleWheelsComponentPIFType" abstract="true"/> - <xs:complexType name="AbstractAxleWheelsDataPIFType" abstract="true"/> - <xs:complexType name="AxleWheelsComponentPIFType"> - <xs:complexContent> - <xs:extension base="vif:AbstractAxleWheelsComponentPIFType"> - <xs:sequence> - <xs:element name="Data" type="vif:AbstractAxleWheelsDataPIFType"/> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AxleWheelsDataPIFType"> - <xs:annotation> - <xs:documentation>Axles & Wheels Component</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="vif:AbstractAxleWheelsDataPIFType"> - <xs:sequence> - <xs:element name="Axles"> - <xs:complexType> - <xs:sequence> - <xs:element name="Axle" type="v2.0:AbstractAxleDataDeclarationType" minOccurs="2" maxOccurs="4"/> - </xs:sequence> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> <xs:element name="VectoOutputMultistage" type="vif:VectoOutputMultistageType"> <xs:annotation> <xs:documentation>Comment describing your root element</xs:documentation> </xs:annotation> </xs:element> <xs:complexType name="AbstractAngledriveDataPIFType" abstract="true"/> + <xs:complexType name="AbstractAuxiliaryDataPIFType" abstract="true"/> <xs:complexType name="AbstractAxlegearDataPIFType" abstract="true"/> + <xs:complexType name="AbstractAxleWheelsComponentPIFType" abstract="true"/> + <xs:complexType name="AbstractAxleWheelsDataPIFType" abstract="true"/> <xs:complexType name="AbstractEngineDataPIFType" abstract="true"/> <xs:complexType name="AbstractManufacturingStageDataType" abstract="true"> <xs:attribute name="id" type="xs:NCName" use="required"/> </xs:complexType> - <xs:complexType name="AbstractAuxiliaryDataPIFType" abstract="true"/> + <xs:complexType name="AbstractPrimaryVehicleType" abstract="true"/> + <xs:complexType name="AbstractTorqueConverterDataPIFType" abstract="true"/> + <xs:complexType name="AbstractTransmissionDataPIFType" abstract="true"/> + <xs:complexType name="AbstractTransmissionGearsPIFType" abstract="true"/> + <xs:complexType name="AbstractVehicleComponentsPIFType" abstract="true"/> + <xs:complexType name="AngledriveDataPIFType"> + <xs:complexContent> + <xs:extension base="vif:AbstractAngledriveDataPIFType"> + <xs:sequence> + <xs:element name="Manufacturer" type="v1.0:ManufacturerType"> + <xs:annotation> + <xs:documentation>P220</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Model" type="v1.0:ModelType"> + <xs:annotation> + <xs:documentation>P221</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="v1.0:AngledriveCertificationOptionType"> + <xs:annotation> + <xs:documentation>P258 - [-]</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="v1.0:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P265</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> + <xs:annotation> + <xs:documentation>P223</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AppVersion" type="v1.0:AppVersionType"> + <xs:annotation> + <xs:documentation>P224</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="AngledrivePIFType"> + <xs:sequence> + <xs:element name="Data" type="vif:AbstractAngledriveDataPIFType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ApplicationInformationPrimaryVehicleType"> + <xs:sequence> + <xs:element name="SimulationToolVersion" type="xs:string"> + <xs:annotation> + <xs:documentation>II.2.5</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> + <xs:annotation> + <xs:documentation>II.2.5</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AuxiliaryComponentPIFType"> + <xs:sequence> + <xs:element name="Data" type="vif:AbstractAuxiliaryDataPIFType"/> + </xs:sequence> + </xs:complexType> <xs:complexType name="AuxiliaryDataPIFType"> <xs:complexContent> <xs:extension base="vif:AbstractAuxiliaryDataPIFType"> @@ -254,72 +295,9 @@ </xs:extension> </xs:complexContent> </xs:complexType> - <xs:complexType name="AbstractPrimaryVehicleType" abstract="true"/> - <xs:complexType name="AbstractTorqueConverterDataPIFType" abstract="true"/> - <xs:complexType name="AbstractTransmissionDataPIFType" abstract="true"/> - <xs:complexType name="AbstractTransmissionGearsPIFType" abstract="true"/> - <xs:complexType name="AbstractVehicleComponentsPIFType" abstract="true"/> - <xs:complexType name="AngledriveDataPIFType"> - <xs:complexContent> - <xs:extension base="vif:AbstractAngledriveDataPIFType"> - <xs:sequence> - <xs:element name="Manufacturer" type="v1.0:ManufacturerType"> - <xs:annotation> - <xs:documentation>P220</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Model" type="v1.0:ModelType"> - <xs:annotation> - <xs:documentation>P221</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="CertificationMethod" type="v1.0:AngledriveCertificationOptionType"> - <xs:annotation> - <xs:documentation>P258 - [-]</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="CertificationNumber" type="v1.0:CertificationNumberType" minOccurs="0"> - <xs:annotation> - <xs:documentation>P265</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> - <xs:annotation> - <xs:documentation>P223</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AppVersion" type="v1.0:AppVersionType"> - <xs:annotation> - <xs:documentation>P224</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ratio"/> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AngledrivePIFType"> - <xs:sequence> - <xs:element name="Data" type="vif:AbstractAngledriveDataPIFType"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ApplicationInformationPrimaryVehicleType"> - <xs:sequence> - <xs:element name="SimulationToolVersion" type="xs:string"> - <xs:annotation> - <xs:documentation>II.2.5</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> - <xs:annotation> - <xs:documentation>II.2.5</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AuxiliaryComponentPIFType"> + <xs:complexType name="AxlegearComponentPIFType"> <xs:sequence> - <xs:element name="Data" type="vif:AbstractAuxiliaryDataPIFType"/> + <xs:element name="Data" type="vif:AbstractAxlegearDataPIFType"/> </xs:sequence> </xs:complexType> <xs:complexType name="AxlegearDataPIFType"> @@ -362,10 +340,32 @@ </xs:extension> </xs:complexContent> </xs:complexType> - <xs:complexType name="AxlegearComponentPIFType"> - <xs:sequence> - <xs:element name="Data" type="vif:AbstractAxlegearDataPIFType"/> - </xs:sequence> + <xs:complexType name="AxleWheelsComponentPIFType"> + <xs:complexContent> + <xs:extension base="vif:AbstractAxleWheelsComponentPIFType"> + <xs:sequence> + <xs:element name="Data" type="vif:AbstractAxleWheelsDataPIFType"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="AxleWheelsDataPIFType"> + <xs:annotation> + <xs:documentation>Axles & Wheels Component</xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="vif:AbstractAxleWheelsDataPIFType"> + <xs:sequence> + <xs:element name="Axles"> + <xs:complexType> + <xs:sequence> + <xs:element name="Axle" type="v2.0:AbstractAxleDataDeclarationType" minOccurs="2" maxOccurs="4"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> </xs:complexType> <xs:complexType name="BusManufacturingStageDataType"> <xs:complexContent> @@ -551,7 +551,12 @@ <xs:complexType name="ResultsPrimaryVehicleType"> <xs:sequence> <xs:element name="Status"/> - <xs:element name="Result" type="vif:ResultPrimaryVehicleType" maxOccurs="unbounded"/> + <xs:choice> + <xs:element name="Result" type="vif:ResultPrimaryVehicleType" maxOccurs="unbounded"/> + <xs:element name="ExemptedVehicle"> + <xs:complexType/> + </xs:element> + </xs:choice> </xs:sequence> </xs:complexType> <xs:complexType name="SimulationParametersType"> @@ -717,6 +722,12 @@ </xs:extension> </xs:complexContent> </xs:complexType> + <xs:complexType name="VectoOutputMultistageType"> + <xs:sequence> + <xs:element name="PrimaryVehicle" type="vif:PrimaryVehicleType"/> + <xs:element name="ManufacturingStage" type="vif:ManufacturingStageType" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> <xs:complexType name="VehicleComponentsPIFType"> <xs:complexContent> <xs:extension base="vif:AbstractVehicleComponentsPIFType"> @@ -732,6 +743,101 @@ </xs:extension> </xs:complexContent> </xs:complexType> + <xs:complexType name="VehicleExemptedPrimaryBusType"> + <xs:complexContent> + <xs:extension base="vif:AbstractPrimaryVehicleType"> + <xs:sequence> + <xs:element name="Manufacturer" type="v1.0:ManufacturerType"> + <xs:annotation> + <xs:documentation>P235 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="v1.0:ManufacturerAddressType"> + <xs:annotation> + <xs:documentation>P252 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Model" type="v1.0:ModelType"> + <xs:annotation> + <xs:documentation>P236 / I.1.1.2</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="v1.0:VINType"> + <xs:annotation> + <xs:documentation>P238 / I.1.1.3 / #1</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeCategory"> + <xs:annotation> + <xs:documentation>P251 / I.1.1.4 / #10</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P036 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Articulated" type="xs:boolean"/> + <xs:element name="TechnicalPermissibleMaximumLadenMass"> + <xs:annotation> + <xs:documentation>P041 / I.1.1.6 / #12</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="ZeroEmissionVehicle" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P269 / I.1.1.10</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SumNetPower"> + <xs:annotation> + <xs:documentation>P277</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Technology"> + <xs:annotation> + <xs:documentation>P332 - enum</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="HEV Article 9 exempted"/> + <xs:enumeration value="PEV Article 9 exempted"/> + <xs:enumeration value="HV Article 9 exempted"/> + <xs:enumeration value="Fuel cell vehicle"/> + <xs:enumeration value="H2 ICE"/> + <xs:enumeration value="Dual fuel vehicle Article 9 exempted"/> + <xs:enumeration value="In-motion charging Article 9 exempted"/> + <xs:enumeration value="Other technology Article 9 exempted"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> <xs:complexType name="VehiclePIFType"> <xs:complexContent> <xs:extension base="vif:AbstractPrimaryVehicleType"> @@ -805,10 +911,4 @@ <xs:enumeration value="Coach"/> </xs:restriction> </xs:simpleType> - <xs:complexType name="VectoOutputMultistageType"> - <xs:sequence> - <xs:element name="PrimaryVehicle" type="vif:PrimaryVehicleType"/> - <xs:element name="ManufacturingStage" type="vif:ManufacturingStageType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> </xs:schema> diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs index 40bb4f8bfba89009be7ebc34c710d9a85b937017..b7fa13ed4ea1c2734174056deae5059cf148ee01 100644 --- a/VectoCore/VectoCore/Utils/XMLValidator.cs +++ b/VectoCore/VectoCore/Utils/XMLValidator.cs @@ -30,6 +30,7 @@ */ using System; +using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.Schema; @@ -44,6 +45,7 @@ namespace TUGraz.VectoCore.Utils private readonly Action<bool> _resultAction; private bool _valid; private XmlDocument _doc; + private List<string> _validationErrors = new List<string>(); private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction) { @@ -70,6 +72,7 @@ namespace TUGraz.VectoCore.Utils public bool ValidateXML(XmlDocumentType docType) { _valid = true; + _validationErrors.Clear(); if (_doc.DocumentElement == null) { throw new Exception("empty XML document"); } @@ -91,11 +94,14 @@ namespace TUGraz.VectoCore.Utils { _resultAction(false); _valid = false; - ValidationError = args?.Message ?? "no schema found"; + _validationErrors.Add(args?.Message ?? "no schema found"); _validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args }); } - public string ValidationError { get; private set; } + public string ValidationError + { + get { return string.Join(Environment.NewLine, _validationErrors); } + } public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt) { diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 63c6b8e93a9af4c6cf0071b1d677cbf6506d34cd..1e978ac418ae35528bd0b40c7dcd5e86096641e9 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -445,8 +445,12 @@ <Compile Include="OutputData\FileIO\FileOutputVIFWriter.cs" /> <Compile Include="OutputData\FileIO\JSONFileWriter.cs" /> <Compile Include="OutputData\ModalDataPostprocessingCorrection.cs" /> - <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\IXMLCustomerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\AbstractXMLManufacturerReport.cs" /> <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\IXMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\IXMLMultistageReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\IXMLPrimaryVehicleReport.cs" /> <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" /> <Compile Include="OutputData\XML\Engineering\Factory\IEngineeringWriterInjectFactory.cs" /> <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringComponentWriter.cs" /> @@ -481,15 +485,17 @@ <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriter.cs" /> <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriterInjectModule.cs" /> <Compile Include="OutputData\XML\Engineering\XMLWriterMapping.cs" /> - <Compile Include="OutputData\XML\XMLCustomerReportCompletedBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\XMLCustomerReportCompletedBus.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportCompletedVehicle.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportMultistageBusVehicle.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportPrimaryVehicle.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReportCompletedBus.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReportExemptedTruck.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReportPrimaryBus.cs" /> - <Compile Include="OutputData\XML\XMLMultistageBusReport.cs" /> - <Compile Include="OutputData\XML\XMLPrimaryVehicleReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportCompletedBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportExemptedTruck.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportExeptedPrimaryBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportPrimaryBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLExemptedPrimaryBusVehicleReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLMultistageBusReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLPrimaryBusVehicleReport.cs" /> <Compile Include="Utils\Ninject\UseFirstArgumentAsInstanceProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationReaderInjectModule.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationVehicleDataProvider.cs" /> @@ -578,17 +584,16 @@ <Compile Include="Models\SimulationComponent\Impl\VTPCycle.cs" /> <Compile Include="Models\Simulation\Data\ShiftStrategyParameters.cs" /> <Compile Include="Models\Simulation\Impl\ExemptedRun.cs" /> - <Compile Include="OutputData\XML\XMLMonitoringReport.cs" /> - <Compile Include="OutputData\XML\XMLVTPReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VTPReport\XMLVTPReport.cs" /> <Compile Include="OutputData\VTPReport.cs" /> <Compile Include="OutputData\ModFilter\ActualModalDataFilter.cs" /> <Compile Include="OutputData\ModFilter\ModalData1HzFilter.cs" /> <Compile Include="OutputData\XML\AbstractXMLWriter.cs" /> <Compile Include="OutputData\XML\AttributeMappings.cs" /> - <Compile Include="OutputData\XML\XMLCustomerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\XMLCustomerReport.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReport.cs" /> <Compile Include="OutputData\XML\XMLDeclarationWriter.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportTruck.cs" /> <Compile Include="Utils\Interpolate2D.cs" /> <Compile Include="Utils\DataIntegrityHelper.cs" /> <Compile Include="Utils\MeanShiftClustering.cs" /> @@ -968,6 +973,9 @@ <EmbeddedResource Include="Resources\XSD\VectoOutputMultistage.0.1.xsd"> <SubType>Designer</SubType> </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.0.9.1.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> <None Include="Utils\VectoVersionCore.tt"> <Generator>TextTemplatingFileGenerator</Generator> <LastGenOutput>VectoVersionCore.cs</LastGenOutput> diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs index 4be58cff7d127124e6c66da1ed51a13de0c68ccc..62a0412fc13bcfe52a349c88f59c3797b3ca5c45 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs @@ -58,6 +58,8 @@ namespace TUGraz.VectoCore.Tests.Integration { const string ExemptedVehicle = @"Testdata\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml"; + const string ExemptedPrimaryBus = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml"; + protected IXMLInputDataReader xmlInputReader; private IKernel _kernel; @@ -287,5 +289,57 @@ namespace TUGraz.VectoCore.Tests.Integration manager); hybridNode.SetValue(hybrid.ToString().ToLowerInvariant()); } + + [TestCase(ExemptedPrimaryBus, 1)] + public void TestSimulationExemptedPrimaryBusVehicle(string filename, int numRuns) + { + var writer = new FileOutputWriter(filename); + + var primaryReportFile = writer.XMLPrimaryVehicleReportName; + var manufactuerFile = writer.XMLFullReportName; + var monitoringFile = writer.XMLMonitoringReportName; + if (File.Exists(primaryReportFile)) { + File.Delete(primaryReportFile); + } + if (File.Exists(manufactuerFile)) { + File.Delete(manufactuerFile); + } + if (File.Exists(monitoringFile)) { + File.Delete(monitoringFile); + } + + var inputData = xmlInputReader.CreateDeclaration(filename); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) { + WriteModalResults = true, + ActualModalData = true + }; + var jobContainer = new JobContainer(new MockSumWriter()); + + var runs = factory.SimulationRuns().ToList(); + Assert.AreEqual(numRuns, runs.Count); + foreach (var run in runs) { + jobContainer.AddRun(run); + } + //jobContainer.AddRuns(factory); + + jobContainer.Execute(); + jobContainer.WaitFinished(); + var progress = jobContainer.GetProgress(); + Assert.IsTrue(progress.All(r => r.Value.Success), string.Concat<Exception>(progress.Select(r => r.Value.Error))); + + Assert.IsTrue(File.Exists(manufactuerFile)); + Assert.IsTrue(File.Exists(primaryReportFile)); + + var validator = new XMLValidator(XmlReader.Create(manufactuerFile)); + Assert.IsTrue(validator.ValidateXML(XmlDocumentType.ManufacturerReport), validator.ValidationError); + + var val2 = new XMLValidator(XmlReader.Create(primaryReportFile)); + Assert.IsTrue(val2.ValidateXML(XmlDocumentType.MultistageOutputData), val2.ValidationError); + + //var val3 = new XMLValidator(XmlReader.Create(monitoringFile)); + //Assert.IsTrue(val3.ValidateXML(XmlDocumentType.MonitoringReport), val3.ValidationError); + + } } } diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs index ed000eb7d38711d7a9c60e0cdecf0debe6f78020..237476aff8d48a99fa0cf09f0c26f0988f27d203 100644 --- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs @@ -451,7 +451,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage Assert.AreEqual("Generic Model", vehicleData.Model); Assert.AreEqual("VEH-1234567890", vehicleData.VIN); Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date); - Assert.AreEqual("M3", vehicleData.LegislativeCategory); + Assert.AreEqual(LegislativeClass.M3, vehicleData.LegislativeClass); Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat()); Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleData.AxleConfiguration); Assert.AreEqual(false, vehicleData.Articulated); diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml new file mode 100644 index 0000000000000000000000000000000000000000..aef216779b96bd7d1342f7324dd2323928faf9fe --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputDeclaration schemaVersion="2.0" +xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" +xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" +xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" +xmlns:di="http://www.w3.org/2000/09/xmldsig#" +xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob v:\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> + <v2.0:Vehicle id="VEH-1234567890" xsi:type="v2.6:ExemptedPrimaryHeavyBusType"> + <Manufacturer>Some Manufacturer</Manufacturer> + <ManufacturerAddress>Infinite Loop 1</ManufacturerAddress> + <Model>Sample Bus Model</Model> + <VIN>VEH-1234567890</VIN> + <Date>2020-01-09T11:00:00Z</Date> + <LegislativeCategory>N2</LegislativeCategory> + <ChassisConfiguration>Bus</ChassisConfiguration> + <AxleConfiguration>6x2</AxleConfiguration> + <Articulated>false</Articulated> + <TechnicalPermissibleMaximumLadenMass>15400</TechnicalPermissibleMaximumLadenMass> + <ZeroEmissionVehicle>true</ZeroEmissionVehicle> + <SumNetPower>350000</SumNetPower> + <Technology>Fuel cell vehicle</Technology> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> diff --git a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs index aa367932f79de368166442fa0ad64adad3873a48..aa2acbcdee3d47cc2740d73e1ab42fc81e783f40 100644 --- a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs +++ b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs @@ -29,7 +29,6 @@ namespace TUGraz.VectoCore.Tests.Utils { public string Identifier { get; } public bool ExemptedVehicle { get; } public string VIN { get; } - public string LegislativeCategory { get; } public LegislativeClass? LegislativeClass { get; } public VehicleCategory VehicleCategory { get; } public AxleConfiguration AxleConfiguration { get; } @@ -48,6 +47,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public bool DualFuelVehicle { get; } public Watt MaxNetPower1 { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } public RegistrationClass? RegisteredClass { get; set; } public int? NumberPassengerSeatsUpperDeck { get; set; } public int? NumberPassengerSeatsLowerDeck { get; set; } @@ -121,6 +121,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public ConsumerTechnology? DoorDriveTechnology { get; } public VehicleDeclarationType VehicleDeclarationType { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } public RegistrationClass? RegisteredClass { get; set; } public int? NumberPassengerSeatsUpperDeck { get; set; } public int? NumberPassengerSeatsLowerDeck { get; set; } @@ -141,7 +142,6 @@ namespace TUGraz.VectoCore.Tests.Utils { public string Identifier { get; } public bool ExemptedVehicle { get; } public string VIN { get; } - public string LegislativeCategory { get; } public LegislativeClass? LegislativeClass { get; } public VehicleCategory VehicleCategory { get; } public AxleConfiguration AxleConfiguration { get; } diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 2572f74355af024a922237b63b58f9c65bc2c0f1..41e878b0fee06f2e2809b2bac3467bdd2a4315ee 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -5837,6 +5837,9 @@ <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.3\vehicle_sampleDualModeDualFuel.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs index 6a337e3dace079efaf26bb6f597f22ec8429f4db..3f32009dea4d138c7d586b2e699900819b738c70 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs @@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual("Generic Model", vehicleData.Model); Assert.AreEqual("VEH-1234567890_nonSmart-ESS", vehicleData.VIN); Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date); - Assert.AreEqual("M3", vehicleData.LegislativeCategory); + Assert.AreEqual(LegislativeClass.M3, vehicleData.LegislativeClass); Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat()); Assert.AreEqual(AxleConfiguration.AxleConfig_8x2, vehicleData.AxleConfiguration); Assert.AreEqual(true, vehicleData.Articulated); diff --git a/VectoCore/VectoXML.spp b/VectoCore/VectoXML.spp index a18bdad0c3e962a29e4afe556f0a5240f7d01bf0..3c9d46d22cdd49c04e596088943c3471af999618 100644 --- a/VectoCore/VectoXML.spp +++ b/VectoCore/VectoXML.spp @@ -15,6 +15,7 @@ <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.3\vehicle_sampleDualModeDualFuel.xml" HomeFolder="Yes"/> </Folder> <Folder FolderName="Schema 2.6DEV Buses ML"> + <File FilePath="E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCoreTest\bin\Debug\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml" HomeFolder="Yes"/> <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml" HomeFolder="Yes"/> <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-completed_heavyBus-sample.xml" HomeFolder="Yes"/> <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-medium_lorryFWD-sample.xml" HomeFolder="Yes"/> @@ -144,6 +145,7 @@ <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.8.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.9.1.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputMultistage.0.1.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputPrimaryBus.xsd" HomeFolder="Yes"/>