diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs index d93ab63a6983274231cb63a64232ef0bff1e4817..aaa7b17d7a58bca1d8ba3847d6438ed9cda2baf5 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IPneumaticUserInputsConfig.cs @@ -49,4 +49,26 @@ namespace TUGraz.VectoCommon.BusAuxiliaries } } } + + public static class ConsumerTechnologyHelper + { + public static ConsumerTechnology Parse(string technology) + { + switch (technology.ToLowerInvariant()) + { + case "mechanically": + case "mechanic": + return ConsumerTechnology.Mechanically; + case "electrically": + case "electric": + case "electronically": + return ConsumerTechnology.Electrically; + case "pneumatically": + case "pneumatic": + return ConsumerTechnology.Pneumatically; + default: + return ConsumerTechnology.Unknown; + } + } + } } diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index f5612da621ab43a183afb31b961694fec490d16e..eef6124600fbc050a797de0db80b8994b6c5425f 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -41,6 +41,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Declaration; + namespace TUGraz.VectoCommon.InputData { public interface IDeclarationJobInputData @@ -743,6 +744,7 @@ namespace TUGraz.VectoCommon.InputData public interface IPneumaticSupplyDeclarationData { + string Clutch { get; } double Ratio { get; } string CompressorSize { get; } @@ -757,7 +759,6 @@ namespace TUGraz.VectoCommon.InputData ConsumerTechnology AirsuspensionControl { get; } ConsumerTechnology AdBlueDosing { get; } ConsumerTechnology DoorDriveTechnology { get; } - } public interface IHVACBusAuxiliariesDeclarationData @@ -780,6 +781,45 @@ namespace TUGraz.VectoCommon.InputData bool EngineWasteGasHeatExchanger { get; } bool SeparateAirDistributionDucts { get; } + } + + public interface ICompressorType + { + string DriverAC { get; } + string PassengerAC { get; } + } + + public interface IResultsInputData + { + string Status { get; } + + IList<IResult> Results { get; } + } + + public interface IResult + { + string ResultStatus { get; } + + string VehicleGroup { get; } + + string Mission { get; } + + ISimulationParameter SimulationParameter { get; } + } + + public interface ISimulationParameter + { + Kilogram TotalVehicleMass { get; } + Kilogram Payload { get; } + int PassengerCount { get; } + string FuelMode { get; } + } + + + public interface IApplicationInformation + { + string SimulationToolVersion { get; } + DateTime Date { get; } } } diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index a8b41009b7faf84236d4bf97988359cec2a09635..464ce79f20d9cb30e0849263395e94cb1ae1c574 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -54,4 +54,16 @@ namespace TUGraz.VectoCommon.InputData } + public interface IPrimaryVehicleInputDataProvider : IInputDataProvider + { + IVehicleDeclarationInputData Vehicle { get; } + + DigestData ResultDataHash { get; } + + IResultsInputData ResultsInputData { get; } + + IApplicationInformation ApplicationInformation { get; } + + DigestData ManufacturerHash { get; } + } } diff --git a/VectoCommon/VectoCommon/Models/VehicleCategory.cs b/VectoCommon/VectoCommon/Models/VehicleCategory.cs index f18775a3cc662f35fb2d57f35dcdb88a4f775ded..e279361998f6b9158e010837c3da81caf70fbb4d 100644 --- a/VectoCommon/VectoCommon/Models/VehicleCategory.cs +++ b/VectoCommon/VectoCommon/Models/VehicleCategory.cs @@ -126,5 +126,19 @@ namespace TUGraz.VectoCommon.Models throw new ArgumentOutOfRangeException("VehicleCategory", category, null); } } + + public static VehicleCategory Parse(string vehicleCategory) + { + switch (vehicleCategory) { + case "Bus": + return VehicleCategory.HeavyBusPrimaryVehicle; + case "Tractor": + return VehicleCategory.Tractor; + case "Rigid Lorry": + return VehicleCategory.RigidTruck; + default: + return VehicleCategory.Unknown; + } + } } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index 1ce46301d1083806294b39577648a8fa06bd35af..dd41bb937f3be38a869bc722fe504e4bbfb78975 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -402,156 +402,319 @@ namespace TUGraz.VectoCommon.Resources { } } + + /// <summary> + /// Looks up a localized string similar to AdBlueDosing. + /// </summary> + public static string Bus_AdBlueDosing { + get { + return ResourceManager.GetString("Bus_AdBlueDosing", resourceCulture); + } + } + /// <summary> - /// Looks up a localized string similar to ElectricSystem. + /// Looks up a localized string similar to AdjustableAuxiliaryHeater. /// </summary> - public static string BusAux_ElectricSystem { + public static string Bus_AdjustableAuxiliaryHeater { get { - return ResourceManager.GetString("BusAux_ElectricSystem", resourceCulture); + return ResourceManager.GetString("Bus_AdjustableAuxiliaryHeater", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to ratio. + /// Looks up a localized string similar to AdjustableCoolantThermostat. /// </summary> - public static string BusAux_ElectricSystem_Alternator_Ratio_Attr { + public static string Bus_AdjustableCoolantThermostat { get { - return ResourceManager.GetString("BusAux_ElectricSystem_Alternator_Ratio_Attr", resourceCulture); + return ResourceManager.GetString("Bus_AdjustableCoolantThermostat", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AirsuspensionControl. + /// </summary> + public static string Bus_AirsuspensionControl { + get { + return ResourceManager.GetString("Bus_AirsuspensionControl", resourceCulture); } } /// <summary> /// Looks up a localized string similar to AlternatorTechnology. /// </summary> - public static string BusAux_ElectricSystem_AlternatorTechnology { + public static string Bus_AlternatorTechnology { get { - return ResourceManager.GetString("BusAux_ElectricSystem_AlternatorTechnology", resourceCulture); + return ResourceManager.GetString("Bus_AlternatorTechnology", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to ResultCards. + /// Looks up a localized string similar to AuxiliaryHeaterPower. /// </summary> - public static string BusAux_ElectricSystem_ResultCards { + public static string Bus_AuxiliaryHeaterPower { get { - return ResourceManager.GetString("BusAux_ElectricSystem_ResultCards", resourceCulture); + return ResourceManager.GetString("Bus_AuxiliaryHeaterPower", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to SmartElectrics. + /// Looks up a localized string similar to Brakelights. /// </summary> - public static string BusAux_ElectricSystem_SmartElectrics { + public static string Bus_Brakelights { get { - return ResourceManager.GetString("BusAux_ElectricSystem_SmartElectrics", resourceCulture); + return ResourceManager.GetString("Bus_Brakelights", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to PneumaticSystem. + /// Looks up a localized string similar to CompressorRatio. /// </summary> - public static string BusAux_PneumaticSystem { + public static string Bus_CompressorRatio { get { - return ResourceManager.GetString("BusAux_PneumaticSystem", resourceCulture); + return ResourceManager.GetString("Bus_CompressorRatio", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to AdBlueDosing. + /// Looks up a localized string similar to CompressorType. /// </summary> - public static string BusAux_PneumaticSystem_AdBlueDosing { + public static string Bus_CompressorType { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_AdBlueDosing", resourceCulture); + return ResourceManager.GetString("Bus_CompressorType", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to AirsuspensionControl. + /// Looks up a localized string similar to Dayrunninglights. /// </summary> - public static string BusAux_PneumaticSystem_AirsuspensionControl { + public static string Bus_Dayrunninglights { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_AirsuspensionControl", resourceCulture); + return ResourceManager.GetString("Bus_Dayrunninglights", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to CompressorRatio. + /// Looks up a localized string similar to DoorDriveTechnology. + /// </summary> + public static string Bus_DoorDriveTechnology { + get { + return ResourceManager.GetString("Bus_DoorDriveTechnology", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DoubleGlasing. + /// </summary> + public static string Bus_DoubleGlasing { + get { + return ResourceManager.GetString("Bus_DoubleGlasing", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DriverAC. + /// </summary> + public static string Bus_DriverAC { + get { + return ResourceManager.GetString("Bus_DriverAC", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EngineWasteGasHeatExchanger. + /// </summary> + public static string Bus_EngineWasteGasHeatExchanger { + get { + return ResourceManager.GetString("Bus_EngineWasteGasHeatExchanger", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EntranceHeight. + /// </summary> + public static string Bus_EntranceHeight { + get { + return ResourceManager.GetString("Bus_EntranceHeight", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Headlights. + /// </summary> + public static string Bus_Headlights { + get { + return ResourceManager.GetString("Bus_Headlights", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to HeatPump. + /// </summary> + public static string Bus_HeatPump { + get { + return ResourceManager.GetString("Bus_HeatPump", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to HeightIntegratedBody. + /// </summary> + public static string Bus_HeighIntegratedBody { + get { + return ResourceManager.GetString("Bus_HeighIntegratedBody", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Interiorlights. /// </summary> - public static string BusAux_PneumaticSystem_CompressorRatio { + public static string Bus_Interiorlights { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_CompressorRatio", resourceCulture); + return ResourceManager.GetString("Bus_Interiorlights", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to LowEntry. + /// </summary> + public static string Bus_LowEntry { + get { + return ResourceManager.GetString("Bus_LowEntry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to LowerDeck. + /// </summary> + public static string Bus_LowerDeck { + get { + return ResourceManager.GetString("Bus_LowerDeck", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PassengerAC. + /// </summary> + public static string Bus_PassengerAC { + get { + return ResourceManager.GetString("Bus_PassengerAC", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PassengerCount. + /// </summary> + public static string Bus_PassengerCount { + get { + return ResourceManager.GetString("Bus_PassengerCount", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Positionlights. + /// </summary> + public static string Bus_Positionlights { + get { + return ResourceManager.GetString("Bus_Positionlights", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ResultCards. + /// </summary> + public static string Bus_ResultCards { + get { + return ResourceManager.GetString("Bus_ResultCards", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SeparateAirDistributionDucts. + /// </summary> + public static string Bus_SeparateAirDistributionDucts { + get { + return ResourceManager.GetString("Bus_SeparateAirDistributionDucts", resourceCulture); } } /// <summary> /// Looks up a localized string similar to SizeOfAirSupply. /// </summary> - public static string BusAux_PneumaticSystem_CompressorSize { + public static string Bus_SizeOfAirSupply { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_CompressorSize", resourceCulture); + return ResourceManager.GetString("Bus_SizeOfAirSupply", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to DoorDriveTechnology. + /// Looks up a localized string similar to SmartElectrics. /// </summary> - public static string BusAux_PneumaticSystem_DoorDriveTechnology { + public static string Bus_Smart_Electrics { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_DoorDriveTechnology", resourceCulture); + return ResourceManager.GetString("Bus_Smart_Electrics", resourceCulture); } } /// <summary> /// Looks up a localized string similar to SmartCompressionSystem. /// </summary> - public static string BusAux_PneumaticSystem_SmartcompressionSystem { + public static string Bus_SmartCompressionSystem { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_SmartcompressionSystem", resourceCulture); + return ResourceManager.GetString("Bus_SmartCompressionSystem", resourceCulture); } } /// <summary> /// Looks up a localized string similar to SmartRegenerationSystem. /// </summary> - public static string BusAux_PneumaticSystem_SmartRegenerationSystem { + public static string Bus_SmartRegenerationSystem { get { - return ResourceManager.GetString("BusAux_PneumaticSystem_SmartRegenerationSystem", resourceCulture); + return ResourceManager.GetString("Bus_SmartRegenerationSystem", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to Entry. + /// Looks up a localized string similar to Status. + /// </summary> + public static string Bus_Status { + get { + return ResourceManager.GetString("Bus_Status", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SystemConfiguration. /// </summary> - public static string BusAux_ResultCard_Entry { + public static string Bus_SystemConfiguration { get { - return ResourceManager.GetString("BusAux_ResultCard_Entry", resourceCulture); + return ResourceManager.GetString("Bus_SystemConfiguration", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to Idle. + /// Looks up a localized string similar to UpperDeck. /// </summary> - public static string BusAux_ResultCard_Idle { + public static string Bus_UpperDeck { get { - return ResourceManager.GetString("BusAux_ResultCard_Idle", resourceCulture); + return ResourceManager.GetString("Bus_UpperDeck", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to Overrun. + /// Looks up a localized string similar to VehicleLength. /// </summary> - public static string BusAux_ResultCard_Overrun { + public static string Bus_VehicleLength { get { - return ResourceManager.GetString("BusAux_ResultCard_Overrun", resourceCulture); + return ResourceManager.GetString("Bus_VehicleLength", resourceCulture); } } /// <summary> - /// Looks up a localized string similar to Traction. + /// Looks up a localized string similar to VehicleWidth. /// </summary> - public static string BusAux_ResultCard_Traction { + public static string Bus_VehicleWidth { get { - return ResourceManager.GetString("BusAux_ResultCard_Traction", resourceCulture); + return ResourceManager.GetString("Bus_VehicleWidth", resourceCulture); } } @@ -744,6 +907,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to Transmission. + /// </summary> + public static string Component_Transmission { + get { + return ResourceManager.GetString("Component_Transmission", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Vehicle. /// </summary> @@ -1770,6 +1942,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to ManufacturerAddressCompletedVehicle. + /// </summary> + public static string ManufacturerAddressCompletedVehicle { + get { + return ResourceManager.GetString("ManufacturerAddressCompletedVehicle", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to ManufacturerAddressPrimaryVehicle. /// </summary> @@ -1779,6 +1960,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to ManufacturerCompletedVehicle. + /// </summary> + public static string ManufacturerCompletedVehicle { + get { + return ResourceManager.GetString("ManufacturerCompletedVehicle", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to ManufacturerPrimaryVehicle. /// </summary> @@ -2417,7 +2607,16 @@ namespace TUGraz.VectoCommon.Resources { return ResourceManager.GetString("ResultCard_Entry_SmartCurrent_Attr", resourceCulture); } } - + + /// <summary> + /// Looks up a localized string similar to status. + /// </summary> + public static string Result_Status { + get { + return ResourceManager.GetString("Result_Status", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to RetarderLossMap. /// </summary> @@ -2454,6 +2653,33 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to ApplicationInformation. + /// </summary> + public static string Tag_ApplicationInformation { + get { + return ResourceManager.GetString("Tag_ApplicationInformation", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ResultDataSignature. + /// </summary> + public static string Tag_ResultDataSignatureNode { + get { + return ResourceManager.GetString("Tag_ResultDataSignatureNode", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Vehicle. + /// </summary> + public static string Tag_Vehicle { + get { + return ResourceManager.GetString("Tag_Vehicle", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to CCUpshiftMinAcceleration. /// </summary> @@ -2949,6 +3175,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to Clutch. + /// </summary> + public static string Vehicle_Clutch { + get { + return ResourceManager.GetString("Vehicle_Clutch", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Components. /// </summary> @@ -3255,6 +3490,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to RegisteredClass. + /// </summary> + public static string Vehicle_RegisteredClass { + get { + return ResourceManager.GetString("Vehicle_RegisteredClass", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to RetarderRatio. /// </summary> @@ -3345,6 +3589,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to VehicleCode. + /// </summary> + public static string Vehicle_VehicleCode { + get { + return ResourceManager.GetString("Vehicle_VehicleCode", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to VIN. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index e846ad7002ef54fdfa9dcb09d407d79c9b1b3118..dc80551895e785b501f4656447f31a6692e8406f 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -207,6 +207,9 @@ <data name="Component_Gearbox" xml:space="preserve"> <value>Gearbox</value> </data> + <data name="Component_Transmission" xml:space="preserve"> + <value>Transmission</value> + </data> <data name="Gearbox_TransmissionType" xml:space="preserve"> <value>TransmissionType</value> </data> @@ -1227,4 +1230,139 @@ <data name="BusAux_PneumaticSystem_SmartRegenerationSystem" xml:space="preserve"> <value>SmartRegenerationSystem</value> </data> + <data name="ManufacturerCompletedVehicle" xml:space="preserve"> + <value>ManufacturerCompletedVehicle</value> + </data> + <data name="ManufacturerAddressCompletedVehicle" xml:space="preserve"> + <value>ManufacturerAddressCompletedVehicle</value> + </data> + <data name="Vehicle_RegisteredClass" xml:space="preserve"> + <value>RegisteredClass</value> + </data> + <data name="Vehicle_VehicleCode" xml:space="preserve"> + <value>VehicleCode</value> + </data> + <data name="Bus_LowEntry" xml:space="preserve"> + <value>LowEntry</value> + </data> + <data name="Bus_HeighIntegratedBody" xml:space="preserve"> + <value>HeightIntegratedBody</value> + </data> + <data name="Bus_VehicleLength" xml:space="preserve"> + <value>VehicleLength</value> + </data> + <data name="Bus_VehicleWidth" xml:space="preserve"> + <value>VehicleWidth</value> + </data> + <data name="Bus_EntranceHeight" xml:space="preserve"> + <value>EntranceHeight</value> + </data> + <data name="Bus_DoorDriveTechnology" xml:space="preserve"> + <value>DoorDriveTechnology</value> + </data> + <data name="Bus_LowerDeck" xml:space="preserve"> + <value>LowerDeck</value> + </data> + <data name="Bus_UpperDeck" xml:space="preserve"> + <value>UpperDeck</value> + </data> + <data name="Bus_Dayrunninglights" xml:space="preserve"> + <value>Dayrunninglights</value> + </data> + <data name="Bus_Headlights" xml:space="preserve"> + <value>Headlights</value> + </data> + <data name="Bus_Positionlights" xml:space="preserve"> + <value>Positionlights</value> + </data> + <data name="Bus_Brakelights" xml:space="preserve"> + <value>Brakelights</value> + </data> + <data name="Bus_Interiorlights" xml:space="preserve"> + <value>Interiorlights</value> + </data> + <data name="Bus_AlternatorTechnology" xml:space="preserve"> + <value>AlternatorTechnology</value> + </data> + <data name="Bus_SystemConfiguration" xml:space="preserve"> + <value>SystemConfiguration</value> + </data> + <data name="Bus_AuxiliaryHeaterPower" xml:space="preserve"> + <value>AuxiliaryHeaterPower</value> + </data> + <data name="Bus_DoubleGlasing" xml:space="preserve"> + <value>DoubleGlasing</value> + </data> + <data name="Bus_HeatPump" xml:space="preserve"> + <value>HeatPump</value> + </data> + <data name="Bus_AdjustableAuxiliaryHeater" xml:space="preserve"> + <value>AdjustableAuxiliaryHeater</value> + </data> + <data name="Bus_SeparateAirDistributionDucts" xml:space="preserve"> + <value>SeparateAirDistributionDucts</value> + </data> + <data name="Bus_CompressorType" xml:space="preserve"> + <value>CompressorType</value> + </data> + <data name="Bus_DriverAC" xml:space="preserve"> + <value>DriverAC</value> + </data> + <data name="Bus_PassengerAC" xml:space="preserve"> + <value>PassengerAC</value> + </data> + <data name="Bus_ResultCards" xml:space="preserve"> + <value>ResultCards</value> + </data> + <data name="Tag_Vehicle" xml:space="preserve"> + <value>Vehicle</value> + </data> + <data name="Bus_AdjustableCoolantThermostat" xml:space="preserve"> + <value>AdjustableCoolantThermostat</value> + </data> + <data name="Bus_EngineWasteGasHeatExchanger" xml:space="preserve"> + <value>EngineWasteGasHeatExchanger</value> + </data> + <data name="Bus_SizeOfAirSupply" xml:space="preserve"> + <value>SizeOfAirSupply</value> + </data> + <data name="Bus_CompressorRatio" xml:space="preserve"> + <value>CompressorRatio</value> + </data> + <data name="Bus_SmartCompressionSystem" xml:space="preserve"> + <value>SmartCompressionSystem</value> + </data> + <data name="Bus_SmartRegenerationSystem" xml:space="preserve"> + <value>SmartRegenerationSystem</value> + </data> + <data name="Bus_AirsuspensionControl" xml:space="preserve"> + <value>AirsuspensionControl</value> + </data> + <data name="Bus_AdBlueDosing" xml:space="preserve"> + <value>AdBlueDosing</value> + </data> + <data name="Bus_DoorDriveTechnology" xml:space="preserve"> + <value>DoorDriveTechnology</value> + </data> + <data name="Vehicle_Clutch" xml:space="preserve"> + <value>Clutch</value> + </data> + <data name="Tag_ApplicationInformation" xml:space="preserve"> + <value>ApplicationInformation</value> + </data> + <data name="Tag_ResultDataSignatureNode" xml:space="preserve"> + <value>ResultDataSignature</value> + </data> + <data name="Bus_Status" xml:space="preserve"> + <value>Status</value> + </data> + <data name="Bus_PassengerCount" xml:space="preserve"> + <value>PassengerCount</value> + </data> + <data name="Result_Status" xml:space="preserve"> + <value>status</value> + </data> + <data name="Bus_Smart_Electrics" xml:space="preserve"> + <value>SmartElectrics</value> + </data> </root> \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index 22b65685608a1df9904f35a1c22e680853cbeeda..2045185b3aa8dbb912a4d49f1873640e58d5966d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -174,6 +174,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON #region Implementation of IPneumaticSupplyDeclarationData + public string Clutch { get; } public virtual double Ratio { get { return Body["Aux"]?["PneumaticSupply"]?.GetEx<double>("Ratio") ?? 0.0; } } public virtual string CompressorSize { get { return Body["Aux"]?["PneumaticSupply"]?.GetEx<string>("CompressorSize"); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs index ad38591df6a23c8add6fff598332340ad4c25d48..dfc920f986a3e4289b3ea6bde190975f80a5a09f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs @@ -93,4 +93,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationPrimaryVehicleBusAngledriveDataProviderV01 : XMLDeclarationAngledriveDataProviderV10 + { + public new static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "AngledriveDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + + public XMLDeclarationPrimaryVehicleBusAngledriveDataProviderV01( + IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) + : base(vehicle, componentNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs index dbaa69e9c385044c127631d9df95678b73ff5b5a..db695af2cd04eb590dcb2cbe70df8f0c3b5447ed 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs @@ -95,4 +95,25 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationPrimaryVehicleBusAxlegearDataProviderV01 : XMLDeclarationAxlegearDataProviderV10 + { + public new static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "AxlegearDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + + public XMLDeclarationPrimaryVehicleBusAxlegearDataProviderV01( + IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) + : base(vehicle, componentNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index 9712369c87be6464790deccd8c225fa1d7c8ae16..4b5dc14286ca5302bd7c3458b7a6ef48565909d7 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -1,8 +1,12 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; +using System.Windows.Forms; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.BusAuxiliaries; +using Castle.Core.Internal; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; @@ -23,7 +27,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - public XMLDeclarationPrimaryBusAuxiliariesDataProviderV26( + private const string RATIO_ATTRIBUTE = "ratio"; + private const string CURRENT_ATTRIBUTE = "current"; + private const string SMART_CURRENT_ATTRIBUTE = "smartCurrent"; + private const string IDLE_NODE_NAME = "Idle"; + private const string TRANSACTION_NODE_NAME = "Traction"; + private const string OVERRUN_NODE_NAME = "Overrun"; + + + public XMLDeclarationBusAuxiliariesDataProviderV26( IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode) { } #region Implementation of IBusAuxiliariesDeclarationData @@ -216,6 +228,33 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { get { return false; } } + BrakelightsLED = GetBool(XMLNames.Bus_Brakelights), + InteriorLightsLED = GetBool(XMLNames.Bus_Interiorlights) + }; + } + } + + public IPneumaticSupplyDeclarationData PneumaticSupply { get { return null; } } + + public IPneumaticConsumersDeclarationData PneumaticConsumers { get { return null;} } + + public IHVACBusAuxiliariesDeclarationData HVACAux + { + get + { + var hvac = new HVACBusAuxiliariesDeclarationData + { + SystemConfiguration = GetString(XMLNames.Bus_SystemConfiguration).ToInt(), + CompressorType = new CompressorType(GetString(XMLNames.Bus_DriverAC), GetString(XMLNames.Bus_PassengerAC)), + AuxHeaterPower = GetString(XMLNames.Bus_AuxiliaryHeaterPower).ToDouble().SI<Watt>(), + DoubleGlasing = GetBool(XMLNames.Bus_DoubleGlasing), + HeatPump = GetBool(XMLNames.Bus_HeatPump), + AdjustableAuxiliaryHeater = GetBool(XMLNames.Bus_AdjustableAuxiliaryHeater), + SeparateAirDistributionDucts = GetBool(XMLNames.Bus_SeparateAirDistributionDucts) + }; + return hvac; + } + } #endregion } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs index 81b820810e18c0b76defe333ac60be0a48f93c80..0b3ad62e0ff87221e59e1fa09b7f02efa586a4c3 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs @@ -193,4 +193,89 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } -} + + // --------------------------------------------------------------------------------------- + + + public class XMLDeclarationCompleteBusComponentsDataProviderV26 : XMLDeclarationComponentsDataProviderV10, IXMLVehicleComponentsDeclaration + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; + + public new const string XSD_TYPE = "CompletedVehicleComponentsDeclarationType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + private IBusAuxiliariesDeclarationData _busAuxiliaries; + + public XMLDeclarationCompleteBusComponentsDataProviderV26( + IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base( + vehicle, componentNode, sourceFile) + { } + + IGearboxDeclarationInputData IVehicleComponentsDeclaration.GearboxInputData + { + get { return null; } + } + + IAuxiliariesDeclarationInputData IVehicleComponentsDeclaration.AuxiliaryInputData + { + get { return null; } + } + + public override IBusAuxiliariesDeclarationData BusAuxiliaries { get { return _busAuxiliaries ?? (_busAuxiliaries = ComponentReader.BusAuxiliariesInputData); } } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } + + + // --------------------------------------------------------------------------------------- + + + public class XMLDeclarationComponentsPrimaryVehicleBusDataProviderV01 : XMLDeclarationComponentsDataProviderV10, IXMLVehicleComponentsDeclaration + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "VehicleComponentsPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + private IBusAuxiliariesDeclarationData _busAuxiliaries; + + + public XMLDeclarationComponentsPrimaryVehicleBusDataProviderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, + string sourceFile) : base(vehicle, componentNode, sourceFile) { } + + IRetarderInputData IVehicleComponentsDeclaration.RetarderInputData + { + get { return null; } + } + + ITorqueConverterDeclarationInputData IVehicleComponentsDeclaration.TorqueConverterInputData + { + get { return null; } + } + + IAirdragDeclarationInputData IVehicleComponentsDeclaration.AirdragInputData + { + get { return null; } + } + + IAuxiliariesDeclarationInputData IVehicleComponentsDeclaration.AuxiliaryInputData + { + get { return null; } + } + + public override IBusAuxiliariesDeclarationData BusAuxiliaries + { + get { return _busAuxiliaries ?? (_busAuxiliaries = ComponentReader.BusAuxiliariesInputData); } + } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs index 2d2afbc90f1321f56569f577b73d4c839c9e4603..db992c93b17928b22779b13365304716234b6001 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs @@ -115,7 +115,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual FuelType FuelType { get { - var value = GetString(XMLNames.Engine_FuelType); + var value = GetString(XMLNames.Engine_FuelType).Replace(" ",""); if ("LPG".Equals(value, StringComparison.InvariantCultureIgnoreCase)) { return FuelType.LPGPI; } @@ -468,4 +468,34 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationPrimaryVehicleBusEngineDataProviderV01 : XMLDeclarationEngineDataProviderV23 + { + + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "EngineDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationPrimaryVehicleBusEngineDataProviderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, + string sourceFile) : base(vehicle, componentNode, sourceFile) { } + + public override IList<IEngineModeDeclarationInputData> EngineModes + { + get + { + return _engineModes ?? + (_engineModes = new List<IEngineModeDeclarationInputData>() { new XMLSingleFuelEngineMode(BaseNode) }); + } + } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs index 7f0bdbc79b3789917037c3329ec2a4a38e2cd66b..25d2370f8675e50f63ec7cebaec493d264209dc0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs @@ -146,4 +146,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationPrimaryVehicleBusGearboxDataProviderV01 : XMLDeclarationGearboxDataProviderV10 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "TransmissionDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationPrimaryVehicleBusGearboxDataProviderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) + : base(vehicle, componentNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs index 05d479ce6ede43adf12dcca505e200737bde6dff..490086b8c99419d08335ff8453cb2eb5a0ee6d85 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs @@ -31,11 +31,14 @@ using System.Xml; using System.Xml.Linq; +using Castle.Components.DictionaryAdapter.Xml; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; +using XmlDocumentType = System.Xml.XmlDocumentType; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration { @@ -100,6 +103,108 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration public XMLDeclarationInputDataProviderV20(XmlDocument xmlDoc, string fileName) : base(xmlDoc, fileName) { } + + } + + + // --------------------------------------------------------------------------------------- + + public class XMLPrimaryVehicleBusInputDataV01 : AbstractXMLResource, IXMLPrimaryVehicleBusInputData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_NAMESPACE; + + public const string XSD_TYPE = "PrimaryVehicleHeavyBusType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + protected readonly XmlDocument Document; + protected IDeclarationJobInputData JobData; + + private IVehicleDeclarationInputData _vehicle; + private IApplicationInformation _applicationInformation; + private IResultsInputData _resultsInputData; + + + public XMLPrimaryVehicleBusInputDataV01(XmlDocument xmlDoc, string fileName) : base(xmlDoc, fileName) + { + Document = xmlDoc; + SourceType = DataSourceType.XMLFile; + } + + + #region IPrimaryVehicleInputDataProvider interface + + public IVehicleDeclarationInputData Vehicle + { + get { return _vehicle ?? (_vehicle = Reader.JobData.Vehicle); } + } + + public DigestData ResultDataHash + { + get { return Reader.GetDigestData(GetNode(XMLNames.Tag_ResultDataSignatureNode)); } + } + + public IApplicationInformation ApplicationInformation + { + get { return _applicationInformation ?? (_applicationInformation = Reader.ApplicationInformation); } + } + + public DigestData ManufacturerHash + { + get { return Reader.GetDigestData(Document.LastChild.LastChild); } + } + + public IResultsInputData ResultsInputData + { + get { return _resultsInputData ?? (_resultsInputData = Reader.ResultsInputData); } + } + + #endregion + + + + #region IXMLPrimaryVehicleBusInputData interface + + public IXMLDeclarationPrimaryVehicleBusInputDataReader Reader { protected get; set; } + + public XmlNode ResultsNode + { + get { return GetNode(XMLNames.Report_Results); } + } + + public XmlNode ApplicationInformationNode + { + get { return GetNode(XMLNames.Tag_ApplicationInformation); } + } + + #endregion + + + #region AbstractXMLResource class + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + public override DataSource DataSource + { + get { return new DataSource { SourceFile = SourceFile, SourceVersion = "", SourceType = SourceType }; } + } + + protected override DataSourceType SourceType { get; } + + #endregion + + public virtual IDeclarationJobInputData JobInputData + { + get { return JobData ?? (JobData = Reader.JobData); } + } } + + + + + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs index 239a4b413b870d41ecf8ef09b1b3d781219282b3..621ce2b10d1b5ff29148c615e372d68355c1ec9a 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs @@ -85,4 +85,61 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationPrimaryVehicleBusJobInputDataProviderV01 : AbstractXMLResource, IXMLPrimaryVehicleBusJobInputData + { + + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public const string XSD_TYPE = "PrimaryVehicleHeavyBusDataType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + + protected IVehicleDeclarationInputData _vehicle; + + + public XMLDeclarationPrimaryVehicleBusJobInputDataProviderV01(XmlNode node, IXMLPrimaryVehicleBusInputData inputProvider, + string fileName) : base(node, fileName) + { + InputData = inputProvider; + } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + public string ShiftStrategy + { + get { return null; } + } + + public bool SavedInDeclarationMode + { + get { return true; } + } + + public string JobName + { + get { return Vehicle.Identifier; } + } + + protected override DataSourceType SourceType + { + get { return DataSourceType.XMLFile; } + } + + public IVehicleDeclarationInputData Vehicle + { + get { return _vehicle ?? (_vehicle = Reader.CreateVehicle); } + } + + public IXMLJobDataReader Reader { protected get; set; } + public IXMLPrimaryVehicleBusInputData InputData { get; } + } + + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs new file mode 100644 index 0000000000000000000000000000000000000000..3a2197108fabe44fd2824a3833826b69eeaaa5d9 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Linq; +using Castle.Components.DictionaryAdapter.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Common; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider +{ + public class XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01 : AbstractXMLType, IXMLApplicationInformationData + { + public static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public const string XSD_TYPE = "ApplicationInformationPIFType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01(XmlNode applicationNode) + : base(applicationNode) { } + + public string SimulationToolVersion + { + get { return GetString(XMLNames.Report_ApplicationInfo_SimulationToolVersion); } + } + + public DateTime Date + { + get { return XmlConvert.ToDateTime(GetString(XMLNames.Report_ApplicationInfo_Date), XmlDateTimeSerializationMode.Utc); } + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs new file mode 100644 index 0000000000000000000000000000000000000000..39f4078eb1c8d4af430488f1512122893620eb12 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Linq; +using Castle.Components.DictionaryAdapter.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Common; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider +{ + public class XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01 : AbstractXMLType, IXMLResultsInputData + { + public static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public const string XSD_TYPE = "ResultsPIFType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + private XmlNode _resultsNode; + + public XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01(XmlNode resultsNode) : base(resultsNode) + { + _resultsNode = resultsNode; + } + public string Status + { + get { return GetString(XMLNames.Bus_Status); } + } + + public IList<IResult> Results + { + get { return ReadResults(); } + } + + + private IList<IResult> ReadResults() + { + if (_resultsNode == null || _resultsNode?.ChildNodes.Count == 0) + return null; + + var results = new List<IResult>(); + + foreach (XmlNode resultNode in _resultsNode.ChildNodes) { + if(resultNode.Name == XMLNames.Report_Result_Result) + results.Add(GetResult(resultNode)); + } + + return results; + } + + private IResult GetResult(XmlNode xmlNode) + { + var resultStatus = GetAttribute(xmlNode, XMLNames.Result_Status); + var vehicleGroup = GetString(XMLNames.Report_Vehicle_VehicleGroup, xmlNode); + var mission = GetString(XMLNames.Report_Result_Mission, xmlNode); + var simulationNode = GetNode(XMLNames.Report_ResultEntry_SimulationParameters, xmlNode); + var simulationParams = GetSimulationParameter(simulationNode); + + return new Result { + ResultStatus = resultStatus, + Mission = mission, + VehicleGroup = vehicleGroup, + SimulationParameter = simulationParams + }; + } + + + private ISimulationParameter GetSimulationParameter(XmlNode xmlNode) + { + return new SimulationParameter + { + TotalVehicleMass = GetString(XMLNames.Report_ResultEntry_TotalVehicleMass, xmlNode).ToDouble().SI<Kilogram>(), + Payload = GetString(XMLNames.Report_Result_Payload, xmlNode).ToDouble().SI<Kilogram>(), + PassengerCount = GetString(XMLNames.Bus_PassengerCount, xmlNode).ToInt(), + FuelMode = GetString(XMLNames.Report_Result_FuelMode, xmlNode) + }; + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 9c094ac3593246f342428824bf1fda138ea0d35e..58be885d890d4844c5ce7398ae3dee9401722980 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -31,6 +31,8 @@ using System; using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Windows.Forms.VisualStyles; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.BusAuxiliaries; @@ -38,6 +40,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader; using TUGraz.VectoCore.InputData.Impl; @@ -680,4 +683,300 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } + public class XMLDeclarationCompletedBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; + + public new const string XSD_TYPE = "CompletedVehicleDeclarationType"; + + public new static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationCompletedBusDataProviderV26( + IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) + { + SourceType = DataSourceType.XMLEmbedded; + } + + + #region Overrides of AbstractCommonComponentType + + public override string Manufacturer { get { return GetString(XMLNames.ManufacturerCompletedVehicle); } } + + public override string ManufacturerAddress { get { return GetString(XMLNames.ManufacturerAddressCompletedVehicle); } } + + #endregion + + + #region Overrides of XMLDeclarationVehicleDataProviderV10 + + public override string RegisteredClass { get { return GetString(XMLNames.Vehicle_RegisteredClass); } } + + public override VehicleCode VehicleCode { get { return GetString(XMLNames.Vehicle_VehicleCode).ParseEnum<VehicleCode>(); } } + + //TechnicalPermissibleMaximumLadenMass + public override Kilogram GrossVehicleMassRating { get { return GetDouble(XMLNames.TPMLM).SI<Kilogram>(); } } + + public override TankSystem? TankSystem + { + get + { + return GetString(XMLNames.Vehicle_NgTankSystem).ParseEnum<TankSystem>(); + } + } + + public override int NumberOfPassengersLowerDeck + { + get + { + var node = GetNode(XMLNames.Bus_LowerDeck); + return XmlConvert.ToInt32(node.InnerText); + } + } + + public override int NuberOfPassengersUpperDeck + { + get + { + var node = GetNode(XMLNames.Bus_UpperDeck); + return XmlConvert.ToInt32(node.InnerText); + } + } + + //HeightIntegratedBody + public override Meter Height { get { return GetDouble(XMLNames.Bus_HeighIntegratedBody).SI<Meter>(); }} + + //VehicleLength + public override Meter Length { get { return GetDouble(XMLNames.Bus_VehicleLength).SI<Meter>(); } } + + //VehicleWidth + public override Meter Width { get { return GetDouble(XMLNames.Bus_VehicleWidth).SI<Meter>(); } } + + public override XmlElement PTONode + { + get { return null; } + } + + #endregion + + public bool LowEntry { get { return GetBool(XMLNames.Bus_LowEntry); } } + + public Meter EntranceHeight { get { return GetDouble(XMLNames.Bus_EntranceHeight).SI<Meter>(); } } + + public string DoorDriveTechnology { get { return GetString(XMLNames.Bus_DoorDriveTechnology); } } + + + #region Overrides of AbstractXMLResource + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationPrimaryVehicleBusDataProviderV01 : AbstractCommonComponentType, IXMLDeclarationVehicleData + { + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public const string XSD_TYPE = "VehiclePIFType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + protected IXMLPrimaryVehicleBusJobInputData BusJobData; + private XmlElement _adasNode; + private IAdvancedDriverAssistantSystemDeclarationInputData _adas; + private XmlElement _componentNode; + private IVehicleComponentsDeclaration _components; + + + + public XMLDeclarationPrimaryVehicleBusDataProviderV01(IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode xmlNode, string sourceFile) + : base(xmlNode, sourceFile) + { + BusJobData = busJobData; + } + + #region Overrides of AbstractCommonComponentType + + public override string Manufacturer + { + get { return GetString(XMLNames.ManufacturerPrimaryVehicle); } + } + + public string ManufacturerAddress + { + get { return GetString(XMLNames.ManufacturerAddressPrimaryVehicle); } + } + + #endregion + + + #region IXMLDeclarationVehicleData interface + + public string VIN { get { return GetString(XMLNames.Vehicle_VIN); } } + + public VehicleCategory VehicleCategory + { + get { return VehicleCategoryHelper.Parse(GetString(XMLNames.Vehicle_VehicleCategory)); } + } + + public AxleConfiguration AxleConfiguration + { + get { return AxleConfigurationHelper.Parse(GetString(XMLNames.Vehicle_AxleConfiguration)); } + } + + //TechnicalPermissibleMaximumLadenMass + public Kilogram GrossVehicleMassRating + { + get { return GetDouble(XMLNames.TPMLM).SI<Kilogram>(); } + } + + //IdlingSpeed + public PerSecond EngineIdleSpeed + { + get { return GetDouble(XMLNames.Engine_IdlingSpeed).SI<PerSecond>(); } + } + + public RetarderType RetarderType + { + get { return GetString(XMLNames.Vehicle_RetarderType).ParseEnum<RetarderType>(); } + } + + public double RetarderRatio + { + get { return GetDouble(XMLNames.Vehicle_RetarderRatio); } + } + + public AngledriveType AngledriveType + { + get { return GetString(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); } + } + + public bool ZeroEmissionVehicle + { + get { return GetBool(XMLNames.Vehicle_ZeroEmissionVehicle); } + } + + public XmlElement ADASNode + { + get + { + return _adasNode ?? (_adasNode = GetNode(XMLNames.Vehicle_ADAS, required: false) as XmlElement); + } + } + + public IXMLADASReader ADASReader { get; set; } + + public IAdvancedDriverAssistantSystemDeclarationInputData ADAS + { + get { return _adas ?? (_adas = ADASReader.ADASInputData); } + } + + + public IList<ITorqueLimitInputData> TorqueLimits + { + get { return ReadTorqueLimits(); } + } + + public XmlElement ComponentNode + { + get + { + if (ExemptedVehicle) + { + return null; + } + + return _componentNode ?? (_componentNode = GetNode(XMLNames.Vehicle_Components) as XmlElement); + } + } + public IXMLComponentReader ComponentReader { get; set; } + + public IVehicleComponentsDeclaration Components + { + get + { + return _components ?? (_components = ComponentReader.ComponentInputData); + } + } + + + #region Non seeded Properties + + public string Identifier { get; } + public bool ExemptedVehicle { get; } + public LegislativeClass LegislativeClass { get; } + public int NuberOfPassengersUpperDeck { get; } + public int NumberOfPassengersLowerDeck { get; } + public Kilogram CurbMassChassis { get; } + public bool VocationalVehicle { get; } + public bool SleeperCab { get; } + public TankSystem? TankSystem { get; } + + public bool HybridElectricHDV { get; } + public bool DualFuelVehicle { get; } + public Watt MaxNetPower1 { get; } + public Watt MaxNetPower2 { get; } + public string RegisteredClass { get; } + public VehicleCode VehicleCode { get; } + public FloorType FloorType { get; } + public bool Articulated { get; } + public Meter Height { get; } + public Meter Length { get; } + public Meter Width { get; } + + public XmlElement PTONode { get; } + public IXMLPTOReader PTOReader { get; set; } + public IPTOTransmissionInputData PTOTransmissionInputData { get; } + + + #endregion + + + #endregion + + #region Overrides of AbstractXMLResource + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + protected override DataSourceType SourceType + { + get { return DataSourceType.XMLFile; } + } + + #endregion + + + private IList<ITorqueLimitInputData> ReadTorqueLimits() + { + var torqueLimits = new List<ITorqueLimitInputData>(); + var limits = GetNodes(new[] { XMLNames.Vehicle_TorqueLimits, XMLNames.Vehicle_TorqueLimits_Entry }); + foreach (XmlNode current in limits) + { + if (current.Attributes != null) + { + torqueLimits.Add( + new TorqueLimitInputData() + { + Gear = GetAttribute(current, XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr).ToInt(), + MaxTorque = GetAttribute(current, XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr) + .ToDouble().SI<NewtonMeter>() + }); + } + } + + return torqueLimits; + } + } + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs index 637a7314e7c781c968178b98296a2a81763b50ba..828a61afa93cd5dda46b58af8954ed3a7cbf0028 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs @@ -123,4 +123,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLPrimaryVehicleBusTransmissionDataV01 : XMLGearDataV10 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "TransmissionGearPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLPrimaryVehicleBusTransmissionDataV01(XmlNode gearNode, string sourceFile) + : base(gearNode, sourceFile) { } + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs index 3738d5c86b73c4daa68c7559b32c78f15e38cd77..29b6f4f34dea764d2112e2a79ee402052b272f57 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs @@ -1,4 +1,5 @@ using System.Xml; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader; @@ -16,11 +17,24 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLDeclarationInputData CreateInputProvider(string version, XmlDocument xmlDoc, string fileName); + IXMLPrimaryVehicleBusInputData CreatePrimaryVehicleBusInputProvider(string version, XmlDocument xmlDoc, string fileName); + + IXMLDeclarationJobInputData CreateJobData( string version, XmlNode node, IXMLDeclarationInputData inputProvider, string fileName); + IXMLPrimaryVehicleBusJobInputData CreatePrimaryVehicleJobData( + string version, XmlNode node, IXMLPrimaryVehicleBusInputData inputProvider, string fileName); + + + IXMLDeclarationVehicleData CreateVehicleData( string version, IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile); + + IXMLDeclarationVehicleData CreatePrimaryVehicleData( + string version, IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode xmlNode, string sourceFile); + + IXMLVehicleComponentsDeclaration CreateComponentData( string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); @@ -74,9 +88,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLDeclarationInputDataReader CreateInputReader( string version, IXMLDeclarationInputData inputData, XmlNode baseNode); + IXMLDeclarationPrimaryVehicleBusInputDataReader CreatePrimaryVehicleBusInputReader( + string version, IXMLPrimaryVehicleBusInputData inputData, XmlNode baseNode); + + IXMLJobDataReader CreateJobReader( string version, IXMLDeclarationJobInputData jobData, XmlNode jobNode); + IXMLJobDataReader CreatePrimaryVehicleJobReader( + string version, IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode jobNode); + + IXMLComponentReader CreateComponentReader( string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); @@ -91,6 +113,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLAxleReader CreateAxleReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); IXMLGearboxReader CreateGearboxReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); IXMLAuxiliaryReader CreateAuxiliariesReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); + + IXMLApplicationInformationData CreateApplicationInformationReader(string version, XmlNode applicationNode); + + IXMLResultsInputData CreateResultsInputDataReader(string version, XmlNode resultsNode); + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs index cc0921b0ee696de8ea7974484597a72b96ac3265..44b0aeeebcb2129dc55f6a8ffd8ba8ca64cb32a8 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/IXMLDeclarationInputDataReader.cs @@ -1,3 +1,4 @@ +using System.Xml; using TUGraz.VectoCommon.InputData; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration @@ -6,4 +7,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration { IDeclarationJobInputData JobData { get; } } + + public interface IXMLDeclarationPrimaryVehicleBusInputDataReader : IXMLDeclarationInputDataReader + { + IResultsInputData ResultsInputData { get; } + + DigestData GetDigestData(XmlNode xmlNode); + + IApplicationInformation ApplicationInformation { get; } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLApplicationInformationData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLApplicationInformationData.cs new file mode 100644 index 0000000000000000000000000000000000000000..e0a0285fad3f47ededa38d7a47c7367fe19474ba --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLApplicationInformationData.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces +{ + public interface IXMLApplicationInformationData : IApplicationInformation + { + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationInputData.cs index 074178188367155536473846cbd6e77cb06d1429..1ad7902920c9e411d0a1a7f3e55786997e8df3e0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationInputData.cs @@ -1,3 +1,4 @@ +using System.Xml; using TUGraz.VectoCommon.InputData; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces @@ -6,4 +7,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces { IXMLDeclarationInputDataReader Reader { set; } } + + + + public interface IXMLPrimaryVehicleBusInputData : IPrimaryVehicleInputDataProvider, IXMLResource + { + IXMLDeclarationPrimaryVehicleBusInputDataReader Reader { set; } + + XmlNode ResultsNode { get; } + + XmlNode ApplicationInformationNode { get; } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationJobInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationJobInputData.cs index 671e52b5ecf2ec26594fdcc76cb24f21090eec2f..ae8db5654e30bd77e9db3ed831c2b2bfb8427010 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationJobInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLDeclarationJobInputData.cs @@ -9,4 +9,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces IXMLDeclarationInputData InputData { get; } } + + public interface IXMLPrimaryVehicleBusJobInputData : IDeclarationJobInputData, IXMLResource + { + IXMLJobDataReader Reader { set; } + + IXMLPrimaryVehicleBusInputData InputData { get; } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLResultsInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLResultsInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..2f108bc810fd7de6c186ee2d0e8434e3ac390695 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Interfaces/IXMLResultsInputData.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces +{ + public interface IXMLResultsInputData : IResultsInputData + { + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs index 814dd3f262300d50eb50a4a42b69ff827df9dc81..d2a946a414c4cdb9f521cf0bb662b866d5d027a3 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs @@ -15,12 +15,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules { Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationPrimaryBusVehicleDataProviderV26>() .Named(XMLDeclarationPrimaryBusVehicleDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationCompletedBusDataProviderV26>() + .Named(XMLDeclarationCompletedBusDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationPrimaryBusComponentsDataProviderV26>() .Named(XMLDeclarationPrimaryBusComponentsDataProviderV26.QUALIFIED_XSD_TYPE); Bind<IXMLBusAuxiliariesDeclarationData>().To<XMLDeclarationPrimaryBusAuxiliariesDataProviderV26>() .Named(XMLDeclarationPrimaryBusAuxiliariesDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationCompleteBusComponentsDataProviderV26>() + .Named(XMLDeclarationCompleteBusComponentsDataProviderV26.QUALIFIED_XSD_TYPE); Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationMediumLorryVehicleDataProviderV26>() @@ -32,8 +37,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules { Bind<IXMLGearboxDeclarationInputData>().To<XMLDeclarationGearboxDataProviderV26>() .Named(XMLDeclarationGearboxDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLBusAuxiliariesDeclarationData>().To<XMLDeclarationCompleteBusAuxiliariesDataProviderV26>() + .Named(XMLDeclarationCompleteBusAuxiliariesDataProviderV26.QUALIFIED_XSD_TYPE); + + Bind<IXMLComponentReader>().To<XMLComponentReaderV26>().Named(XMLComponentReaderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLComponentReader>().To<XMLComponentReaderV26>().Named(XMLComponentReaderV26.QUALIFIED_COMPLETE_XSD_TYPE); + Bind<IXMLComponentReader>().To<XMLComponentReaderNoAxlegearV26>().Named(XMLComponentReaderNoAxlegearV26.QUALIFIED_XSD_TYPE); Bind<IXMLGearboxReader>().To<XMLGearboxReaderV26>().Named(XMLGearboxReaderV26.QUALIFIED_XSD_TYPE); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationPrimaryVehicleBusV01InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationPrimaryVehicleBusV01InjectModule.cs new file mode 100644 index 0000000000000000000000000000000000000000..cdc5f22125a2cc296e5e39fa9809642e42ab9e96 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationPrimaryVehicleBusV01InjectModule.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules +{ + public class XMLDeclarationPrimaryVehicleBusV01InjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + + Bind<IXMLPrimaryVehicleBusInputData>().To<XMLPrimaryVehicleBusInputDataV01>() + .Named(XMLPrimaryVehicleBusInputDataV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLPrimaryVehicleBusJobInputData>().To<XMLDeclarationPrimaryVehicleBusJobInputDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusJobInputDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLJobDataReader>().To<XMLJobDataPrimaryVehicleReaderV01>() + .Named(XMLJobDataPrimaryVehicleReaderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationPrimaryVehicleBusDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLDeclarationPrimaryVehicleBusInputDataReader>().To<XMLPrimaryVehicleBusInputReaderV01>() + .Named(XMLPrimaryVehicleBusInputReaderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLComponentReader>().To<XMLPrimaryVehicleBusComponentReaderV01>() + .Named(XMLPrimaryVehicleBusComponentReaderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationComponentsPrimaryVehicleBusDataProviderV01>() + .Named(XMLDeclarationComponentsPrimaryVehicleBusDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLEngineDeclarationInputData>().To<XMLDeclarationPrimaryVehicleBusEngineDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusEngineDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLGearboxDeclarationInputData>().To<XMLDeclarationPrimaryVehicleBusGearboxDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusGearboxDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLGearboxReader>().To<XMLPrimaryVehicleBusComponentReaderV01>() + .Named(XMLPrimaryVehicleBusComponentReaderV01.GEARBOX_READER_QUALIFIED_XSD_TYPE); + + Bind<IXMLGearData>().To<XMLPrimaryVehicleBusTransmissionDataV01>() + .Named(XMLPrimaryVehicleBusTransmissionDataV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLAngledriveInputData>().To<XMLDeclarationPrimaryVehicleBusAngledriveDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusAngledriveDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLAxleGearInputData>().To<XMLDeclarationPrimaryVehicleBusAxlegearDataProviderV01>().Named( + XMLDeclarationPrimaryVehicleBusAxlegearDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLApplicationInformationData>().To<XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.QUALIFIED_XSD_TYPE); + + Bind<IXMLResultsInputData>().To<XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01>() + .Named(XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.QUALIFIED_XSD_TYPE); + + + } + + #endregion + + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationReaderInjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationReaderInjectModule.cs index 1830ebea3f4b01618d16ef63c49c1511c85065bf..8b483fe54979043bfd526b54b8ea1f56d6176142 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationReaderInjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationReaderInjectModule.cs @@ -21,6 +21,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration new XMLDeclarationInputDataV22InjectModule(), new XMLDeclarationInputDataV23InjectModule(), new XMLDeclarationInputDataV26InjectModule(), + new XMLDeclarationPrimaryVehicleBusV01InjectModule(), }); #endregion diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs index 1da79730898eb938c75c8d0afa4a537763cc5513..223f774548ddc57782a48e0154f81d19ab79f287 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs @@ -1,4 +1,6 @@ using System; +using System.Runtime.Remoting.Messaging; +using System.Windows.Forms.VisualStyles; using System.Xml; using System.Xml.Linq; using Ninject; @@ -48,7 +50,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public XMLComponentReaderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentsNode) : base( vehicle, componentsNode) { - if (componentsNode == null) { + if (componentsNode == null) + { throw new VectoException("component node must not be null!"); } @@ -64,22 +67,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAirdragDeclarationInputData AirdragInputData { - get { + get + { return _airdragInputData ?? (_airdragInputData = CreateComponent(XMLNames.Component_AirDrag, AirdragCreator, true)); } } public virtual IGearboxDeclarationInputData GearboxInputData { - get { + get + { return _gearboxInputData ?? (_gearboxInputData = CreateComponent(XMLNames.Component_Gearbox, GearboxCreator)); } } public virtual ITorqueConverterDeclarationInputData TorqueConverterInputData { - get { - if (_torqueConverterInputData == null && BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Component_TorqueConverter)) == null) { + get + { + if (_torqueConverterInputData == null && BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Component_TorqueConverter)) == null) + { return null; } return _torqueConverterInputData ?? (_torqueConverterInputData = CreateComponent( @@ -92,9 +99,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual ITransmissionInputData CreateGear(XmlNode gearNode) { var version = XMLHelper.GetXsdType(gearNode.SchemaInfo.SchemaType); - try { + try + { return Factory.CreateGearData(version, gearNode, ParentComponent.DataSource.SourceFile); - } catch (Exception e) { + } + catch (Exception e) + { var gearNumber = gearNode.Attributes?.GetNamedItem(XMLNames.Gearbox_Gear_GearNumber_Attr).InnerText; throw new VectoException( "Unsupported XML Version! Node: {0} Gear: {1} Version: {2}", e, gearNode.LocalName, gearNumber, version); @@ -104,9 +114,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAuxiliaryDeclarationInputData CreateAuxiliary(XmlNode auxNode) { var version = XMLHelper.GetXsdType(auxNode.ParentNode.ParentNode.SchemaInfo.SchemaType); - try { + try + { return Factory.CreateAuxiliaryData(version, auxNode, Vehicle); - } catch (Exception e) { + } + catch (Exception e) + { throw new VectoException("Unsupported XML version! Node: {0} version: {1}", e, auxNode.LocalName, version); } } @@ -114,11 +127,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAxleDeclarationInputData CreateAxle(XmlNode axleNode) { var version = XMLHelper.GetXsdType(axleNode.SchemaInfo.SchemaType); - try { + try + { var axle = Factory.CreateAxleData(version, Vehicle, axleNode, (Vehicle as IXMLResource).DataSource.SourceFile); axle.Reader = Factory.CreateAxleReader(version, Vehicle, axleNode); return axle; - } catch (Exception e) { + } + catch (Exception e) + { var axleNumber = axleNode.Attributes?.GetNamedItem(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr).InnerText; throw new VectoException( "Unsupported XML Version! Node: {0} Axle: {1} Version: {2}", e, axleNode.LocalName, axleNumber, version); @@ -128,7 +144,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAxleGearInputData AxleGearInputData { - get { + get + { return _axlegearInputData ?? (_axlegearInputData = CreateComponent(XMLNames.Component_Axlegear, AxlegearCreator)); } } @@ -136,7 +153,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAngledriveInputData AngledriveInputData { - get { + get + { return _angledriveInputData ?? (_angledriveInputData = CreateComponent(XMLNames.Component_Angledrive, AngledriveCreator, true)); } @@ -150,7 +168,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAuxiliariesDeclarationInputData AuxiliaryData { - get { + get + { return _auxiliaryInputData ?? (_auxiliaryInputData = CreateComponent(XMLNames.Component_Auxiliaries, AuxiliaryCreator)); } @@ -159,7 +178,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IRetarderInputData RetarderInputData { - get { + get + { return _retarderInputData ?? (_retarderInputData = CreateComponent(XMLNames.Component_Retarder, RetarderCreator, true)); } @@ -168,7 +188,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public virtual IAxlesDeclarationInputData AxlesDeclarationInputData { - get { + get + { return _axlesInputData ?? (_axlesInputData = CreateComponent(XMLNames.Component_AxleWheels, AxleWheelsCreator)); } } @@ -183,7 +204,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected virtual IAirdragDeclarationInputData AirdragCreator( string version, XmlNode componentNode, string sourceFile) { - if (version == null) { + if (version == null) + { return new XMLDeclarationAirdragDataProviderV10(Vehicle, null, sourceFile); } @@ -201,7 +223,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected virtual ITorqueConverterDeclarationInputData TorqueConverterCreator( string version, XmlNode componentNode, string sourceFile) { - if (version == null) { + if (version == null) + { return new XMLDeclarationTorqueConverterDataProviderV10(Vehicle, componentNode, sourceFile); } @@ -215,7 +238,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected virtual IAngledriveInputData AngledriveCreator(string version, XmlNode componentNode, string sourceFile) { - if (version == null) { + if (version == null) + { return new XMLDeclarationAngledriveDataProviderV10(Vehicle, componentNode, sourceFile); } @@ -229,7 +253,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl protected virtual IRetarderInputData RetarderCreator(string version, XmlNode componentNode, string sourceFile) { - if (version == null) { + if (version == null) + { return new XMLDeclarationRetarderDataProviderV10(Vehicle, componentNode, sourceFile); } @@ -287,7 +312,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public XMLComponentReaderV20(IXMLDeclarationVehicleData vehicle, XmlNode componentsNode) : base( - vehicle, componentsNode) { } + vehicle, componentsNode) + { } } // --------------------------------------------------------------------------------------- @@ -295,16 +321,78 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public class XMLComponentReaderV26 : XMLComponentReaderV20 { public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; + public new const string XSD_TYPE = "PrimaryVehicleComponentsDeclarationType"; public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + public const string COMPLETE_XSD_TYPE = "CompletedVehicleComponentsDeclarationType"; + public static readonly string QUALIFIED_COMPLETE_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, COMPLETE_XSD_TYPE); + + protected IBusAuxiliariesDeclarationData _busAuxInputData; public XMLComponentReaderV26(IXMLDeclarationVehicleData vehicle, XmlNode componentsNode) : base( - vehicle, componentsNode) { } + vehicle, componentsNode) + { } + + public override IBusAuxiliariesDeclarationData BusAuxiliariesInputData { get { return _busAuxInputData ?? (_busAuxInputData = CreateComponent(XMLNames.Component_Auxiliaries, BusAuxCreator)); } } + + protected virtual IBusAuxiliariesDeclarationData BusAuxCreator(string version, XmlNode componentNode, string sourceFile) + { + return Factory.CreateBusAuxiliaires(version, Vehicle, componentNode, sourceFile); + } + } + + + public class XMLPrimaryVehicleBusComponentReaderV01 : XMLComponentReaderV20 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public new const string XSD_TYPE = "VehicleComponentsPIFType"; + public new const string GEARBOX_READER_TYPE = "TransmissionDataPIFType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + public new static readonly string GEARBOX_READER_QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI, GEARBOX_READER_TYPE); + + protected IBusAuxiliariesDeclarationData _busAuxInputData; - public override IBusAuxiliariesDeclarationData BusAuxiliariesInputData { get { return _busAuxInputData ?? (_busAuxInputData = CreateComponent(XMLNames.Component_Auxiliaries, BusAuxCreator)); } } + + public XMLPrimaryVehicleBusComponentReaderV01(IXMLDeclarationVehicleData vehicle, XmlNode componentsNode) + : base(vehicle, componentsNode) { } + + public override IGearboxDeclarationInputData GearboxInputData + { + get + { + return _gearboxInputData ?? (_gearboxInputData = CreateComponent(XMLNames.Component_Transmission, GearboxCreator)); + } + } + + public override IRetarderInputData RetarderInputData + { + get { return null; } + } + + public override ITorqueConverterDeclarationInputData TorqueConverterInputData + { + get { return null; } + } + + public override IAirdragDeclarationInputData AirdragInputData + { + get { return null; } + } + + public override IAuxiliariesDeclarationInputData AuxiliaryData + { + get { return null; } + } + + public override IBusAuxiliariesDeclarationData BusAuxiliariesInputData + { + get { return _busAuxInputData ?? (_busAuxInputData = CreateComponent(XMLNames.Component_Auxiliaries, BusAuxCreator)); } + } protected virtual IBusAuxiliariesDeclarationData BusAuxCreator(string version, XmlNode componentNode, string sourceFile) { diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs index 7262a7d5422ebb3b86bd7f47bb10182c0c9cb1ee..6008ba605ea5fa687067642d837e38763d2afb29 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs @@ -5,6 +5,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl @@ -58,7 +59,88 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); - public XMLDeclarationInputReaderV20(IXMLDeclarationInputData inputData, XmlNode baseNode) : base(inputData, baseNode) { } + public XMLDeclarationInputReaderV20(IXMLDeclarationInputData inputData, XmlNode baseNode) : base(inputData, + baseNode) + { + + } } + + // --------------------------------------------------------------------------------------- + + public class XMLPrimaryVehicleBusInputReaderV01 : AbstractComponentReader, IXMLDeclarationPrimaryVehicleBusInputDataReader + { + + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_NAMESPACE; + + public const string XSD_TYPE = "PrimaryVehicleHeavyBusType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + + protected XmlNode JobNode; + protected IDeclarationJobInputData _jobData; + protected IXMLPrimaryVehicleBusInputData _primaryInputData; + protected IApplicationInformation _applicationInformation; + protected IResultsInputData _resultsInputData; + + [Inject] + public IDeclarationInjectFactory Factory { protected get; set; } + + + public XMLPrimaryVehicleBusInputReaderV01(IXMLPrimaryVehicleBusInputData inputData, XmlNode baseNode) : base(inputData, baseNode) + { + JobNode = baseNode; + _primaryInputData = inputData; + } + + public IDeclarationJobInputData JobData + { + get + { + return _jobData ?? (_jobData = CreateComponent(XMLNames.VectoPrimaryVehicleReport, JobCreator)); + } + } + + + protected IDeclarationJobInputData JobCreator(string version, XmlNode node, string arg3) + { + var job = Factory.CreatePrimaryVehicleJobData(version, BaseNode, _primaryInputData, + (_primaryInputData as IXMLResource).DataSource.SourceFile); + job.Reader = Factory.CreatePrimaryVehicleJobReader(version, job, JobNode); + return job; + } + + + public IResultsInputData ResultsInputData + { + get{ return _resultsInputData ?? + (_resultsInputData = CreateComponent(XMLNames.Report_Results, ResultsInputDataCreator)); } + } + + protected IResultsInputData ResultsInputDataCreator(string version, XmlNode node, string arg3) + { + return Factory.CreateResultsInputDataReader(version, node); + } + + + public DigestData GetDigestData(XmlNode xmlNode) + { + return xmlNode == null ? null : new DigestData(xmlNode); + } + + + protected IApplicationInformation ApplicationCreator(string version, XmlNode node, string agr3) + { + return Factory.CreateApplicationInformationReader(version, node); + } + + + public IApplicationInformation ApplicationInformation + { + get { return _applicationInformation ?? + (_applicationInformation = CreateComponent(XMLNames.Tag_ApplicationInformation, ApplicationCreator)); } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs index c8e39abe71ee84777eb086e94ceadb583222b828..74bc6a042f69b200b348ba8f5b354f23e2c8e12d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs @@ -3,6 +3,7 @@ using System.Xml.Linq; using Ninject; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Utils; @@ -104,4 +105,45 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl return vehicle; } } + + + // --------------------------------------------------------------------------------------- + + public class XMLJobDataPrimaryVehicleReaderV01 : AbstractComponentReader, IXMLJobDataReader + { + + public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01; + + public const string XSD_TYPE = "PrimaryVehicleHeavyBusDataType"; + + public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + + [Inject] + public IDeclarationInjectFactory Factory { protected get; set; } + + protected IVehicleDeclarationInputData _vehicle; + + private readonly IXMLPrimaryVehicleBusJobInputData _primaryBusJobData; + + public XMLJobDataPrimaryVehicleReaderV01(IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode jobNode) + : base(busJobData, jobNode) + { + _primaryBusJobData = busJobData; + } + + public IVehicleDeclarationInputData CreateVehicle + { + get { return _vehicle ?? (_vehicle = CreateComponent(XMLNames.Component_Vehicle, VehicleCreator)); } + } + + protected IVehicleDeclarationInputData VehicleCreator(string version, XmlNode vehicleNode, string sourceFile) + { + var vehicle = Factory.CreatePrimaryVehicleData(version, _primaryBusJobData, vehicleNode, sourceFile); + vehicle.ComponentReader = GetReader(vehicle, vehicle.ComponentNode, Factory.CreateComponentReader); + vehicle.ADASReader = GetReader(vehicle, vehicle.ADASNode, Factory.CreateADASReader); + + return vehicle; + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataFactory.cs index bdfe21bbdc3d4feafc6702bd6e943f74ccd6b321..9ed6cdf680b9278cdc9e02573153c9710c67c328 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataFactory.cs @@ -105,11 +105,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML throw new VectoException("unknown xml file! {0}", xmlDoc.DocumentElement.LocalName); } + + new XMLValidator(xmlDoc, null, XMLValidator.CallBackExceptionOnError).ValidateXML(documentType.Value); - switch (documentType.Value) { + switch (documentType.Value) + { case XmlDocumentType.DeclarationJobData: return ReadDeclarationJob(xmlDoc, source); case XmlDocumentType.EngineeringJobData: return ReadEngineeringJob(xmlDoc, source); + case XmlDocumentType.PrimaryVehicleBusOutputData: return ReadPrimaryVehicleDeclarationJob(xmlDoc, source); case XmlDocumentType.EngineeringComponentData: case XmlDocumentType.DeclarationComponentData: case XmlDocumentType.ManufacturerReport: @@ -139,5 +143,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML throw new VectoException("Failed to read Declaration job version {0}", e, versionNumber); } } + + private IPrimaryVehicleInputDataProvider ReadPrimaryVehicleDeclarationJob(XmlDocument xmlDoc, string source) + { + var versionNumber = XMLHelper.GetXsdType(xmlDoc.DocumentElement?.SchemaInfo.SchemaType); + try { + var input = DeclarationFactory.CreatePrimaryVehicleBusInputProvider(versionNumber, xmlDoc, source); + input.Reader = DeclarationFactory.CreatePrimaryVehicleBusInputReader(versionNumber, input, xmlDoc.DocumentElement); + return input; + } + catch (Exception e) { + throw new VectoException("Failed to read Declaration job version {0}", e, versionNumber); + } + } + + } } diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index e636829275d12a412dc28ae41d19f3763178b7af..d4d0fbfff2599ec1d8e50d4c8647e3d4b85cf85f 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -31,9 +31,11 @@ using System; using System.Collections.Generic; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Declaration; namespace TUGraz.VectoCore.InputData.Impl { @@ -203,6 +205,14 @@ namespace TUGraz.VectoCore.InputData.Impl #endregion } + public class ResultCardDeclarationInputData : IResultCardDeclarationInputData + { + public IList<IResultCardEntry> Idle { get; internal set; } + public IList<IResultCardEntry> Traction { get; internal set; } + public IList<IResultCardEntry> Overrun { get; internal set; } + } + + public class ResultCardEntry : IResultCardEntry { public ResultCardEntry(Ampere current, Ampere smartCurrent) @@ -218,4 +228,100 @@ namespace TUGraz.VectoCore.InputData.Impl #endregion } + + public class ElectricConsumersDeclarationData : IElectricConsumersDeclarationData + { + public bool InteriorLightsLED { get; internal set; } + public bool DayrunninglightsLED { get; internal set; } + public bool PositionlightsLED { get; internal set; } + public bool HeadlightsLED { get; internal set; } + public bool BrakelightsLED { get; internal set; } + } + + public class ElectricSupplyDeclarationData : IElectricSupplyDeclarationData + { + public IList<IAlternatorDeclarationInputData> Alternators { get; internal set; } + public IResultCardDeclarationInputData ResultCards { get; internal set; } + public bool SmartElectrics { get; internal set; } + } + + + public class HVACBusAuxiliariesDeclarationData : IHVACBusAuxiliariesDeclarationData + { + public bool AdjustableAuxiliaryHeater { get; internal set; } + + public bool AdjustableCoolantThermostat { get; internal set; } + + public Watt AuxHeaterPower { get; internal set; } + + public ICompressorType CompressorType { get; internal set; } + + public bool DoubleGlasing { get; internal set; } + + public bool EngineWasteGasHeatExchanger { get; internal set; } + + public bool HeatPump { get; internal set; } + + public bool SeparateAirDistributionDucts { get; internal set; } + + public int SystemConfiguration { get; internal set; } + } + + public class CompressorType : ICompressorType + { + public string DriverAC { get; } + public string PassengerAC { get; } + public CompressorType(string driverAC, string passengerAC) + { + DriverAC = driverAC; + PassengerAC = passengerAC; + } + } + + public class PneumaticConsumersDeclarationData : IPneumaticConsumersDeclarationData + { + public ConsumerTechnology AirsuspensionControl { get; internal set; } + public ConsumerTechnology AdBlueDosing { get; internal set; } + public ConsumerTechnology DoorDriveTechnology { get; internal set; } + } + + + public class PneumaticSupplyDeclarationData : IPneumaticSupplyDeclarationData + { + public string Clutch { get; internal set; } + public double Ratio { get; internal set; } + public string CompressorSize { get; internal set; } + public bool SmartAirCompression { get; internal set; } + public bool SmartRegeneration { get; internal set; } + } + + + public class ResultInputData : IResultsInputData + { + public string Status { get; internal set; } + + public IList<IResult> Results { get; internal set; } + } + + public class Result : IResult + { + public string ResultStatus { get; internal set; } + public string VehicleGroup { get; internal set; } + public string Mission { get; internal set; } + public ISimulationParameter SimulationParameter { get; internal set; } + } + + public class SimulationParameter : ISimulationParameter + { + public Kilogram TotalVehicleMass { get; internal set; } + public Kilogram Payload { get; internal set; } + public int PassengerCount { get; internal set; } + public string FuelMode { get; internal set; } + } + + public class ApplicationInformation : IApplicationInformation + { + public string SimulationToolVersion { get; internal set; } + public DateTime Date { get; internal set; } + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd index 07e7ca455602c0ec9b01da2652a032936502cd98..73a1be6cd18121b9ba84bb31832ed5e42e35151f 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd @@ -282,6 +282,17 @@ </xs:simpleType> </xs:element> </xs:sequence> + </xs:element> + <xs:element name="Overrun"> + <xs:complexType> + <xs:sequence> + <xs:element name="Entry" type="tns:ResultCardEntryType" minOccurs="2" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> </xs:sequence> </xs:complexType> </xs:element> @@ -621,6 +632,26 @@ <xs:enumeration value="mechanically"/> </xs:restriction> </xs:simpleType> + <xs:complexType name="ResultCardEntryType"> + <xs:attribute name="current" type="v1.0:Double2" use="required"/> + <xs:attribute name="smartCurrent" type="v1.0:Double2" use="required"/> + </xs:complexType> + <xs:simpleType name="PneumaticSystemTechnologyType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="Small"/> + <xs:enumeration value="Medium Supply 1-stage"/> + <xs:enumeration value="Medium Supply 2-stage"/> + <xs:enumeration value="Large Supply 1-stage"/> + <xs:enumeration value="Large Supply 2-stage"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PneumaticSystemClutchTypeType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="none"/> + <xs:enumeration value="visco"/> + <xs:enumeration value="mechanically"/> + </xs:restriction> + </xs:simpleType> <xs:complexType name="ResultCardsType"> <xs:sequence> <xs:element name="Idle"> diff --git a/VectoCore/VectoCore/Utils/XMLDefinitions.cs b/VectoCore/VectoCore/Utils/XMLDefinitions.cs index 2fc4028572e9003774a1c7bd5b10cdec93c4de76..29093bdd30c30deb687a7cbd2d4238190221bf74 100644 --- a/VectoCore/VectoCore/Utils/XMLDefinitions.cs +++ b/VectoCore/VectoCore/Utils/XMLDefinitions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Xml.Linq; namespace TUGraz.VectoCore.Utils { @@ -7,12 +8,14 @@ namespace TUGraz.VectoCore.Utils public enum XmlDocumentType { DeclarationJobData = 1 << 1, + PrimaryVehicleBusOutputData = 1 << 2, DeclarationComponentData = 1 << 3, EngineeringJobData = 1 << 4, EngineeringComponentData = 1 << 5, ManufacturerReport = 1 << 6, CustomerReport = 1 << 7, - MonitoringReport = 1 << 8, + MonitoringReport = 1 << 8 + } @@ -52,7 +55,6 @@ namespace TUGraz.VectoCore.Utils public const string DECLARATION_DEFINITIONS_NAMESPACE_URI_V26 = DECLARATION_NAMESPACE + ":DEV:v2.6"; - public const string DECLARATION_INPUT_NAMESPACE = "urn:tugraz:ivt:VectoAPI:DeclarationInput"; public const string DECLARATION_INPUT_NAMESPACE_URI_V10 = DECLARATION_INPUT_NAMESPACE + ":v1.0"; @@ -61,6 +63,11 @@ namespace TUGraz.VectoCore.Utils // public const string DECLARATION_COMPONENT_NAMESPACE_URI_V10 = "urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0"; + public const string DECLARATION_PRIMARY_BUS_VEHICLE_NAMESPACE = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation"; + + public const string DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01 = + DECLARATION_PRIMARY_BUS_VEHICLE_NAMESPACE + ":HeavyBus:v0.1"; + public const string DECLARATION_MANUFACTURER_REPORT_V05 = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5"; @@ -77,6 +84,7 @@ namespace TUGraz.VectoCore.Utils private static Dictionary<XmlDocumentType, string> schemaFilenames = new Dictionary<XmlDocumentType, string>() { {XmlDocumentType.DeclarationJobData, "VectoDeclarationJob.xsd"}, + {XmlDocumentType.PrimaryVehicleBusOutputData, "VectoOutputPrimaryVehicleInformation.xsd"}, {XmlDocumentType.DeclarationComponentData, "VectoDeclarationComponent.xsd"}, {XmlDocumentType.EngineeringJobData, "VectoEngineeringJob.xsd" }, {XmlDocumentType.EngineeringComponentData, "VectoEngineeringComponent.xsd" }, @@ -85,6 +93,7 @@ namespace TUGraz.VectoCore.Utils {XmlDocumentType.MonitoringReport , "VectoMonitoring.xsd"}, }; + public static XNamespace DECLARATION_OUTPUT_PRIMARY_HEAVY_BUS = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1"; public static string GetSchemaFilename(XmlDocumentType type) diff --git a/VectoCore/VectoCore/Utils/XMLHelper.cs b/VectoCore/VectoCore/Utils/XMLHelper.cs index 64abf035b0b0a064fd8314ac1360fab5c2f8ff5e..e87178fbb5c6da4a79d4744cb7d339d9f4353ae6 100644 --- a/VectoCore/VectoCore/Utils/XMLHelper.cs +++ b/VectoCore/VectoCore/Utils/XMLHelper.cs @@ -53,6 +53,7 @@ namespace TUGraz.VectoCore.Utils case "VectoInputDeclaration": return XmlDocumentType.DeclarationJobData; case "VectoInputEngineering": return XmlDocumentType.EngineeringJobData; case "VectoComponentEngineering": return XmlDocumentType.EngineeringComponentData; + case "VectoOutputPrimaryVehicle": return XmlDocumentType.PrimaryVehicleBusOutputData; } return null; diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 5039ccc04333ff7fa2cecdfa399f56b70d5fe654..0c2b8ef23b2395234a8fe8164a1395c7e0cdd3c5 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -147,6 +147,7 @@ <Compile Include="InputData\FileIO\XML\Common\AbstractXMLResource.cs" /> <Compile Include="InputData\FileIO\XML\Common\AbstractXMLType.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLAuxiliaryDeclarationDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationPrimaryVehicleBusApplicationInformationDataProviderV01.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationBusAuxiliariesDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationADASDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationAirdragDataProvider.cs" /> @@ -164,8 +165,10 @@ <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationTorqueConverterDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationTyreDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLGearData.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationPrimaryVehicleBusResultsInputDataProviderV01.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAirdragDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAngledriveInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLApplicationInformationData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAuxiliariesDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAxleDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLAxleGearInputData.cs" /> @@ -176,6 +179,7 @@ <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLGearboxDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLGearData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLPTOTransmissionInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLResultsInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLRetarderInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLTorqueConverterDeclarationInputData.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Interfaces\IXMLTyreDeclarationInputData.cs" /> @@ -185,6 +189,7 @@ <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationInputDataV22InjectModule.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationInputDataV23InjectModule.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationInputDataV26InjectModule.cs" /> + <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationPrimaryVehicleBusV01InjectModule.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Reader\Impl\AbstractComponentReader.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Reader\Impl\XMLADASReader.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Reader\Impl\XMLComponentReader.cs" /> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml index d6e66333da26bea5dbffe7cb854bd743355b1515..1030f2f24a6f1c89f3d02862d8690c5c054be8ab 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml @@ -1,23 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<tns:VectoOutputPrimaryVehicle - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" - xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" - xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" - xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" - xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" - xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" - xmlns:pif="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation" - xmlns:pbus="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" - xmlns:di="http://www.w3.org/2000/09/xmldsig#" - -xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoOutputPrimaryVehicleInformation.xsd urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1 E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoOutputPrimaryBus.xsd urn:tugraz:ivt:VectoAPI:DeclarationDefinitions E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoDeclarationDefinitions.xsd urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1 E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoDeclarationDefinitions.2.1.xsd"> - -<!-- +<tns:VectoOutputPrimaryVehicle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:pif="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation" xmlns:pbus="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoOutputPrimaryVehicleInformation.xsd urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1 E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoOutputPrimaryBus.xsd urn:tugraz:ivt:VectoAPI:DeclarationDefinitions E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoDeclarationDefinitions.xsd urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1 E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoDeclarationDefinitions.2.1.xsd"> + <!-- xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoOutputPrimaryVehicleInformation.xsd urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1 E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoOutputPrimaryBus.xsd" ---> +--> <tns:Data id="PIFHB-VEH-1234567890" xsi:type="pbus:PrimaryVehicleHeavyBusDataType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1"> - <Vehicle xsi:type="VehiclePIFType"> <ManufacturerPrimaryVehicle>Generic Truck Manufacturer</ManufacturerPrimaryVehicle> <ManufacturerAddressPrimaryVehicle>Street, ZIP City</ManufacturerAddressPrimaryVehicle> @@ -238,20 +224,20 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo <ElectricSystem> <AlternatorTechnology ratio="1.000">default</AlternatorTechnology> <SmartElectrics>false</SmartElectrics> -<ResultCards> - <Idle> - <Entry current="0.00" smartCurrent="0.00"/> - <Entry current="100.00" smartCurrent="120.00"/> - </Idle> - <Traction> - <Entry current="0.00" smartCurrent="0.00"/> - <Entry current="100.00" smartCurrent="120.00"/> - </Traction> - <Overrun> - <Entry current="0.00" smartCurrent="0.00"/> - <Entry current="100.00" smartCurrent="120.00"/> - </Overrun> -</ResultCards> </ElectricSystem> + <ResultCards> + <Idle> + <Entry current="0.00" smartCurrent="0.00"/> + <Entry current="100.00" smartCurrent="120.00"/> + </Idle> + <Traction> + <Entry current="0.00" smartCurrent="0.00"/> + <Entry current="100.00" smartCurrent="120.00"/> + </Traction> + <Overrun> + <Entry current="0.00" smartCurrent="0.00"/> + <Entry current="100.00" smartCurrent="120.00"/> + </Overrun> + </ResultCards> <PneumaticSystem> <SizeOfAirSupply>Small</SizeOfAirSupply> <Clutch>none</Clutch> @@ -283,7 +269,7 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo <Results> <Status>success</Status> <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> + <VehicleGroup>P31SD</VehicleGroup> <Mission>Regional Delivery</Mission> <SimulationParameters> <TotalVehicleMass unit="kg">8810</TotalVehicleMass> @@ -385,13 +371,13 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo </ApplicationInformation> </tns:Data> <Signature> - <di:Reference URI="#PIFHB-VEH-1234567890"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> - </di:Reference> + <di:Reference URI="#PIFHB-VEH-1234567890"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> + <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> + </di:Reference> </Signature> </tns:VectoOutputPrimaryVehicle> diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 64865e053a203fffe790bff81f542119209be71d..22eb02fe20dce74a48ebb9fb35a1264f12ca4e1f 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -210,11 +210,13 @@ <Compile Include="Utils\MockModalDataContainer.cs" /> <Compile Include="Utils\DoubleExtensionMethodTest.cs" /> <Compile Include="Utils\VectoMathTest.cs" /> + <Compile Include="XML\XMLCompleteBusReaderTest.cs" /> <Compile Include="XML\XMLDeclarationInputTest.cs" /> <Compile Include="XML\XMLDeclarationReaderVersionsTest.cs" /> <Compile Include="XML\XMLEngineeringInputRefTest.cs" /> <Compile Include="XML\XMLEngineeringInputSingleTest.cs" /> <Compile Include="XML\XMLReportTest.cs" /> + <Compile Include="XML\XMLPrimaryVehicleBusReaderTest.cs" /> <Compile Include="XML\XMLWritingTest.cs" /> </ItemGroup> <ItemGroup> @@ -3587,8 +3589,15 @@ <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-medium_lorry.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\example_heavyBus_PIF.xml"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-completed_heavyBus.xml"> + <SubType>Designer</SubType> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-primary_heavyBus.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="TestData\XML\XMLReaderDeclaration\Tractor_4x2_vehicle-class-5_5_t_0.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> diff --git a/VectoCore/VectoCoreTest/XML/XMLCompleteBusReaderTest.cs b/VectoCore/VectoCoreTest/XML/XMLCompleteBusReaderTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd31271326c60fa036e147f06a310e5e2c93e3c6 --- /dev/null +++ b/VectoCore/VectoCoreTest/XML/XMLCompleteBusReaderTest.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using Ninject; +using NUnit.Framework; +using TUGraz.VECTO; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; + +namespace TUGraz.VectoCore.Tests.XML +{ + + [TestFixture] + public class XMLCompleteBusReaderTest + { + private const string CompleteBusExample = + "TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/vecto_vehicle-completed_heavyBus.xml"; + + + + protected IXMLInputDataReader xmlInputReader; + private IKernel _kernel; + + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + + _kernel = new StandardKernel(new VectoNinjectModule()); + xmlInputReader = _kernel.Get<IXMLInputDataReader>(); + } + + + [TestCase] + public void TestCompleteBusVehicleData() + { + var reader = XmlReader.Create(CompleteBusExample); + + var inputDataProvider = xmlInputReader.CreateDeclaration(reader); + var vehicle = inputDataProvider.JobInputData.Vehicle; + + Assert.IsNotNull(vehicle); + Assert.AreEqual("Some Manufacturer", vehicle.Manufacturer); + Assert.AreEqual("Infinite Loop 1", vehicle.ManufacturerAddress); + Assert.AreEqual("Sample Bus Model", vehicle.Model); + Assert.AreEqual("VEH-1234567890", vehicle.VIN); + Assert.AreEqual(DateTime.Parse("2020-01-09T11:00:00Z").ToUniversalTime(), vehicle.Date); + Assert.IsTrue(vehicle.LegislativeClass == LegislativeClass.N2); + Assert.AreEqual("II+III", vehicle.RegisteredClass); + Assert.IsTrue(vehicle.VehicleCode == VehicleCode.CD); + Assert.AreEqual(8300, vehicle.CurbMassChassis.Value()); + Assert.AreEqual(15400, vehicle.GrossVehicleMassRating.Value());//TechnicalPermissibleMaximumLadenMass ?!? + Assert.That(() => vehicle.TankSystem, Throws.InstanceOf<VectoException>()); + Assert.AreEqual(50, vehicle.NumberOfPassengersLowerDeck); + Assert.AreEqual(0, vehicle.NuberOfPassengersUpperDeck); + Assert.IsTrue(((XMLDeclarationCompletedBusDataProviderV26)vehicle).LowEntry); + Assert.AreEqual(2.700, vehicle.Height.Value()); + Assert.AreEqual(11.830, vehicle.Length.Value()); + Assert.AreEqual(2.550, vehicle.Width.Value()); + Assert.AreEqual(0.120, ((XMLDeclarationCompletedBusDataProviderV26)vehicle).EntranceHeight.Value()); + Assert.AreEqual("pneumatic", ((XMLDeclarationCompletedBusDataProviderV26)vehicle).DoorDriveTechnology); + + var components = inputDataProvider.JobInputData.Vehicle.Components; + Assert.IsNotNull(components); + + var airDrag = components.AirdragInputData; + + Assert.AreEqual("Generic Manufacturer", airDrag.Manufacturer); + Assert.AreEqual("Generic Model", airDrag.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", airDrag.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-03-24T15:00:00Z").ToUniversalTime(), airDrag.Date.ToUniversalTime()); + Assert.AreEqual("Vecto AirDrag x.y", airDrag.AppVersion); + //CdxA ?!? + //TransferredCdxA ?!? + Assert.AreEqual(6.34, airDrag.AirDragArea.Value()); + + Assert.AreEqual("#CabinX23h", airDrag.DigestValue.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", airDrag.DigestValue.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", airDrag.DigestValue.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", airDrag.DigestValue.DigestMethod); + Assert.AreEqual("b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=", airDrag.DigestValue.DigestValue); + + var auxiliaries = components.BusAuxiliaries; + Assert.IsFalse(auxiliaries.ElectricConsumers.DayrunninglightsLED); + Assert.IsFalse(auxiliaries.ElectricConsumers.HeadlightsLED); + Assert.IsFalse(auxiliaries.ElectricConsumers.PositionlightsLED); + Assert.IsFalse(auxiliaries.ElectricConsumers.BrakelightsLED); + Assert.IsFalse(auxiliaries.ElectricConsumers.InteriorLightsLED); + + var electricSupl = components.BusAuxiliaries.ElectricSupply; + Assert.IsNotNull(electricSupl.Alternators); + Assert.AreEqual(1, electricSupl.Alternators.Count); + Assert.AreEqual(1.000, electricSupl.Alternators.First().Ratio); + Assert.AreEqual("default", electricSupl.Alternators.First().Technology); + + var havacAux = components.BusAuxiliaries.HVACAux; + Assert.IsNotNull(havacAux); + Assert.AreEqual(7, havacAux.SystemConfiguration); + Assert.AreEqual("2-stage", havacAux.CompressorType.DriverAC); + Assert.AreEqual("3-stage", havacAux.CompressorType.PassengerAC); + Assert.AreEqual(0.SI<Watt>(), havacAux.AuxHeaterPower); + Assert.IsTrue(havacAux.DoubleGlasing); + Assert.IsFalse(havacAux.HeatPump); + Assert.IsTrue(havacAux.AdjustableAuxiliaryHeater); + Assert.IsTrue(havacAux.SeparateAirDistributionDucts); + } + } +} diff --git a/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleBusReaderTest.cs b/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleBusReaderTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..f46b01ac4240dd8be4770eacb8d8bbf6d627b2aa --- /dev/null +++ b/VectoCore/VectoCoreTest/XML/XMLPrimaryVehicleBusReaderTest.cs @@ -0,0 +1,401 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.InputData.Reader.ComponentData; + +namespace TUGraz.VectoCore.Tests.XML +{ + + [TestFixture] + class XMLPrimaryVehicleBusReaderTest + { + + private const string vehilcePIFExample = + "TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml"; + + protected IXMLInputDataReader xmlInputReader; + private IKernel _kernel; + + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + + _kernel = new StandardKernel(new VectoNinjectModule()); + xmlInputReader = _kernel.Get<IXMLInputDataReader>(); + } + + + [TestCase] + public void TestPrimaryVehicleBusData() + { + + var reader = XmlReader.Create(vehilcePIFExample); + var inputDataProvider = xmlInputReader.Create(reader) as IPrimaryVehicleInputDataProvider; + + var vehicle = inputDataProvider.Vehicle; + + Assert.AreEqual("Generic Truck Manufacturer", vehicle.Manufacturer); + Assert.AreEqual("Street, ZIP City", vehicle.ManufacturerAddress); + Assert.AreEqual("Generic Model", vehicle.Model); + Assert.AreEqual("VEH-1234567890", vehicle.VIN); + Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicle.Date); + Assert.IsTrue(VehicleCategory.HeavyBusPrimaryVehicle == vehicle.VehicleCategory); + Assert.IsTrue(AxleConfiguration.AxleConfig_4x2 == vehicle.AxleConfiguration); + Assert.AreEqual(25000, vehicle.GrossVehicleMassRating.Value()); + Assert.AreEqual(600, vehicle.EngineIdleSpeed.Value()); + Assert.AreEqual("Transmission Output Retarder", ((XMLDeclarationPrimaryVehicleBusDataProviderV01)vehicle).RetarderType.ToXMLFormat()); + Assert.AreEqual(1.000, ((XMLDeclarationPrimaryVehicleBusDataProviderV01)vehicle).RetarderRatio); + Assert.AreEqual("None", ((XMLDeclarationPrimaryVehicleBusDataProviderV01)vehicle).AngledriveType.ToXMLFormat()); + Assert.IsFalse(((XMLDeclarationPrimaryVehicleBusDataProviderV01)vehicle).ZeroEmissionVehicle); + + Assert.IsFalse(vehicle.ADAS.EngineStopStart); + Assert.IsTrue(EcoRollType.None == vehicle.ADAS.EcoRoll); + Assert.IsTrue(PredictiveCruiseControlType.None == vehicle.ADAS.PredictiveCruiseControl); + + Assert.IsNotNull(vehicle.TorqueLimits); + Assert.AreEqual(3, vehicle.TorqueLimits.Count); + Assert.AreEqual(6, vehicle.TorqueLimits[0].Gear); + Assert.AreEqual(1800, vehicle.TorqueLimits[0].MaxTorque.Value()); + Assert.AreEqual(1, vehicle.TorqueLimits[1].Gear); + Assert.AreEqual(2500, vehicle.TorqueLimits[1].MaxTorque.Value()); + Assert.AreEqual(12, vehicle.TorqueLimits[2].Gear); + Assert.AreEqual(1900, vehicle.TorqueLimits[2].MaxTorque.Value()); + + var components = inputDataProvider.Vehicle.Components; + + TestEngineDataPIFType(components.EngineInputData); + + TestTransmissionDataPIFType(components.GearboxInputData); + + Assert.IsNull(components.TorqueConverterInputData); + + TestAngledrive(components.AngledriveInputData); + + Assert.IsNull(components.RetarderInputData); + + TestAxlegear(components.AxleGearInputData); + + TestAxleWheels(components.AxleWheels); + + TestAuxiliaries(components.BusAuxiliaries); + + TestPneumaticSystem(components.BusAuxiliaries.PneumaticSupply, + components.BusAuxiliaries.PneumaticConsumers); + + TestHVAC(components.BusAuxiliaries.HVACAux); + + TestResultDataSignature(inputDataProvider.ResultDataHash); + + TestResultData(inputDataProvider.ResultsInputData); + + TestApplicationInformation(inputDataProvider.ApplicationInformation); + + TestSignature(inputDataProvider.ManufacturerHash); + } + + + private void TestEngineDataPIFType(IEngineDeclarationInputData engine) + { + Assert.IsNotNull(engine); + Assert.AreEqual("Generic Engine Manufacturer", engine.Manufacturer); + Assert.AreEqual("Generic 40t Long Haul Truck Engine", engine.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", engine.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), engine.Date); + Assert.AreEqual("VectoEngine x.y", engine.AppVersion); + Assert.AreEqual(12730.SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(), engine.Displacement);//12730 + Assert.AreEqual(2200, engine.RatedSpeedDeclared.AsRPM); + Assert.AreEqual(380000, engine.RatedPowerDeclared.Value()); + Assert.AreEqual(2400, engine.MaxTorqueDeclared.Value()); + + Assert.IsTrue(engine.WHRType == WHRType.None); + + Assert.IsNotNull(engine.EngineModes); + Assert.AreEqual(1, engine.EngineModes.Count); + Assert.AreEqual(560, engine.EngineModes[0].IdleSpeed.AsRPM); + + var loadCurve = engine.EngineModes[0].FullLoadCurve; + Assert.AreEqual(10, loadCurve.Rows.Count); + Assert.AreEqual(3, loadCurve.Columns.Count); + Assert.AreEqual(FullLoadCurveReader.Fields.EngineSpeed, loadCurve.Columns[0].Caption); + Assert.AreEqual(FullLoadCurveReader.Fields.TorqueFullLoad, loadCurve.Columns[1].Caption); + Assert.AreEqual(FullLoadCurveReader.Fields.TorqueDrag, loadCurve.Columns[2].Caption); + + var startRow = 0; + Assert.IsTrue(CheckLoadCurveEntry("560.00", "1180.00", "-149.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("600.00", "1282.00", "-148.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("800.00", "1791.00", "-149.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("1000.00", "2300.00", "-160.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("1200.00", "2300.00", "-179.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("1400.00", "2300.00", "-203.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("1600.00", "2079.00", "-235.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("1800.00", "1857.00", "-264.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("2000.00", "1352.00", "-301.00", loadCurve, ref startRow)); + Assert.IsTrue(CheckLoadCurveEntry("2100.00", "1100.00", "-320.00", loadCurve, ref startRow)); + + Assert.AreEqual(1, engine.EngineModes[0].Fuels.Count); + Assert.AreEqual(FuelType.DieselCI, engine.EngineModes[0].Fuels[0].FuelType); + } + + private void TestTransmissionDataPIFType(IGearboxDeclarationInputData transmission) + { + Assert.AreEqual("Generic Gearbox Manufacturer", transmission.Manufacturer); + Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", transmission.Model); + Assert.AreEqual(CertificationMethod.StandardValues, transmission.CertificationMethod); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", transmission.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T11:00:00Z").ToUniversalTime(), transmission.Date); + Assert.AreEqual("3.0.1", transmission.AppVersion); + Assert.AreEqual(GearboxType.AMT, transmission.Type); + + var gears = transmission.Gears; + Assert.IsNotNull(gears); + Assert.AreEqual(12, gears.Count); + + var currentGearEntry = 0; + + Assert.IsTrue(CheckGearEntry(14.930, 1900, 2000, 1, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(11.640, 1900, 2000, 2, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(9.020, null, 2000, 3, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(7.040, null, 2000, 4, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(5.640, null, 2000, 5, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(4.400, null, 2000, 6, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(3.390, null, 2000, 7, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(2.650, null, 2000, 8, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(2.050, null, 2000, 9, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(1.600, null, 2000, 10, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(1.280, null, 2000, 11, gears, ref currentGearEntry)); + Assert.IsTrue(CheckGearEntry(1.000, null, null, 12, gears, ref currentGearEntry)); + } + + private void TestAngledrive(IAngledriveInputData angeldrive) + { + Assert.IsNotNull(angeldrive); + Assert.AreEqual("Generic Gearbox Manufacturer", angeldrive.Manufacturer); + Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", angeldrive.Model); + Assert.AreEqual(CertificationMethod.StandardValues, angeldrive.CertificationMethod); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", angeldrive.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T11:00:00Z").ToUniversalTime(), angeldrive.Date); + Assert.AreEqual("3.0.1", angeldrive.AppVersion); + Assert.AreEqual(2.345, angeldrive.Ratio); + + Assert.IsNull(angeldrive.LossMap); + Assert.That(() => angeldrive.Efficiency, Throws.TypeOf<VectoException>()); + } + + private void TestAxlegear(IAxleGearInputData axelGear) + { + Assert.AreEqual("Generic Gearbox Manufacturer", axelGear.Manufacturer); + Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axelGear.Model); + Assert.AreEqual(CertificationMethod.StandardValues, axelGear.CertificationMethod); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", axelGear.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T11:00:00Z").ToUniversalTime(), axelGear.Date); + Assert.AreEqual("3.0.1", axelGear.AppVersion); + Assert.AreEqual(AxleLineType.SinglePortalAxle, axelGear.LineType); + Assert.AreEqual(2.590, axelGear.Ratio); + + Assert.IsNull(axelGear.LossMap); + Assert.That(() => axelGear.Efficiency, Throws.TypeOf<VectoException>()); + } + + private void TestAxleWheels(IAxlesDeclarationInputData axles) + { + Assert.AreEqual(2, axles.AxlesDeclaration.Count); + var axle1 = axles.AxlesDeclaration[0]; + var axle2 = axles.AxlesDeclaration[1]; + + Assert.AreEqual(AxleType.VehicleNonDriven, axle1.AxleType); + Assert.AreEqual(false, axle1.TwinTyres); + //Data Id ??!? + + var tyre1 = axle1.Tyre; + Assert.AreEqual("Generic Wheels Manufacturer", tyre1.Manufacturer); + Assert.AreEqual("Generic Wheel", tyre1.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", tyre1.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T14:00:00Z").ToUniversalTime(), tyre1.Date); + Assert.AreEqual("Tyre Generation App 1.0", tyre1.AppVersion); + Assert.AreEqual("315/70 R22.5", tyre1.Dimension); + Assert.AreEqual(0.0055, tyre1.RollResistanceCoefficient); + Assert.AreEqual(31300, tyre1.TyreTestLoad.Value());//85% of the maximum tyre payload + + Assert.AreEqual("#WHL-5432198760-315-70-R22.5", tyre1.DigestValue.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", tyre1.DigestValue.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", tyre1.DigestValue.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", tyre1.DigestValue.DigestMethod); + Assert.AreEqual("4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=", tyre1.DigestValue.DigestValue); + + var tyre2 = axle2.Tyre; + Assert.AreEqual("Generic Wheels Manufacturer", tyre2.Manufacturer); + Assert.AreEqual("Generic Wheel", tyre2.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", tyre2.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-01-11T14:00:00Z").ToUniversalTime(), tyre2.Date); + Assert.AreEqual("Tyre Generation App 1.0", tyre2.AppVersion); + Assert.AreEqual("315/70 R22.5", tyre2.Dimension); + Assert.AreEqual(0.0063, tyre2.RollResistanceCoefficient); + Assert.AreEqual(31300, tyre2.TyreTestLoad.Value()); + + Assert.AreEqual("#WHL-5432198760-315-70-R22.5", tyre2.DigestValue.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", tyre2.DigestValue.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", tyre2.DigestValue.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", tyre2.DigestValue.DigestMethod); + Assert.AreEqual("KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=", tyre2.DigestValue.DigestValue); + } + + private void TestAuxiliaries(IBusAuxiliariesDeclarationData auxiliaries) + { + Assert.AreEqual("Hydraulic driven - Constant displacement pump", auxiliaries.FanTechnology); + Assert.AreEqual(1, auxiliaries.SteeringPumpTechnology.Count); + Assert.AreEqual("Variable displacement elec. controlled", auxiliaries.SteeringPumpTechnology[0]); + + Assert.AreEqual(1, auxiliaries.ElectricSupply.Alternators.Count); + Assert.AreEqual("default", auxiliaries.ElectricSupply.Alternators[0].Technology); + Assert.AreEqual(1.0000, auxiliaries.ElectricSupply.Alternators[0].Ratio); + Assert.AreEqual(false, auxiliaries.ElectricSupply.SmartElectrics); + + Assert.AreEqual(2, auxiliaries.ElectricSupply.ResultCards.Idle.Count); + Assert.AreEqual(0.00, auxiliaries.ElectricSupply.ResultCards.Idle[0].Current.Value()); + Assert.AreEqual(0.00, auxiliaries.ElectricSupply.ResultCards.Idle[0].SmartCurrent.Value()); + Assert.AreEqual(100.00, auxiliaries.ElectricSupply.ResultCards.Idle[1].Current.Value()); + Assert.AreEqual(120.00, auxiliaries.ElectricSupply.ResultCards.Idle[1].SmartCurrent.Value()); + + Assert.AreEqual(2, auxiliaries.ElectricSupply.ResultCards.Traction.Count); + Assert.AreEqual(0.00, auxiliaries.ElectricSupply.ResultCards.Traction[0].Current.Value()); + Assert.AreEqual(0.00, auxiliaries.ElectricSupply.ResultCards.Traction[0].SmartCurrent.Value()); + Assert.AreEqual(100.00, auxiliaries.ElectricSupply.ResultCards.Traction[1].Current.Value()); + Assert.AreEqual(120.00, auxiliaries.ElectricSupply.ResultCards.Traction[1].SmartCurrent.Value()); + + Assert.AreEqual(2, auxiliaries.ElectricSupply.ResultCards.Overrun.Count); + Assert.AreEqual(0.00, auxiliaries.ElectricSupply.ResultCards.Overrun[0].Current.Value()); + Assert.AreEqual(0.00, auxiliaries.ElectricSupply.ResultCards.Overrun[0].SmartCurrent.Value()); + Assert.AreEqual(100.00, auxiliaries.ElectricSupply.ResultCards.Overrun[1].Current.Value()); + Assert.AreEqual(120.00, auxiliaries.ElectricSupply.ResultCards.Overrun[1].SmartCurrent.Value()); + } + + private void TestPneumaticSystem(IPneumaticSupplyDeclarationData supply, + IPneumaticConsumersDeclarationData consumers) + { + Assert.AreEqual("Small", supply.CompressorSize); + Assert.AreEqual("none", supply.Clutch); + Assert.AreEqual(1.000, supply.Ratio); + Assert.AreEqual(false, supply.SmartAirCompression); + Assert.AreEqual(false, supply.SmartRegeneration); + + Assert.AreEqual(ConsumerTechnology.Pneumatically, consumers.AdBlueDosing); + Assert.AreEqual(ConsumerTechnology.Mechanically, consumers.AirsuspensionControl); + Assert.AreEqual(ConsumerTechnology.Pneumatically, consumers.DoorDriveTechnology); + } + + private void TestHVAC(IHVACBusAuxiliariesDeclarationData hvac) + { + Assert.AreEqual(true, hvac.AdjustableCoolantThermostat); + Assert.AreEqual(true, hvac.EngineWasteGasHeatExchanger); + } + + private void TestResultDataSignature(DigestData resultDataSignature) + { + Assert.AreEqual("#MRF-VEH-1234567890", resultDataSignature.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", resultDataSignature.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", resultDataSignature.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", resultDataSignature.DigestMethod); + Assert.AreEqual("4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=", resultDataSignature.DigestValue); + } + + private void TestResultData(IResultsInputData resultsInputData) + { + Assert.AreEqual("success", resultsInputData.Status); + Assert.AreEqual(4, resultsInputData.Results.Count); + + var result = resultsInputData.Results[0]; + Assert.AreEqual("success", result.ResultStatus); + Assert.AreEqual("P31SD", result.VehicleGroup); + Assert.AreEqual("Regional Delivery", result.Mission); + + TestSimulationParameter(8810, 920, 20, "single fuel mode", result.SimulationParameter); + + result = resultsInputData.Results[1]; + Assert.AreEqual("success", result.ResultStatus); + Assert.AreEqual("P31SD", result.VehicleGroup); + Assert.AreEqual("Regional Delivery", result.Mission); + + TestSimulationParameter(12490, 4600, 80, "single fuel mode", result.SimulationParameter); + + result = resultsInputData.Results[2]; + Assert.AreEqual("success", result.ResultStatus); + Assert.AreEqual("P31DD", result.VehicleGroup); + Assert.AreEqual("Urban Delivery", result.Mission); + + TestSimulationParameter(8810, 920, 20, "single fuel mode", result.SimulationParameter); + + result = resultsInputData.Results[3]; + Assert.AreEqual("success", result.ResultStatus); + Assert.AreEqual("P31DD", result.VehicleGroup); + Assert.AreEqual("Urban Delivery", result.Mission); + + TestSimulationParameter(12490, 4600, 80, "single fuel mode", result.SimulationParameter); + } + + private void TestApplicationInformation(IApplicationInformation applicationInformation) + { + Assert.AreEqual("Sample File Generator", applicationInformation.SimulationToolVersion); + Assert.AreEqual(DateTime.Parse("2017-01-01T00:00:00Z").ToUniversalTime(), applicationInformation.Date); + } + + private void TestSignature(DigestData manufacturerSignature) + { + Assert.AreEqual("#PIFHB-VEH-1234567890", manufacturerSignature.Reference); + Assert.AreEqual("urn:vecto:xml:2017:canonicalization", manufacturerSignature.CanonicalizationMethods[0]); + Assert.AreEqual("http://www.w3.org/2001/10/xml-exc-c14n#", manufacturerSignature.CanonicalizationMethods[1]); + Assert.AreEqual("http://www.w3.org/2001/04/xmlenc#sha256", manufacturerSignature.DigestMethod); + Assert.AreEqual("4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=", manufacturerSignature.DigestValue); + } + + private void TestSimulationParameter(double totalVehicleMass, double payload, int passengerCount, + string fuelMode, ISimulationParameter simulationParameter) + { + Assert.AreEqual(totalVehicleMass.SI<Kilogram>(), simulationParameter.TotalVehicleMass); + Assert.AreEqual(payload.SI<Kilogram>(), simulationParameter.Payload); + Assert.AreEqual(passengerCount, simulationParameter.PassengerCount); + Assert.AreEqual(fuelMode, simulationParameter.FuelMode); + } + + private bool CheckLoadCurveEntry(string engineSpeed, string maxTorque, string dragTorque, TableData loadCurve, ref int currentRow) + { + var result = engineSpeed == loadCurve.Rows[currentRow][0].ToString() && + maxTorque == loadCurve.Rows[currentRow][1].ToString() && + dragTorque == loadCurve.Rows[currentRow][2].ToString(); + + currentRow++; + return result; + } + + + private bool CheckGearEntry(double? ratio, double? maxTorque, double? maxSpeed, int gearNumber, IList<ITransmissionInputData> gears, ref int currentEntry) + { + var currentMaxTorque = maxTorque?.SI<NewtonMeter>(); + var currentMaxSpeed = maxSpeed?.RPMtoRad(); + + var result = gears[currentEntry].Gear == gearNumber && + gears[currentEntry].Ratio == ratio && + gears[currentEntry].MaxTorque == currentMaxTorque && + gears[currentEntry].MaxInputSpeed == currentMaxSpeed; + + currentEntry++; + return result; + } + } +}