From bc895d2682380e5a33e704d3599881740ba3e42b Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 3 Apr 2019 15:49:02 +0200 Subject: [PATCH] refactoring: adding engineering xml schema, engineering xml reader and engineering xml writer --- VECTO/GUI/GearboxForm.vb | 36 +- VECTO/GUI/MainForm.vb | 4 +- VECTO/GUI/VectoJobForm.vb | 2 +- VECTO/GUI/XMLExportJobDialog.vb | 10 +- VECTO/Input Files/Gearbox.vb | 26 +- VECTO/Input Files/VectoEPTPJob.vb | 9 + VECTO/Input Files/VectoJob.vb | 22 +- VECTO/OutputData/JSONFileWriter.vb | 32 +- .../VectoCommon/InputData/DataSourceType.cs | 11 +- .../InputData/DeclarationInputData.cs | 9 +- .../InputData/EngineeringInputData.cs | 56 +- .../InputData/IInputDataProvider.cs | 5 +- .../VectoCommon/Models/VehicleCategory.cs | 1 + .../OutputData/IOutputFileWriter.cs | 2 +- .../Resources/XMLNames.Designer.cs | 84 ++- .../VectoCommon/Resources/XMLNames.resx | 15 + VectoConsole/Program.cs | 2 +- .../InputData/FileIO/JSON/JSONGearboxData.cs | 2 +- .../InputData/FileIO/JSON/JSONInputData.cs | 22 +- .../Declaration/DataProvider/XMLGearData.cs | 19 +- .../Factory/IDeclarationInjectFactory.cs | 2 +- .../Reader/Impl/XMLComponentReader.cs | 2 +- .../Reader/Impl/XMLDeclarationInputReader.cs | 2 +- .../XMLDeclarationReaderInjectModule.cs | 5 - ...ractEngineeringXMLComponentDataProvider.cs | 216 ------- .../AbstractCommonComponentType.cs | 74 +++ ...actEngineeringXMLComponentDataProvider.cs} | 135 ++-- .../AbstractVehicleEngineeringType.cs | 9 + .../DataProvider/AbstractXMLType.cs | 81 +++ .../DataProvider/XMLCyclesDataProvider.cs | 78 +++ .../DataProvider/XMLDriverAcceleration.cs | 48 ++ .../XMLEngineeringAirdragDataProvider.cs | 104 +++ .../XMLEngineeringAngledriveDataProvider.cs | 96 +++ .../XMLEngineeringAuxiliariesDataProvider.cs | 193 ++++++ .../XMLEngineeringAxlegearDataProvider.cs | 109 ++++ .../XMLEngineeringAxlesDataProvider.cs | 238 +++++++ .../XMLEngineeringDriverDataProvider.cs | 70 ++ .../XMLEngineeringDriverLookAhead.cs | 96 +++ .../XMLEngineeringEngineDataProvider.cs | 214 +++++++ .../XMLEngineeringGearboxDataProvider.cs | 238 +++++++ .../XMLEngineeringGearshiftData.cs | 128 ++++ .../XMLEngineeringInputDataProvider.cs | 72 +++ .../XMLEngineeringJobInputDataProvider.cs | 106 +++ .../DataProvider/XMLEngineeringOverspeed.cs | 58 ++ .../XMLEngineeringRetarderDataProvider.cs | 95 +++ ...LEngineeringTorqueConverterDataProvider.cs | 92 +++ ...ngineeringVehicleComponentsDataProvider.cs | 104 +++ .../XMLEngineeringVehicleDataProvider.cs | 304 +++++++++ .../XMLTyreEngineeringDataProvider.cs | 72 +++ .../Factory/IEngineeringInjectFactory.cs | 13 - .../IEngineeringReaderInjectFactory.cs | 77 +++ .../XML/Engineering/IXMLComponentsReader.cs | 38 ++ .../XML/Engineering/IXMLDriverDataReader.cs | 16 + .../Engineering/IXMLEngineeringInputReader.cs | 3 +- .../XML/Engineering/IXMLJobDataReader.cs | 13 + .../Engineering/Interfaces/IXMLAirdragData.cs | 6 + .../Interfaces/IXMLAngledriveData.cs | 6 + .../Interfaces/IXMLAuxiliairesData.cs | 9 + .../Interfaces/IXMLAuxiliaryData.cs | 6 + .../Interfaces/IXMLAxleEngineeringData.cs | 9 + .../Interfaces/IXMLAxlegearData.cs | 6 + .../Engineering/Interfaces/IXMLAxlesData.cs | 9 + .../Interfaces/IXMLCyclesDataProvider.cs | 10 + .../Interfaces/IXMLDriverAcceleration.cs | 9 + .../Engineering/Interfaces/IXMLEngineData.cs | 6 + .../Interfaces/IXMLEngineeringDriverData.cs | 9 + .../IXMLEngineeringGearshiftData.cs | 7 + .../Interfaces/IXMLEngineeringInputData.cs | 2 +- .../Interfaces/IXMLEngineeringJobInputData.cs | 11 + .../IXMLEngineeringVehicleComponentsData.cs | 8 + .../Interfaces/IXMLEngineeringVehicleData.cs | 18 + .../Engineering/Interfaces/IXMLGearData.cs | 6 + .../Engineering/Interfaces/IXMLGearboxData.cs | 9 + .../Interfaces/IXMLLookaheadData.cs | 5 + .../Interfaces/IXMLOverspeedData.cs | 8 + .../Interfaces/IXMLRetarderData.cs | 6 + .../Interfaces/IXMLTorqueconverterData.cs | 6 + .../Engineering/Interfaces/IXMLTyreData.cs | 6 + .../XMLEngineeringReaderTestOverrides.cs | 28 + .../XMLEngineeringReaderV07InjectModule.cs | 84 +++ .../XMLEngineeringReaderV10InjectModule.cs | 86 +++ .../Reader/AbstractExternalResourceReader.cs | 90 +++ .../Reader/XMLComponentsEngineeringReader.cs | 268 ++++++++ .../Engineering/Reader/XMLDriverDataReader.cs | 125 ++++ .../Reader/XMLEngineeringInputReader.cs | 64 ++ .../Engineering/Reader/XMLJobDataReader.cs | 69 ++ .../XMLEngineeringAirdragDataProvider.cs | 73 --- .../XMLEngineeringAngledriveDataProvider.cs | 73 --- .../XMLEngineeringAuxiliaryDataProvider.cs | 139 ---- .../XMLEngineeringAxlegearDataProvider.cs | 77 --- .../XMLEngineeringDriverDataProvider.cs | 192 ------ .../XMLEngineeringEngineDataProvider.cs | 144 ----- .../XMLEngineeringGearboxDataProvider.cs | 174 ----- .../XMLEngineeringInputDataProvider.cs | 201 ------ .../XMLEngineeringJobInputDataProvider.cs | 260 -------- .../XMLEngineeringReaderInjectModule.cs | 35 + ...LEngineeringTorqueConverterDataProvider.cs | 111 ---- .../XMLEngineeringVehicleDataProvider.cs | 435 ------------- .../FileIO/XML/XMLInputDataNinjectModule.cs | 22 + .../VectoCore/InputData/Impl/InputData.cs | 17 + .../EngineeringDataAdapter.cs | 26 +- .../EngineeringModeVectoRunDataFactory.cs | 5 +- .../Models/Simulation/ISimulatorFactory.cs | 24 + .../Simulation/ISimulatorFactoryFactory.cs | 13 + .../Models/Simulation/Impl/JobContainer.cs | 2 +- .../Simulation/Impl/SimulatorFactory.cs | 4 +- .../SimulationFactoryNinjectModule.cs | 86 +++ .../VectoCore/Ninject/VectoNinjectModule.cs | 31 +- .../Factory/EngineeringWriterFactory.cs | 106 +++ .../IEngineeringWriterInjectFactory.cs | 10 + .../IXMLEngineeringComponentWriter.cs | 65 ++ .../Interfaces/IXMLEngineeringEngineWriter.cs | 4 + .../Interfaces/IXMLEngineeringJobWriter.cs | 13 + .../Interfaces/IXMLEngineeringWriter.cs | 29 + .../XMLEngineeringWriterTestOverrides.cs | 26 + .../XMLEngineeringWriterV10InjectModule.cs | 86 +++ .../Writer/AbstractComponentWriter.cs | 171 +++++ .../DriverData/XMLAccelerationDataWriter.cs | 64 ++ .../XMLEngineeringLookaheadDataWriter.cs | 74 +++ .../XMLEngineeringOverspeedDataWriter.cs | 53 ++ .../DriverData/XMLShiftParmeterDataWriter.cs | 58 ++ .../Writer/XMLEngineeringADASWriterV10.cs | 35 + .../Writer/XMLEngineeringAirdragWriter.cs | 69 ++ .../Writer/XMLEngineeringAngledriveWriter.cs | 61 ++ .../Writer/XMLEngineeringAuxiliariesWriter.cs | 22 + .../Writer/XMLEngineeringAuxiliaryWriter.cs | 22 + .../Writer/XMLEngineeringAxleWriter.cs | 113 ++++ .../Writer/XMLEngineeringAxlegearWriter.cs | 62 ++ .../Writer/XMLEngineeringAxlesWriter.cs | 67 ++ .../Writer/XMLEngineeringComponentsWriter.cs | 122 ++++ .../Writer/XMLEngineeringDriverDataWriter.cs | 67 ++ .../Writer/XMLEngineeringEngineWriter.cs | 102 +++ .../Writer/XMLEngineeringGearDataWriter.cs | 80 +++ .../Writer/XMLEngineeringGearboxWriter.cs | 66 ++ .../Writer/XMLEngineeringJobWriter.cs | 128 ++++ .../Writer/XMLEngineeringRetarderWriter.cs | 52 ++ .../XMLEngineeringTorqueconverterWriter.cs | 60 ++ .../Writer/XMLEngineeringTyreWriter.cs | 56 ++ .../Writer/XMLEngineeringVehicleDataWriter.cs | 119 ++++ .../XML/Engineering/XMLEngineeringWriter.cs | 176 +++++ .../XMLEngineeringWriterInjectModule.cs | 36 ++ .../XML/Engineering/XMLWriterMapping.cs | 146 +++++ .../OutputData/XML/XMLEngineeringWriter.cs | 602 ------------------ .../Resources/XSD/VectoDeclarationJob.xsd | 1 + .../Resources/XSD/VectoDefinitions.xsd | 9 - .../XSD/VectoEngineeringComponent.1.0.xsd | 10 + .../XSD/VectoEngineeringComponent.xsd | 11 + .../VectoEngineeringDefinitions.1.0.TEST.xsd | 57 ++ .../XSD/VectoEngineeringDefinitions.xsd | 11 + .../XSD/VectoEngineeringInput.1.0.xsd | 5 - .../VectoCore/Resources/XSD/VectoInput.xsd | 10 - VectoCore/VectoCore/Utils/XMLDefinitions.cs | 18 +- VectoCore/VectoCore/Utils/XMLHelper.cs | 47 ++ VectoCore/VectoCore/Utils/XMLValidator.cs | 1 + VectoCore/VectoCore/VectoCore.csproj | 128 +++- .../VectoCoreTest/FileIO/JsonReadTest.cs | 18 +- .../VectoCoreTest/FileIO/JsonWriteTest.cs | 8 +- .../SampleJobEngineering1.0.xml | 148 +++++ .../SampleJobEngineering1.1.xml | 149 +++++ .../Utils/MockSimulationDataFactory.cs | 3 +- VectoCore/VectoCoreTest/VectoCoreTest.csproj | 6 + .../XML/XMLEngineeringInputRefTest.cs | 51 +- .../XML/XMLEngineeringInputSingleTest.cs | 340 +++++----- VectoCore/VectoCoreTest/XML/XMLWritingTest.cs | 32 +- VectoCore/VectoXML.spp | 67 +- 165 files changed, 7629 insertions(+), 3228 deletions(-) delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs rename VectoCore/VectoCore/InputData/FileIO/XML/Engineering/{XMLEngineeringRetarderDataProvider.cs => DataProvider/AbstractEngineeringXMLComponentDataProvider.cs} (55%) create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs create mode 100644 VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs create mode 100644 VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs create mode 100644 VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs delete mode 100644 VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs delete mode 100644 VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd delete mode 100644 VectoCore/VectoCore/Resources/XSD/VectoInput.xsd create mode 100644 VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml create mode 100644 VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml diff --git a/VECTO/GUI/GearboxForm.vb b/VECTO/GUI/GearboxForm.vb index b2344cd72b..56bfa2cb99 100644 --- a/VECTO/GUI/GearboxForm.vb +++ b/VECTO/GUI/GearboxForm.vb @@ -15,10 +15,12 @@ Imports System.IO Imports System.Linq Imports System.Windows.Forms.DataVisualization.Charting Imports System.Xml.Linq +Imports Ninject Imports TUGraz.VECTO.Input_Files Imports TUGraz.VectoCommon.InputData Imports TUGraz.VectoCommon.Models Imports TUGraz.VectoCommon.Utils +Imports TUGraz.VectoCore Imports TUGraz.VectoCore.InputData.FileIO.JSON Imports TUGraz.VectoCore.InputData.Impl Imports TUGraz.VectoCore.InputData.Reader @@ -28,6 +30,8 @@ Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox Imports TUGraz.VectoCore.OutputData.FileIO Imports TUGraz.VectoCore.OutputData.XML +Imports TUGraz.VectoCore.OutputData.XML.Engineering +Imports TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces Imports TUGraz.VectoCore.Utils ''' <summary> @@ -241,6 +245,7 @@ Public Class GearboxForm IEngineeringInputDataProvider) Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle Dim gearbox As IGearboxEngineeringInputData = vehicle.Components.GearboxInputData + Dim shiftParams As IGearshiftEngineeringInputData = TryCast(gearbox, IGearshiftEngineeringInputData) Dim axlegear As IAxleGearInputData = vehicle.Components.AxleGearInputData _vehicleCategory = vehicleCategory @@ -286,11 +291,11 @@ Public Class GearboxForm If(gear.MaxInputSpeed Is Nothing, "", gear.MaxInputSpeed.AsRPM.ToGUIFormat()))) Next - TbTqResv.Text = (gearbox.TorqueReserve * 100).ToGUIFormat() - TbMinTimeBetweenShifts.Text = gearbox.MinTimeBetweenGearshift.ToGUIFormat() - TbTqResvStart.Text = (gearbox.StartTorqueReserve * 100).ToGUIFormat() - TbStartSpeed.Text = gearbox.StartSpeed.ToGUIFormat() - TbStartAcc.Text = gearbox.StartAcceleration.ToGUIFormat() + TbTqResv.Text = (shiftParams.TorqueReserve * 100).ToGUIFormat() + TbMinTimeBetweenShifts.Text = shiftParams.MinTimeBetweenGearshift.ToGUIFormat() + TbTqResvStart.Text = (shiftParams.StartTorqueReserve * 100).ToGUIFormat() + TbStartSpeed.Text = shiftParams.StartSpeed.ToGUIFormat() + TbStartAcc.Text = shiftParams.StartAcceleration.ToGUIFormat() Dim torqueConverter As ITorqueConverterEngineeringInputData = gearbox.TorqueConverter If torqueConverter Is Nothing OrElse gearbox.Type.ManualTransmission() Then @@ -310,13 +315,13 @@ Public Class GearboxForm If(torqueConverter.ShiftPolygon Is Nothing, "", GetRelativePath(torqueConverter.ShiftPolygon.Source, basePath)) tbTCmaxSpeed.Text = If(torqueConverter.MaxInputSpeed Is Nothing, "", torqueConverter.MaxInputSpeed.AsRPM.ToGUIFormat()) - tbTCLUpshiftMinAcceleration.Text = torqueConverter.CLUpshiftMinAcceleration.ToGUIFormat() - tbTCCUpshiftMinAcceleration.Text = torqueConverter.CCUpshiftMinAcceleration.ToGUIFormat() + tbTCLUpshiftMinAcceleration.Text = shiftParams.CLUpshiftMinAcceleration.ToGUIFormat() + tbTCCUpshiftMinAcceleration.Text = shiftParams.CCUpshiftMinAcceleration.ToGUIFormat() End If - tbUpshiftMinAcceleration.Text = gearbox.UpshiftMinAcceleration.ToGUIFormat() - tbDownshiftAfterUpshift.Text = gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat() - tbUpshiftAfterDownshift.Text = gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat() + tbUpshiftMinAcceleration.Text = shiftParams.UpshiftMinAcceleration.ToGUIFormat() + tbDownshiftAfterUpshift.Text = shiftParams.DownshiftAfterUpshiftDelay.ToGUIFormat() + tbUpshiftAfterDownshift.Text = shiftParams.UpshiftAfterDownshiftDelay.ToGUIFormat() tbATShiftTime.Text = gearbox.PowershiftShiftTime.ToGUIFormat() @@ -999,8 +1004,10 @@ Public Class GearboxForm Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data, data) export.Save(Path.Combine(filePath, data.ModelName + ".xml")) Else - Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data, - data) + Dim kernel As IKernel = new StandardKernel(new VectoNinjectModule) + dim writer As IXMLEngineeringWriter = kernel.Get(of IXMLEngineeringWriter)() + writer.Configuration = new WriterConfiguration() With { .SingleFile = true, .BasePath = filePath } + Dim export As XDocument = writer.WriteComponent(TryCast(data, IGearboxEngineeringInputData)) export.Save(Path.Combine(filePath, data.ModelName + ".xml")) End If End Sub @@ -1020,7 +1027,10 @@ Public Class GearboxForm Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data) export.Save(Path.Combine(filePath, data.ModelName + ".xml")) Else - Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data) + Dim kernel As IKernel = new StandardKernel(new VectoNinjectModule) + dim writer As IXMLEngineeringWriter = kernel.Get(of IXMLEngineeringWriter)() + writer.Configuration = new WriterConfiguration() With { .SingleFile = true, .BasePath = filePath } + Dim export As XDocument = writer.WriteComponent(TryCast(data, IAxleGearInputData)) export.Save(Path.Combine(filePath, data.ModelName + ".xml")) End If End Sub diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb index b264c6a785..31a33ca2cd 100644 --- a/VECTO/GUI/MainForm.vb +++ b/VECTO/GUI/MainForm.vb @@ -973,7 +973,7 @@ Imports TUGraz.VectoCore.Utils Dim xmlInputReader as IXMLInputDataReader = kernel.Get(Of IXMLInputDataReader) Select Case rootNode Case XMLNames.VectoInputEngineering - input = New XMLEngineeringInputDataProvider(jobFile, True) + input = xmlInputReader.CreateEngineering(jobFile, True) Case XMLNames.VectoInputDeclaration input = xmlInputReader.CreateDeclaration(XmlReader.Create(jobFile), True) End Select @@ -2038,7 +2038,7 @@ Imports TUGraz.VectoCore.Utils Dim xmlInputReader as IXMLInputDataReader = kernel.Get(Of IXMLInputDataReader) Select Case rootNode Case XMLNames.VectoInputEngineering - input = New XMLEngineeringInputDataProvider(f, True) + input = xmlInputReader.CreateEngineering(f, True) Case XMLNames.VectoInputDeclaration input = xmlInputReader.CreateDeclaration(XmlReader.Create(f), True) End Select diff --git a/VECTO/GUI/VectoJobForm.vb b/VECTO/GUI/VectoJobForm.vb index 49d5d40ad3..1cd34fee5b 100644 --- a/VECTO/GUI/VectoJobForm.vb +++ b/VECTO/GUI/VectoJobForm.vb @@ -469,7 +469,7 @@ Public Class VectoJobForm Else 'VACC TbDesMaxFile.Text = - If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.Source, _basePath)) + If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.AccelerationCurve.Source, _basePath)) cboAdvancedAuxiliaries.Enabled = True Dim auxInput As IAuxiliariesEngineeringInputData = inputData.JobInputData.Vehicle.Components.AuxiliaryInputData diff --git a/VECTO/GUI/XMLExportJobDialog.vb b/VECTO/GUI/XMLExportJobDialog.vb index 66ad6efc85..4af8c8992a 100644 --- a/VECTO/GUI/XMLExportJobDialog.vb +++ b/VECTO/GUI/XMLExportJobDialog.vb @@ -1,9 +1,12 @@ Imports System.IO Imports System.Xml.Linq +Imports Ninject Imports TUGraz.VectoCommon.Exceptions Imports TUGraz.VectoCommon.InputData Imports TUGraz.VectoCommon.Models +Imports TUGraz.VectoCore Imports TUGraz.VectoCore.OutputData.XML +Imports TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces Public Class XMLExportJobDialog Private _mode As ExecutionMode @@ -58,8 +61,11 @@ Public Class XMLExportJobDialog If (engineeringData Is Nothing OrElse engineeringData.JobInputData().SavedInDeclarationMode) Then Throw New Exception("Input data is not in engineering mode!") End If - Dim document As XDocument = - New XMLEngineeringWriter(tbDestination.Text, cbSingleFile.Checked, tbVendor.Text).GenerateVectoJob(engineeringData) + + Dim kernel As IKernel = new StandardKernel(new VectoNinjectModule) + dim writer As IXMLEngineeringWriter = kernel.Get(of IXMLEngineeringWriter)() + writer.Configuration = new WriterConfiguration() With { .SingleFile = true, .BasePath = tbDestination.Text } + Dim document As XDocument =writer.Write(engineeringData) document.Save(Path.Combine(tbDestination.Text, engineeringData.JobInputData().JobName + ".xml")) MessageBox.Show("Successfully exported") Close() diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 67c38f2497..91610b8b7a 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -30,7 +30,7 @@ Imports TUGraz.VectoCore.Utils <CustomValidation(GetType(Gearbox), "ValidateGearbox")> Public Class Gearbox Implements IGearboxEngineeringInputData, IGearboxDeclarationInputData, IAxleGearInputData, - ITorqueConverterEngineeringInputData, ITorqueConverterDeclarationInputData + ITorqueConverterEngineeringInputData, ITorqueConverterDeclarationInputData, IGearshiftEngineeringInputData Private _myPath As String Private _filePath As String @@ -123,7 +123,7 @@ Public Class Gearbox Try Dim writer As JSONFileWriter = JSONFileWriter.Instance - writer.SaveGearbox(Me, Me, _filePath) + writer.SaveGearbox(Me, Me, Me, _filePath) Catch ex As Exception MsgBox("failed to write Gearbox file: " + ex.Message) Return False @@ -233,7 +233,7 @@ Public Class Gearbox End Try axlegearData = doa.CreateAxleGearData(gearbox) - gearboxData = doa.CreateGearboxData(gearbox, engine, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory) + gearboxData = doa.CreateGearboxData(gearbox, engine, gearbox, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory) End If Dim result As IList(Of ValidationResult) = @@ -416,14 +416,14 @@ Public Class Gearbox End Property Public ReadOnly Property CLUpshiftMinAcceleration As MeterPerSquareSecond _ - Implements ITorqueConverterEngineeringInputData.CLUpshiftMinAcceleration + Implements IGearshiftEngineeringInputData.CLUpshiftMinAcceleration Get Return TCLUpshiftMinAcceleration.SI(Of MeterPerSquareSecond)() End Get End Property Public ReadOnly Property CCUpshiftMinAcceleration As MeterPerSquareSecond _ - Implements ITorqueConverterEngineeringInputData.CCUpshiftMinAcceleration + Implements IGearshiftEngineeringInputData.CCUpshiftMinAcceleration Get Return TCCUpshiftMinAcceleration.SI(Of MeterPerSquareSecond)() End Get @@ -437,20 +437,20 @@ Public Class Gearbox End Property - Public ReadOnly Property TorqueReserve As Double Implements IGearboxEngineeringInputData.TorqueReserve + Public ReadOnly Property TorqueReserve As Double Implements IGearshiftEngineeringInputData.TorqueReserve Get Return TorqueResv / 100 End Get End Property Public ReadOnly Property StartAcceleration As MeterPerSquareSecond _ - Implements IGearboxEngineeringInputData.StartAcceleration + Implements IGearshiftEngineeringInputData.StartAcceleration Get Return StartAcc.SI(Of MeterPerSquareSecond)() End Get End Property - Public ReadOnly Property StartTorqueReserve As Double Implements IGearboxEngineeringInputData.StartTorqueReserve + Public ReadOnly Property StartTorqueReserve As Double Implements IGearshiftEngineeringInputData.StartTorqueReserve Get Return TorqueResvStart / 100 End Get @@ -464,14 +464,14 @@ Public Class Gearbox End Property Public ReadOnly Property DownshiftAferUpshiftDelay As Second _ - Implements IGearboxEngineeringInputData.DownshiftAfterUpshiftDelay + Implements IGearshiftEngineeringInputData.DownshiftAfterUpshiftDelay Get Return DownshiftAfterUpshift.SI(Of Second)() End Get End Property Public ReadOnly Property UpshiftAfterDownshiftDelay As Second _ - Implements IGearboxEngineeringInputData.UpshiftAfterDownshiftDelay + Implements IGearshiftEngineeringInputData.UpshiftAfterDownshiftDelay Get Return UpshiftAfterDownshift.SI(Of Second)() End Get @@ -485,7 +485,7 @@ Public Class Gearbox Public ReadOnly Property IGearboxEngineeringInputData_UpshiftMinAcceleration As MeterPerSquareSecond _ - Implements IGearboxEngineeringInputData.UpshiftMinAcceleration + Implements IGearshiftEngineeringInputData.UpshiftMinAcceleration Get Return UpshiftMinAcceleration.SI(Of MeterPerSquareSecond)() End Get @@ -493,14 +493,14 @@ Public Class Gearbox Public ReadOnly Property IGearboxEngineeringInputData_StartSpeed As MeterPerSecond _ - Implements IGearboxEngineeringInputData.StartSpeed + Implements IGearshiftEngineeringInputData.StartSpeed Get Return StartSpeed.SI(Of MeterPerSecond)() End Get End Property Public ReadOnly Property MinTimeBetweenGearshift As Second _ - Implements IGearboxEngineeringInputData.MinTimeBetweenGearshift + Implements IGearshiftEngineeringInputData.MinTimeBetweenGearshift Get Return ShiftTime.SI(Of Second)() End Get diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb index c1a771ad49..34aaaaede3 100644 --- a/VECTO/Input Files/VectoEPTPJob.vb +++ b/VECTO/Input Files/VectoEPTPJob.vb @@ -225,4 +225,13 @@ Public Class VectoVTPJob Public ReadOnly Property ComponentDigests As IDictionary(Of VectoComponents,IList(Of String)) Implements IManufacturerReport.ComponentDigests Public ReadOnly Property JobDigest As DigestData Implements IManufacturerReport.JobDigest + + Public ReadOnly Property DataSource As DataSource Implements IInputDataProvider.DataSource + Get + Dim retVal As DataSource = New DataSource() + retVal.SourceType = DataSourceType.JSONFile + retVal.SourceFile = FilePath + Return retVal + End Get + End Property End Class diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb index 206c942941..2058b786d8 100644 --- a/VECTO/Input Files/VectoJob.vb +++ b/VECTO/Input Files/VectoJob.vb @@ -230,7 +230,7 @@ Public Class VectoJob End Property - Public ReadOnly Property AccelerationCurve As TableData Implements IDriverEngineeringInputData.AccelerationCurve + Public ReadOnly Property AccelerationCurve As IDriverAccelerationData Implements IDriverEngineeringInputData.AccelerationCurve Get If String.IsNullOrWhiteSpace(_driverAccelerationFile.FullPath) Then Return Nothing If Not File.Exists(_driverAccelerationFile.FullPath) Then @@ -239,15 +239,16 @@ Public Class VectoJob RessourceHelper.ReadStream( DeclarationData.DeclarationDataResourcePrefix + ".VACC." + _driverAccelerationFile.OriginalPath + VectoCore.Configuration.Constants.FileExtensions.DriverAccelerationCurve) - Return _ + Return New DriverAccelerationInputData() With{ .AccelerationCurve = VectoCSVFile.ReadStream(cycleDataRes, source:=DeclarationData.DeclarationDataResourcePrefix + ".VACC." + _driverAccelerationFile.OriginalPath + VectoCore.Configuration.Constants.FileExtensions.DriverAccelerationCurve) + } Catch ex As Exception Return Nothing End Try End If - Return VectoCSVFile.Read(_driverAccelerationFile.FullPath) + Return New DriverAccelerationInputData() With{ .AccelerationCurve = VectoCSVFile.Read(_driverAccelerationFile.FullPath) } End Get End Property @@ -269,6 +270,11 @@ Public Class VectoJob End Get End Property + Public ReadOnly Property GearshiftInputData As IGearshiftEngineeringInputData Implements IDriverEngineeringInputData.GearshiftInputData + get + Return TryCast( New JSONComponentInputData(_gearboxFile.FullPath, Me).JobInputData.Vehicle.Components.GearboxInputData, IGearshiftEngineeringInputData) + End Get + End Property Public Property DesMaxFile(Optional ByVal original As Boolean = False) As String Get @@ -639,6 +645,16 @@ Public Class VectoJob Return Me End Get End Property + + Public ReadOnly Property DataSource As DataSource Implements IInputDataProvider.DataSource + Get + Dim retVal As DataSource = New DataSource() + retVal.SourceType = DataSourceType.JSONFile + retVal.SourceFile = FilePath + Return retVal + End Get + End Property + End Class diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb index 011cdff10c..24c525a75c 100644 --- a/VECTO/OutputData/JSONFileWriter.vb +++ b/VECTO/OutputData/JSONFileWriter.vb @@ -74,7 +74,7 @@ Public Class JSONFileWriter Return header End Function - Public Sub SaveGearbox(gbx As IGearboxEngineeringInputData, axl As IAxleGearInputData, filename As String) _ + Public Sub SaveGearbox(gbx As IGearboxEngineeringInputData, axl As IAxleGearInputData, gshift As IGearshiftEngineeringInputData, filename As String) _ Implements IOutputFileWriter.SaveGearbox 'Header @@ -117,11 +117,11 @@ Public Class JSONFileWriter ls.Add(gearDict) Next body.Add(JsonKeys.Gearbox_Gears, ls) - body.Add(JsonKeys.Gearbox_TorqueReserve, gbx.TorqueReserve*100) - body.Add(JsonKeys.Gearbox_ShiftTime, gbx.MinTimeBetweenGearshift.Value()) - body.Add(JsonKeys.Gearbox_StartTorqueReserve, gbx.StartTorqueReserve*100) - body.Add(JsonKeys.Gearbox_StartSpeed, gbx.StartSpeed.Value()) - body.Add(JsonKeys.Gearbox_StartAcceleration, gbx.StartAcceleration.Value()) + body.Add(JsonKeys.Gearbox_TorqueReserve, gshift.TorqueReserve*100) + body.Add(JsonKeys.Gearbox_ShiftTime, gshift.MinTimeBetweenGearshift.Value()) + body.Add(JsonKeys.Gearbox_StartTorqueReserve, gshift.StartTorqueReserve*100) + body.Add(JsonKeys.Gearbox_StartSpeed, gshift.StartSpeed.Value()) + body.Add(JsonKeys.Gearbox_StartAcceleration, gshift.StartAcceleration.Value()) body.Add(JsonKeys.Gearbox_GearboxType, gbx.Type.ToString()) Dim torqueConverter As ITorqueConverterEngineeringInputData = gbx.TorqueConverter @@ -135,14 +135,14 @@ Public Class JSONFileWriter torqueConverterDict.Add("ShiftPolygon", If (Not gbx.SavedInDeclarationMode AndAlso Not torqueConverter.ShiftPolygon Is Nothing, GetRelativePath(torqueConverter.ShiftPolygon.Source, Path.GetDirectoryName(filename)), "")) - torqueConverterDict.Add("CLUpshiftMinAcceleration", torqueConverter.CLUpshiftMinAcceleration.Value()) - torqueConverterDict.Add("CCUpshiftMinAcceleration", torqueConverter.CCUpshiftMinAcceleration.Value()) + torqueConverterDict.Add("CLUpshiftMinAcceleration", gshift.CLUpshiftMinAcceleration.Value()) + torqueConverterDict.Add("CCUpshiftMinAcceleration", gshift.CCUpshiftMinAcceleration.Value()) End If body.Add(JsonKeys.Gearbox_TorqueConverter, torqueConverterDict) - body.Add("DownshiftAfterUpshiftDelay", gbx.DownshiftAfterUpshiftDelay.Value()) - body.Add("UpshiftAfterDownshiftDelay", gbx.UpshiftAfterDownshiftDelay.Value()) - body.Add("UpshiftMinAcceleration", gbx.UpshiftMinAcceleration.Value()) + body.Add("DownshiftAfterUpshiftDelay", gshift.DownshiftAfterUpshiftDelay.Value()) + body.Add("UpshiftAfterDownshiftDelay", gshift.UpshiftAfterDownshiftDelay.Value()) + body.Add("UpshiftMinAcceleration", gshift.UpshiftMinAcceleration.Value()) body.Add("PowershiftShiftTime", gbx.PowershiftShiftTime.Value()) @@ -308,7 +308,7 @@ Public Class JSONFileWriter Dim driver As IDriverEngineeringInputData = input.DriverInputData If Not job.SavedInDeclarationMode Then - body.Add("VACC", GetRelativePath(driver.AccelerationCurve.Source, basePath)) + body.Add("VACC", GetRelativePath(driver.AccelerationCurve.AccelerationCurve.Source, basePath)) End If 'body.Add("StartStop", New Dictionary(Of String, Object) From { ' {"Enabled", driver.StartStop.Enabled}, @@ -370,10 +370,10 @@ Public Class JSONFileWriter Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object) body.Add("SavedInDeclMode", declarationmode) body.Add("DeclarationVehicle", GetRelativePath(job.Vehicle.DataSource.SourceFile, Path.GetDirectoryName(filename))) - if declarationmode Then - body.add("ManufacturerRecord", GetRelativePath(job.ManufacturerReportInputData.Source, Path.GetDirectoryName(filename))) - body.Add("Mileage", job.Mileage.ConvertToKiloMeter().Value) - End If + if declarationmode Then + body.add("ManufacturerRecord", GetRelativePath(job.ManufacturerReportInputData.Source, Path.GetDirectoryName(filename))) + body.Add("Mileage", job.Mileage.ConvertToKiloMeter().Value) + End If body.Add("FanPowerCoefficients", job.FanPowerCoefficents) body.Add("FanDiameter", job.FanDiameter.Value()) body.Add("Cycles", diff --git a/VectoCommon/VectoCommon/InputData/DataSourceType.cs b/VectoCommon/VectoCommon/InputData/DataSourceType.cs index 6aa6e157df..3a0efe5913 100644 --- a/VectoCommon/VectoCommon/InputData/DataSourceType.cs +++ b/VectoCommon/VectoCommon/InputData/DataSourceType.cs @@ -37,6 +37,15 @@ namespace TUGraz.VectoCommon.InputData CSVFile, JSONFile, Missing, - XMLFile + XMLFile, + XMLEmbedded + } + + public static class DataSourceTypeExtensions + { + public static bool IsXMLFormat(this DataSourceType dst) + { + return dst == DataSourceType.XMLFile || dst == DataSourceType.XMLEmbedded; + } } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 489934a670..fd072a3b0c 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -305,7 +305,8 @@ namespace TUGraz.VectoCommon.InputData AxleType AxleType { get; } ITyreDeclarationInputData Tyre { get; } - + + DataSource DataSource { get; } } public interface ITyreDeclarationInputData : IComponentInputData @@ -388,6 +389,8 @@ namespace TUGraz.VectoCommon.InputData /// cf. VECTO Input Parameters.xlsx /// </summary> TableData ShiftPolygon { get; } + + DataSource DataSource { get; } } public interface IAxleGearInputData : IComponentInputData @@ -506,12 +509,12 @@ namespace TUGraz.VectoCommon.InputData TableData CycleData { get; } } - public interface IDriverDeclarationInputData + public interface IDriverDeclarationInputData : IDriverModelData { bool SavedInDeclarationMode { get; } } - public interface IOverSpeedEcoRollDeclarationInputData + public interface IOverSpeedEcoRollDeclarationInputData : IDriverModelData { /// <summary> /// P015 diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs index 9b8e2c521e..095ab46ebf 100644 --- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs +++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs @@ -82,7 +82,9 @@ namespace TUGraz.VectoCommon.InputData } public interface IAdvancedDriverAssistantSystemsEngineering - { } + { + DataSource DataSource { get; } + } public interface IVehicleComponentsEngineering @@ -174,6 +176,8 @@ namespace TUGraz.VectoCommon.InputData /// cf. VECTO Input Parameters.xlsx /// </summary> KilogramSquareMeter Inertia { get; } + + Meter DynamicTyreRadius { get; } } public interface IGearboxEngineeringInputData : IGearboxDeclarationInputData @@ -190,6 +194,13 @@ namespace TUGraz.VectoCommon.InputData /// </summary> Second TractionInterruption { get; } + Second PowershiftShiftTime { get; } + + new ITorqueConverterEngineeringInputData TorqueConverter { get; } + } + + public interface IGearshiftEngineeringInputData : ITorqueConverterEngineeringShiftParameterInputData, IDriverModelData + { /// <summary> /// P086 /// cf. VECTO Input Parameters.xlsx @@ -239,9 +250,20 @@ namespace TUGraz.VectoCommon.InputData MeterPerSquareSecond UpshiftMinAcceleration { get; } - Second PowershiftShiftTime { get; } - new ITorqueConverterEngineeringInputData TorqueConverter { get; } + } + + public interface ITorqueConverterEngineeringShiftParameterInputData + { + /// <summary> + /// Min Acceleration after C->L upshifts. + /// </summary> + MeterPerSquareSecond CLUpshiftMinAcceleration { get; } + + /// <summary> + /// Min Acceleration after C->C upshifts. + /// </summary> + MeterPerSquareSecond CCUpshiftMinAcceleration { get; } } public interface ITorqueConverterEngineeringInputData : ITorqueConverterDeclarationInputData @@ -269,15 +291,6 @@ namespace TUGraz.VectoCommon.InputData PerSecond MaxInputSpeed { get; } - /// <summary> - /// Min Acceleration after C->L upshifts. - /// </summary> - MeterPerSquareSecond CLUpshiftMinAcceleration { get; } - - /// <summary> - /// Min Acceleration after C->C upshifts. - /// </summary> - MeterPerSquareSecond CCUpshiftMinAcceleration { get; } } public interface IEngineEngineeringInputData : IEngineDeclarationInputData @@ -306,6 +319,17 @@ namespace TUGraz.VectoCommon.InputData string AdvancedAuxiliaryFilePath { get; } } + public interface IDriverModelData + { + + } + + public interface IDriverAccelerationData : IDriverModelData + { + TableData AccelerationCurve { get; } + } + + public interface IDriverEngineeringInputData : IDriverDeclarationInputData { //new IStartStopEngineeringInputData StartStop { get; } @@ -316,9 +340,11 @@ namespace TUGraz.VectoCommon.InputData /// P009; P033, P034, P035 /// cf. VECTO Input Parameters.xlsx /// </summary> - TableData AccelerationCurve { get; } + IDriverAccelerationData AccelerationCurve { get; } ILookaheadCoastingInputData Lookahead { get; } + + IGearshiftEngineeringInputData GearshiftInputData { get; } } public interface IOverSpeedEcoRollEngineeringInputData : IOverSpeedEcoRollDeclarationInputData @@ -342,7 +368,7 @@ namespace TUGraz.VectoCommon.InputData MeterPerSecond UnderSpeed { get; } } - public interface ILookaheadCoastingInputData + public interface ILookaheadCoastingInputData : IDriverModelData { /// <summary> /// P019 @@ -414,5 +440,7 @@ namespace TUGraz.VectoCommon.InputData /// additional constant auxiliary load, similar to Padd; not specified in the cycle but as auxiliary /// </summary> Watt ConstantPowerDemand { get; } + + DataSource DataSource { get; } } } diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index 2397f81305..3b26742df8 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -35,7 +35,10 @@ using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCommon.InputData { - public interface IInputDataProvider {} + public interface IInputDataProvider + { + DataSource DataSource { get; } + } public interface IDeclarationInputDataProvider : IInputDataProvider { diff --git a/VectoCommon/VectoCommon/Models/VehicleCategory.cs b/VectoCommon/VectoCommon/Models/VehicleCategory.cs index 04b21f931e..f4927a6adc 100644 --- a/VectoCommon/VectoCommon/Models/VehicleCategory.cs +++ b/VectoCommon/VectoCommon/Models/VehicleCategory.cs @@ -35,6 +35,7 @@ namespace TUGraz.VectoCommon.Models { public enum VehicleCategory { + Unknown, RigidTruck, Tractor, CityBus, diff --git a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs index 53050dce43..8f3fd1c3d9 100644 --- a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs +++ b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs @@ -37,7 +37,7 @@ namespace TUGraz.VectoCommon.OutputData { void SaveEngine(IEngineEngineeringInputData eng, string filename); - void SaveGearbox(IGearboxEngineeringInputData gbx, IAxleGearInputData axl, string filename); + void SaveGearbox(IGearboxEngineeringInputData gbx, IAxleGearInputData axl, IGearshiftEngineeringInputData gshift, string filename); void SaveVehicle(IVehicleEngineeringInputData vehicle, IAirdragEngineeringInputData airdrag, IRetarderInputData retarder, diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index a5a5cd7776..0e6081e2eb 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -1,33 +1,12 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ namespace TUGraz.VectoCommon.Resources { using System; @@ -891,6 +870,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to PowershiftShiftTime. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_PowershiftShiftTime { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_PowershiftShiftTime", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to StartAcceleration. /// </summary> @@ -999,6 +987,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to FCCorrection. + /// </summary> + public static string Engine_FCCorrection { + get { + return ResourceManager.GetString("Engine_FCCorrection", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to FuelConsumptionMap. /// </summary> @@ -1980,6 +1977,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to CCUpshiftMinAcceleration. + /// </summary> + public static string TorqueConverter_CCUpshiftMinAcceleration { + get { + return ResourceManager.GetString("TorqueConverter_CCUpshiftMinAcceleration", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Characteristics. /// </summary> @@ -1998,6 +2004,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to CLUpshiftMinAcceleration. + /// </summary> + public static string TorqueConverter_CLUpshiftMinAcceleration { + get { + return ResourceManager.GetString("TorqueConverter_CLUpshiftMinAcceleration", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Inertia. /// </summary> @@ -2007,6 +2022,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to MaxInputSpeed. + /// </summary> + public static string TorqueConverter_MaxInputSpeed { + get { + return ResourceManager.GetString("TorqueConverter_MaxInputSpeed", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to ReferenceRPM. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 60057706b2..4e3ede03d8 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1038,4 +1038,19 @@ <data name="Report_Results" xml:space="preserve"> <value>Results</value> </data> + <data name="Engine_FCCorrection" xml:space="preserve"> + <value>FCCorrection</value> + </data> + <data name="DriverModel_ShiftStrategyParameters_PowershiftShiftTime" xml:space="preserve"> + <value>PowershiftShiftTime</value> + </data> + <data name="TorqueConverter_CLUpshiftMinAcceleration" xml:space="preserve"> + <value>CLUpshiftMinAcceleration</value> + </data> + <data name="TorqueConverter_CCUpshiftMinAcceleration" xml:space="preserve"> + <value>CCUpshiftMinAcceleration</value> + </data> + <data name="TorqueConverter_MaxInputSpeed" xml:space="preserve"> + <value>MaxInputSpeed</value> + </data> </root> \ No newline at end of file diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs index fd63938efe..3cd48720a2 100644 --- a/VectoConsole/Program.cs +++ b/VectoConsole/Program.cs @@ -214,7 +214,7 @@ Examples: var rootNode = xDocument == null ? "" : xDocument.Root.Name.LocalName; switch (rootNode) { case "VectoInputEngineering": - dataProvider = new XMLEngineeringInputDataProvider(file, true); + dataProvider = inputReader.CreateEngineering(file, true); break; case "VectoInputDeclaration": dataProvider = inputReader.CreateDeclaration(XmlReader.Create(file), true); diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs index 017b4c151e..9592e12015 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs @@ -116,7 +116,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON /// } // ReSharper disable once InconsistentNaming public class JSONGearboxDataV5 : JSONFile, IGearboxEngineeringInputData, IAxleGearInputData, - ITorqueConverterEngineeringInputData + ITorqueConverterEngineeringInputData, IGearshiftEngineeringInputData { public JSONGearboxDataV5(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, tolerateMissing) {} diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index 075ea9fdd6..61fde26b14 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -152,11 +152,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON Gearbox = ReadGearbox(); AxleGear = Gearbox as IAxleGearInputData; TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData; + GearshiftInputData = Gearbox as IGearshiftEngineeringInputData; VehicleData = ReadVehicle(); } public IGearboxEngineeringInputData Gearbox { get; internal set; } + + public IGearshiftEngineeringInputData GearshiftInputData { get; internal set; } + public IAxleGearInputData AxleGear { get; internal set; } public ITorqueConverterEngineeringInputData TorqueConverter { get; internal set; } public IEngineEngineeringInputData Engine { get; internal set; } @@ -462,7 +466,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } } - public virtual TableData AccelerationCurve + public virtual IDriverAccelerationData AccelerationCurve { [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", @@ -476,22 +480,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } try { - return ReadTableData(acceleration.Value<string>(), "DriverAccelerationCurve"); + return new DriverAccelerationInputData() { + AccelerationCurve = ReadTableData(acceleration.Value<string>(), "DriverAccelerationCurve") + }; } catch (VectoException e) { Log.Warn("Could not find file for acceleration curve. Trying lookup in declaration data."); try { var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC." + acceleration.Value<string>() + Constants.FileExtensions.DriverAccelerationCurve; - return VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName); + return new DriverAccelerationInputData() { + AccelerationCurve = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName) + }; } catch (Exception) { if (!TolerateMissing) { throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e); } - return new TableData( - Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix, - DataSourceType.Missing); + return new DriverAccelerationInputData() { + AccelerationCurve = new TableData( + Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix, + DataSourceType.Missing) + }; } } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs index bec7194a75..aa5ef90b44 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs @@ -10,9 +10,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { public abstract class XMLAbstractGearData : AbstractXMLType { + protected TableData _lossmap; - protected XMLAbstractGearData(XmlNode gearNode) : base(gearNode) { } + protected XMLAbstractGearData(XmlNode gearNode, string sourceFile) : base(gearNode) + { + SourceFile = sourceFile; + } + + public string SourceFile { get; } #region Implementation of ITransmissionInputData @@ -58,6 +64,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return null; } } + + #endregion } @@ -65,6 +73,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider { public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10; - public XMLGearDataV10(XmlNode gearNode) : base(gearNode) { } + protected DataSource _dataSource; + + public XMLGearDataV10(XmlNode gearNode, string sourceFile) : base(gearNode, sourceFile) { } + + public virtual DataSource DataSource + { + get { return _dataSource ?? (_dataSource = new DataSource() { SourceFile = SourceFile, SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(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 0b60097407..cfa40aac06 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs @@ -33,7 +33,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLGearboxDeclarationInputData CreateGearboxData( string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile); - IXMLGearData CreateGearData(string version, XmlNode gearNode); + IXMLGearData CreateGearData(string version, XmlNode gearNode, string sourceFile); IXMLTorqueConverterDeclarationInputData CreateTorqueconverterData( 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 a8c6f3afc8..8a2e710ed0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs @@ -76,7 +76,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl { var version = XMLHelper.GetSchemaVersion(gearNode); try { - return Factory.CreateGearData(version, gearNode); + return Factory.CreateGearData(version, gearNode, ParentComponent.DataSource.SourceFile); } catch (Exception e) { var gearNumber = gearNode.Attributes?.GetNamedItem(XMLNames.Gearbox_Gear_GearNumber_Attr).InnerText; throw new VectoException( 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 fb6d3a5bfc..a39bd6c35f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs @@ -38,7 +38,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl private IDeclarationJobInputData JobCreator(string version, XmlNode node, string arg3) { - var job = Factory.CreateJobData(version, BaseNode, InputData, InputData.DataSource.SourceFile); + var job = Factory.CreateJobData(version, BaseNode, InputData, (InputData as IXMLResource).DataSource.SourceFile); var jobNode = job.Reader = Factory.CreateJobReader(version, job, JobNode, VerifyXML); return job; diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs index 91462f4e5b..8f963b9922 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs @@ -16,15 +16,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration { Bind<IDeclarationInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider()); - Bind<IXMLInputDataReader>().To<XMLInputDataFactory>(); - Kernel?.Load(new INinjectModule[] { new XMLDeclarationInputDataV10InjectModule(), }); - // dummy - Bind<IEngineeringInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider()); - #endregion } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs deleted file mode 100644 index aff2437d3f..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs +++ /dev/null @@ -1,216 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.XPath; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class AbstractEngineeringXMLComponentDataProvider //: AbstractDeclarationXMLComponentDataProvider - { - protected readonly XMLEngineeringInputDataProvider InputData; - - protected XPathNavigator Navigator; - - protected readonly string FSBasePath; - - protected string XBasePath = ""; - protected XmlNamespaceManager Manager; - - - protected readonly string VehiclePath; - - protected XPathHelper Helper; - - protected readonly XmlDocument XMLDocument; - - protected AbstractEngineeringXMLComponentDataProvider( - XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument document, string xmlBasePath, string fsBasePath) - { - XMLDocument = document; - XBasePath = xmlBasePath; - FSBasePath = fsBasePath; - InputData = xmlEngineeringJobInputDataProvider; - Navigator = document.CreateNavigator(); - Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable()); - Helper = new XPathHelper(ExecutionMode.Engineering); - Helper.AddNamespaces(Manager); - - SourceType = DataSourceType.Embedded; - } - - public virtual DataSource DataSource - { - get { return new DataSource() { SourceFile = Source, SourceVersion = SourceVersion, SourceType = SourceType }; } - } - public string Source { get { return InputData.Source; } } - public DataSourceType SourceType { get; protected set; } - - protected string SourceVersion { get { return XMLHelper.GetVersionFromNamespaceUri(SchemaNamespace); } } - - protected string SchemaNamespace { get { return null; } } - - public bool SavedInDeclarationMode - { - get { return false; } - } - - public string Manufacturer - { - get { return GetElementValue(XMLNames.Component_Manufacturer); } - } - - public string Model - { - get { return GetElementValue(XMLNames.Component_Model); } - } - - - public string Date - { - get { return GetElementValue(XMLNames.Component_Date); } - } - - public DigestData DigestValue - { - get { return null; } - } - - public string CertificationNumber - { - get { return "N.A."; } - } - - public CertificationMethod CertificationMethod - { - get { return CertificationMethod.NotCertified; } - } - - - protected TableData ReadCSVResourceFile(string relPath) - { - if (!ElementExists(Helper.Query(relPath, ExtCsvResourceTag))) { - throw new VectoException("Failed to read {0} resource", relPath); - } - var file = - GetAttributeValue( - Helper.Query(relPath, ExtCsvResourceTag), XMLNames.ExtResource_File_Attr); - var fullFilename = Path.Combine(FSBasePath ?? "", file); - if (file == null || !File.Exists(fullFilename)) { - throw new VectoException("{1} file not found: {0}", file, relPath); - } - return VectoCSVFile.Read(fullFilename); - } - - protected string ExtCsvResourceTag - { - get { - return Helper.Query(Helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_Type_Attr, - XMLNames.ExtResource_Type_Value_CSV)); - } - } - - protected bool ElementExists(string relativePath) - { - var path = Helper.Query(XBasePath, relativePath.Any() ? relativePath : null); - - var node = Navigator.SelectSingleNode(path, Manager); - return node != null; - } - - protected string GetElementValue(string relativePath) - { - var path = Helper.Query(XBasePath, relativePath.Any() ? relativePath : null); - - var node = Navigator.SelectSingleNode(path, Manager); - if (node == null) { - throw new VectoException("Node {0} not found in input data", path); - } - return node.InnerXml; - } - - protected double GetDoubleElementValue(string relativePath) - { - return GetElementValue(relativePath).ToDouble(); - } - - protected string GetAttributeValue(string relativePath, string attrName) - { - var nodes = - Navigator.Select(string.IsNullOrWhiteSpace(relativePath) ? XBasePath : Helper.Query(XBasePath, relativePath), - Manager); - if (nodes.Count == 0) { - return null; - } - nodes.MoveNext(); - return nodes.Current.GetAttribute(attrName, ""); - } - - protected TableData ReadTableData(Dictionary<string, string> attributeMapping, string relativePath, - XPathNavigator origin = null) - { - var startNode = origin ?? Navigator.SelectSingleNode(XBasePath, Manager); - if (startNode == null) { - throw new VectoException("start node for base-path {0} not found!", XBasePath); - } - var table = new TableData(); - foreach (var entry in attributeMapping) { - if (startNode.Select(Helper.Query(relativePath, "@" + entry.Value), Manager).Count == 0) { - continue; - } - table.Columns.Add(entry.Key); - } - var nodes = startNode.Select(relativePath, Manager); - while (nodes.MoveNext()) { - var row = table.NewRow(); - foreach (var attribute in attributeMapping) { - if (nodes.Current.SelectSingleNode("@" + attribute.Value) != null) { - row[attribute.Key] = nodes.Current.GetAttribute(attribute.Value, ""); - } - } - table.Rows.Add(row); - } - - return table; - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs new file mode 100644 index 0000000000..d42a916167 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs @@ -0,0 +1,74 @@ +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + public abstract class AbstractXMLResource : AbstractXMLType, IXMLResource + { + protected string SourceFile; + + public AbstractXMLResource(XmlNode node, string source) : base(node) + { + SourceFile = source; + } + + public virtual DataSource DataSource + { + get { return new DataSource() { SourceFile = SourceFile, SourceVersion = SourceVersion, SourceType = SourceType }; } + } + + + protected string SourceVersion { get { return XMLHelper.GetVersionFromNamespaceUri(SchemaNamespace); } } + + protected abstract string SchemaNamespace { get;} + + protected abstract DataSourceType SourceType { get; } + } + + + public abstract class AbstractCommonComponentType : AbstractXMLResource + { + public AbstractCommonComponentType(XmlNode node, string source) : base(node, source) { } + + + public bool SavedInDeclarationMode + { + get { return false; } + } + + public string Manufacturer + { + get { return GetString(XMLNames.Component_Manufacturer); } + } + + public string Model + { + get { return GetString(XMLNames.Component_Model); } + } + + public string Date + { + get { return GetString(XMLNames.Component_Date); } + } + + public virtual CertificationMethod CertificationMethod + { + get { return CertificationMethod.NotCertified; } + } + + public virtual string CertificationNumber + { + get { return "N.A."; } + } + + public virtual DigestData DigestValue + { + get { return null; } + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractEngineeringXMLComponentDataProvider.cs similarity index 55% rename from VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringRetarderDataProvider.cs rename to VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractEngineeringXMLComponentDataProvider.cs index 4d5dea4f12..664e9911e2 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringRetarderDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractEngineeringXMLComponentDataProvider.cs @@ -1,68 +1,67 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Xml; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringRetarderDataProvider : AbstractEngineeringXMLComponentDataProvider, IRetarderInputData - { - public XMLEngineeringRetarderDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument retarderDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, retarderDocument, xmlBasePath, fsBasePath) {} - - public RetarderType Type - { - get { return InputData.VehicleData.RetarderType; } - } - - public double Ratio - { - get { return InputData.VehicleData.RetarderRatio; } - } - - public TableData LossMap - { - get - { - if (ElementExists(Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry))) { - return ReadTableData(AttributeMappings.RetarderLossmapMapping, - Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry)); - } - return ReadCSVResourceFile(XMLNames.Retarder_RetarderLossMap); - } - } - } -} \ No newline at end of file +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal abstract class AbstractEngineeringXMLComponentDataProvider : AbstractCommonComponentType + { + protected readonly IXMLEngineeringVehicleData Vehicle; + + + protected AbstractEngineeringXMLComponentDataProvider( + IXMLEngineeringVehicleData vehicle, + XmlNode baseNode, string source) : base(baseNode, source) + { + Vehicle = vehicle; + } + + + public override DigestData DigestValue + { + get { return null; } + } + + public override string CertificationNumber + { + get { return "N.A."; } + } + + public override CertificationMethod CertificationMethod + { + get { return CertificationMethod.NotCertified; } + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs new file mode 100644 index 0000000000..3a343866c2 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs @@ -0,0 +1,9 @@ +using System.Xml; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + public abstract class AbstractVehicleEngineeringType : AbstractCommonComponentType + { + protected AbstractVehicleEngineeringType(XmlNode node, string source) : base(node, source) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs new file mode 100644 index 0000000000..8888b8c67b --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs @@ -0,0 +1,81 @@ +using System.Xml; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + public abstract class AbstractXMLType + { + protected readonly XmlNode BaseNode; + + protected AbstractXMLType(XmlNode node) + { + BaseNode = node; + } + + protected bool ElementExists(string nodeName) + { + return GetNode(nodeName, BaseNode, required: false) != null; + } + + protected string GetString(string nodeName, XmlNode basenode = null, bool required = true) + { + return GetNode(nodeName, basenode, required)?.InnerText; + } + + protected double GetDouble(string nodeName, double? fallbackValue = null) + { + var node = GetNode(nodeName, required: fallbackValue != null); + + return node?.InnerText.ToDouble() ?? fallbackValue.Value; + } + + protected double GetDouble(string[] nodePath, double? fallbackValue = null) + { + var node = GetNode(nodePath, required: fallbackValue == null); + + return node?.InnerText.ToDouble() ?? fallbackValue.Value; + } + + protected bool GetBool(string nodeName) + { + return XmlConvert.ToBoolean(GetNode(nodeName).InnerText); + } + + protected XmlNode GetNode(string[] nodeName, XmlNode baseNode = null, bool required = true) + { + return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required); + } + + protected XmlNode GetNode(string nodeName, XmlNode baseNode = null, bool required = true) + { + return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required); + } + + private XmlNode DoGetNode(string xpathQuery, XmlNode baseNode, bool required) + { + var node = (baseNode ?? BaseNode)?.SelectSingleNode(xpathQuery); + if (required && node == null) { + throw new VectoException("Node {0} not found", xpathQuery); + } + + return node; + } + + protected XmlNodeList GetNodes(string nodeName, XmlNode baseNode = null) + { + return (baseNode ?? BaseNode).SelectNodes(XMLHelper.QueryLocalName(nodeName)); + } + + protected XmlNodeList GetNodes(string[] nodeName, XmlNode baseNode = null) + { + return (baseNode ?? BaseNode).SelectNodes(XMLHelper.QueryLocalName(nodeName)); + } + + protected string GetAttribute(XmlNode node, string attribute) + { + return node?.Attributes?.GetNamedItem(attribute)?.InnerText; + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs new file mode 100644 index 0000000000..fe1f09c759 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs @@ -0,0 +1,78 @@ +using System.Collections.Generic; +using System.IO; +using System.Xml; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLCyclesDataProviderV07 : AbstractXMLType, IXMLCyclesDataProvider + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected string BasePath; + + public XMLCyclesDataProviderV07(IEngineeringJobInputData jobData, XmlNode baseNode, string basePath) : base(baseNode) + { + BasePath = basePath; + } + + + public IList<ICycleData> Cycles + { + get { + var retVal = new List<ICycleData>(); + var cycleNodes = GetNodes(XMLNames.Missions_Cycle); + if (cycleNodes == null || cycleNodes.Count == 0) { + return retVal; + } + + foreach (XmlNode cycleNode in cycleNodes) { + var file = cycleNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText; + if (string.IsNullOrWhiteSpace(file)) { + continue; + } + + var fullPath = Path.Combine(BasePath ?? "", file); + if (File.Exists(fullPath)) { + retVal.Add( + new CycleInputData() { + Name = Path.GetFileNameWithoutExtension(fullPath), + CycleData = VectoCSVFile.Read(fullPath) + }); + } else { + try { + var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file + + Constants.FileExtensions.CycleFile; + retVal.Add( + new CycleInputData() { + Name = Path.GetFileNameWithoutExtension(file), + CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName), + }); + } catch { + //Log.Debug("Driving Cycle could not be read: " + cycleFile); + throw new VectoException("Driving Cycle could not be read: " + file); + } + } + } + + return retVal; + } + } + } + + + internal class XMLCyclesDataProviderV10 : XMLCyclesDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLCyclesDataProviderV10(IEngineeringJobInputData jobData, XmlNode baseNode, string basePath) : base( + jobData, baseNode, basePath) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs new file mode 100644 index 0000000000..745275d958 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs @@ -0,0 +1,48 @@ +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLDriverAccelerationV07 : AbstractXMLType, IXMLDriverAcceleration + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected IXMLEngineeringDriverData DriverData; + private IDriverAccelerationData _accelerationCurve; + + public XMLDriverAccelerationV07(IXMLEngineeringDriverData driverData, XmlNode node) : base(node) + { + DriverData = driverData; + } + + public XMLDriverAccelerationV07(TableData accCurve) : base(null) + { + _accelerationCurve = new DriverAccelerationInputData() { AccelerationCurve = accCurve }; + } + + public virtual IDriverAccelerationData AccelerationCurve + { + get { + return BaseNode == null + ? _accelerationCurve + : new DriverAccelerationInputData() { + AccelerationCurve = XMLHelper.ReadEntriesOrResource( + BaseNode, DriverData.DataSource.SourcePath, null, XMLNames.DriverModel_DriverAccelerationCurve_Entry, + AttributeMappings.DriverAccelerationCurveMapping) + }; + } + } + } + + internal class XMLDriverAccelerationV10 : XMLDriverAccelerationV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLDriverAccelerationV10(IXMLEngineeringDriverData driverData, XmlNode node) : base(driverData, node) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs new file mode 100644 index 0000000000..6164f9a744 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs @@ -0,0 +1,104 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringAirdragDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, + IXMLAirdragData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringAirdragDataProviderV07( + IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath) + : base(vehicle, axlegearNode, fsBasePath) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + public virtual SquareMeter AirDragArea + { + get { return GetDouble(XMLNames.Vehicle_AirDragArea).SI<SquareMeter>(); } + } + + public virtual SquareMeter TransferredAirDragArea + { + get { return AirDragArea; } + } + + public virtual SquareMeter AirdragArea_0 + { + get { return AirDragArea; } + } + + public virtual CrossWindCorrectionMode CrossWindCorrectionMode + { + get { return GetString(XMLNames.Vehicle_CrossWindCorrectionMode).ParseEnum<CrossWindCorrectionMode>(); } + } + + public virtual TableData CrosswindCorrectionMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Vehicle_CrosswindCorrectionData, XMLNames.Vehicle_CrosswindCorrectionData_Entry, + AttributeMappings.CrossWindCorrectionMapping); + } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringAirdragDataProviderV10 : XMLEngineeringAirdragDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAirdragDataProviderV10( + IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base( + vehicle, axlegearNode, fsBasePath) { } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs new file mode 100644 index 0000000000..c9150b435b --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs @@ -0,0 +1,96 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringAngledriveDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, + IXMLAngledriveData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringAngledriveDataProviderV07( + IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath) + : base(vehicle, axlegearNode, fsBasePath) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + public virtual AngledriveType Type + { + get { return Vehicle.AngledriveType; } + } + + public virtual double Ratio + { + get { return GetDouble(XMLNames.AngleDrive_Ratio); } + } + + public virtual TableData LossMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, + XMLNames.AngleDrive_TorqueLossMap, XMLNames.Angledrive_LossMap_Entry, + AttributeMappings.TransmissionLossmapMapping); + } + } + + public virtual double Efficiency + { + get { return GetDouble(new[] { XMLNames.AngleDrive_TorqueLossMap, XMLNames.AngleDrive_Efficiency }, double.NaN); } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringAngledriveDataProviderV10 : XMLEngineeringAngledriveDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAngledriveDataProviderV10( + IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base( + vehicle, axlegearNode, fsBasePath) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs new file mode 100644 index 0000000000..26807fa2fa --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs @@ -0,0 +1,193 @@ +using System.Collections.Generic; +using System.IO; +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringAuxiliariesDataProviderV07 : AbstractXMLType, IXMLAuxiliairesData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringAuxiliariesDataProviderV07( + IXMLEngineeringVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode) { } + + public IXMLComponentsReader Reader { protected get; set; } + + #region Implementation of IAuxiliariesEngineeringInputData + + public virtual IList<IAuxiliaryEngineeringInputData> Auxiliaries + { + get { + var auxNodes = GetNodes(XMLNames.Auxiliaries_Auxiliary); + if (auxNodes == null || auxNodes.Count == 0) { + return new List<IAuxiliaryEngineeringInputData>(); + } + + var retVal = new List<IAuxiliaryEngineeringInputData>(); + foreach (XmlNode auxNode in auxNodes) { + retVal.Add(Reader.Create(auxNode)); + } + + return retVal; + } + } + + public virtual AuxiliaryModel AuxiliaryAssembly + { + get { return AuxiliaryModel.Classic; } + } + + public virtual string AuxiliaryVersion + { + get { return ""; } + } + + public virtual string AdvancedAuxiliaryFilePath + { + get { return ""; } + } + + #endregion + } + + internal class XMLEngineeringAuxiliariesDataProviderV10 : XMLEngineeringAuxiliariesDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAuxiliariesDataProviderV10( + IXMLEngineeringVehicleData vehicle, XmlNode componentNode, string sourceFile) : base( + vehicle, componentNode, sourceFile) { } + } + + internal class XMLAuxiliaryEngineeringDataV07 : AbstractXMLType, IXMLAuxiliaryData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected string BasePath; + + protected AuxiliaryDataInputData AuxData; + + public XMLAuxiliaryEngineeringDataV07(XmlNode node, string basePath) : base(node) + { + BasePath = basePath; + + //ReadAuxData(); + } + + protected virtual AuxiliaryDataInputData ReadAuxData() + { + var id = BaseNode.Attributes?.GetNamedItem("id")?.InnerText ?? ""; + var childNode = BaseNode.SelectSingleNode("./*"); + if (childNode == null) { + throw new VectoException("No auxiliary data found! ID: {0}", id); + } + + if (childNode.LocalName == XMLNames.ExternalResource) { + var auxFile = childNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText; + if (string.IsNullOrWhiteSpace(auxFile) || !File.Exists(Path.Combine(BasePath, auxFile))) { + throw new VectoException("Auxiliary resource file {0} not found! Aux: {1}", auxFile, id); + } + + var retVal = new AuxiliaryDataInputData() { + AuxiliaryType = AuxiliaryDemandType.Mapping, + ID = id, + DataSource = + new DataSource() { SourceType = DataSourceType.CSVFile, SourceVersion = "0", SourceFile = auxFile } + }; + AuxiliaryFileHelper.FillAuxiliaryDataInputData(retVal, Path.Combine(BasePath, auxFile)); + return retVal; + } + + if (childNode.LocalName == XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad) { + return new AuxiliaryDataInputData { + ID = "ConstantAux", + AuxiliaryType = AuxiliaryDemandType.Constant, + ConstantPowerDemand = childNode.InnerText.ToDouble().SI<Watt>(), + DataSource = + new DataSource() { SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) } + }; + } + + return new AuxiliaryDataInputData() { + AuxiliaryType = AuxiliaryDemandType.Mapping, + ID = id, + TransmissionRatio = + BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_TransmissionRatioToEngine)) + ?.InnerText + .ToDouble() ?? 0, + EfficiencyToEngine = + BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_EfficiencyToEngine))?.InnerText + .ToDouble() ?? 0, + EfficiencyToSupply = + BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_EfficiencyAuxSupply))?.InnerText + .ToDouble() ?? 0, + DemandMap = XMLHelper.ReadTableData( + AttributeMappings.AuxMapMapping, + BaseNode.SelectNodes( + XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_AuxMap, XMLNames.Auxiliaries_Auxiliary_AuxMap_Entry))), + DataSource = + new DataSource() { SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) } + }; + } + + #region Implementation of IAuxiliaryEngineeringInputData + + public virtual string ID + { + get { return AuxData?.ID ?? (AuxData = ReadAuxData()).ID; } + } + + public virtual AuxiliaryDemandType AuxiliaryType + { + get { return AuxData?.AuxiliaryType ?? (AuxData = ReadAuxData()).AuxiliaryType; } + } + + public virtual double TransmissionRatio + { + get { return AuxData?.TransmissionRatio ?? (AuxData = ReadAuxData()).TransmissionRatio; } + } + + public virtual double EfficiencyToEngine + { + get { return AuxData?.EfficiencyToEngine ?? (AuxData = ReadAuxData()).EfficiencyToEngine; } + } + + public virtual double EfficiencyToSupply + { + get { return AuxData?.EfficiencyToSupply ?? (AuxData = ReadAuxData()).EfficiencyToSupply; } + } + + public virtual TableData DemandMap + { + get { return AuxData?.DemandMap ?? (AuxData = ReadAuxData()).DemandMap; } + } + + public virtual Watt ConstantPowerDemand + { + get { return AuxData?.ConstantPowerDemand ?? (AuxData = ReadAuxData()).ConstantPowerDemand; } + } + + public DataSource DataSource + { + get { return AuxData?.DataSource ?? (AuxData = ReadAuxData()).DataSource; } + } + + #endregion + } + + internal class XMLAuxiliaryEngineeringDataV10 : XMLAuxiliaryEngineeringDataV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLAuxiliaryEngineeringDataV10(XmlNode node, string basePath) : base(node, basePath) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs new file mode 100644 index 0000000000..feaa1e1d6e --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs @@ -0,0 +1,109 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringAxlegearDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, IXMLAxlegearData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringAxlegearDataProviderV07( + IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath) + : base(vehicle, axlegearNode, fsBasePath) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + + public virtual double Ratio + { + get { return GetDouble(XMLNames.Axlegear_Ratio); } + } + + public virtual TableData LossMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry, + AttributeMappings.TransmissionLossmapMapping); + } + } + + + public virtual double Efficiency + { + get { return GetDouble(new[] { XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_Efficiency }, double.NaN); } + } + + public virtual AxleLineType LineType + { + get { return AxleLineType.SinglePortalAxle; } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + + internal class XMLEngineeringAxlegearDataProviderV10 : XMLEngineeringAxlegearDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAxlegearDataProviderV10( + IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath) + : base(vehicle, axlegearNode, fsBasePath) { } + + public override AxleLineType LineType + { + get { + return GetNode(XMLNames.Axlegear_LineType, required: false)?.InnerText.ParseEnum<AxleLineType>() ?? + AxleLineType.SinglePortalAxle; + } + } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs new file mode 100644 index 0000000000..3a93a8f0e2 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs @@ -0,0 +1,238 @@ +using System; +using System.Collections.Generic; +using System.Xml; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringAxlesDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, + IXMLAxlesData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringAxlesDataProviderV07(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) + : base(vehicle, baseNode, source) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == source ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + #region Implementation of IAxlesEngineeringInputData + + public virtual IList<IAxleEngineeringInputData> AxlesEngineering + { + get { + var axleNodes = GetNodes(new[] { XMLNames.AxleWheels_Axles, XMLNames.AxleWheels_Axles_Axle }); + if (axleNodes == null || axleNodes.Count == 0) { + return new List<IAxleEngineeringInputData>(); + } + + var retVal = new IAxleEngineeringInputData[axleNodes.Count]; + foreach (XmlNode axleNode in axleNodes) { + var axleNumber = GetAttribute(axleNode, XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr).ToInt(); + if (axleNumber < 1 || axleNumber > retVal.Length) { + throw new VectoException("Axle #{0} exceeds axle count", axleNumber); + } + if (retVal[axleNumber - 1] != null) { + throw new VectoException("Axle #{0} defined multiple times!", axleNumber); + } + + retVal[axleNumber - 1] = Reader.CreateAxle(axleNode); + } + + return retVal; + } + } + + public IXMLComponentsReader Reader { protected get; set; } + + #endregion + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + + #endregion + } + + internal class XMLEngineeringAxlesDataProviderV10 : XMLEngineeringAxlesDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAxlesDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base( + vehicle, baseNode, source) { } + + #region Overrides of XMLEngineeringAxlesDataProviderV07 + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } + + internal class XMLAxleEngineeringDataV07 : AbstractEngineeringXMLComponentDataProvider, IXMLAxleEngineeringData, + ITyreEngineeringInputData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLAxleEngineeringDataV07(XmlNode node, IXMLEngineeringVehicleData vehicle) : base( + vehicle, node, (vehicle as IXMLResource).DataSource.SourcePath) + { + SourceType = DataSourceType.XMLEmbedded; + } + + #region Implementation of IAxleDeclarationInputData + + public virtual bool TwinTyres + { + get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_TwinTyres)?.InnerText ?? ""); } + } + + public virtual bool Steered + { + get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_Steered)?.InnerText ?? ""); } + } + + public virtual AxleType AxleType + { + get { return (GetNode(XMLNames.AxleWheels_Axles_Axle_AxleType)?.InnerText ?? "").ParseEnum<AxleType>(); } + } + + public virtual double AxleWeightShare + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_WeightShare)?.InnerText.ToDouble() ?? 0; } + } + + public virtual ITyreEngineeringInputData Tyre + { + get { return this; } + } + + ITyreDeclarationInputData IAxleDeclarationInputData.Tyre + { + get { throw new NotImplementedException(); } + } + + #endregion + + #region Implementation of ITyreDeclarationInputData + + public virtual string Dimension + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Dimension)?.InnerText; } + } + + public virtual double RollResistanceCoefficient + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_RRCISO)?.InnerText.ToDouble() ?? double.NaN; } + } + + public virtual Newton TyreTestLoad + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_FzISO)?.InnerText.ToDouble().SI<Newton>(); } + } + + #endregion + + #region Implementation of ITyreEngineeringInputData + + public virtual KilogramSquareMeter Inertia + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Inertia)?.InnerText.ToDouble().SI<KilogramSquareMeter>(); } + } + + public virtual Meter DynamicTyreRadius + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius)?.InnerText.ToDouble().SI(Unit.SI.Milli.Meter).Cast<Meter>(); } + } + + #endregion + + public IXMLComponentsReader Reader { protected get; set; } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLAxleEngineeringDataV10 : AbstractEngineeringXMLComponentDataProvider, IXMLAxleEngineeringData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + private ITyreEngineeringInputData _tyre; + + public XMLAxleEngineeringDataV10(XmlNode node, IXMLEngineeringVehicleData vehicle) : base( + vehicle, node, (vehicle as IXMLResource).DataSource.SourcePath) + { + SourceType = DataSourceType.XMLEmbedded; + } + + #region Implementation of IAxleDeclarationInputData + + public virtual bool TwinTyres + { + get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_TwinTyres)?.InnerText ?? ""); } + } + + public virtual bool Steered + { + get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_Steered)?.InnerText ?? ""); } + } + + public virtual AxleType AxleType + { + get { return (GetNode(XMLNames.AxleWheels_Axles_Axle_AxleType)?.InnerText ?? "").ParseEnum<AxleType>(); } + } + + public virtual ITyreEngineeringInputData Tyre + { + get { return _tyre ?? (_tyre = Reader.Tyre); } + } + + + public virtual double AxleWeightShare + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_WeightShare)?.InnerText.ToDouble() ?? 0; } + } + + ITyreDeclarationInputData IAxleDeclarationInputData.Tyre + { + get { return Tyre; } + } + + #endregion + + public IXMLComponentsReader Reader { protected get; set; } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLAxleEngineeringDataV10TEST : XMLAxleEngineeringDataV10 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST; + + public XMLAxleEngineeringDataV10TEST(XmlNode node, IXMLEngineeringVehicleData vehicle) : base(node, vehicle) { } + + public override bool TwinTyres + { + get { return XmlConvert.ToBoolean(GetNode("TwinTires")?.InnerText ?? ""); } + } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs new file mode 100644 index 0000000000..9bdf209ba2 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs @@ -0,0 +1,70 @@ +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringDriverDataProviderV07 : AbstractCommonComponentType, IXMLEngineeringDriverData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + private ILookaheadCoastingInputData _lookahead; + private IOverSpeedEcoRollEngineeringInputData _overspeed; + private IXMLDriverAcceleration _accCurve; + private IGearshiftEngineeringInputData _shiftParameters; + + public XMLEngineeringDriverDataProviderV07( + IXMLEngineeringInputData inputData, + XmlNode driverDataNode, string fsBasePath) + : base(driverDataNode, fsBasePath) + { + SourceType = (inputData as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + public IXMLDriverDataReader Reader { protected get; set; } + + public virtual IDriverAccelerationData AccelerationCurve + { + get { return (_accCurve ?? (_accCurve = Reader.AccelerationCurveData)).AccelerationCurve; } + } + + public virtual ILookaheadCoastingInputData Lookahead + { + get { return _lookahead ?? (_lookahead = Reader.LookAheadData); } + } + + public IGearshiftEngineeringInputData GearshiftInputData + { + get { return _shiftParameters ?? (_shiftParameters = Reader.ShiftParameters); } + } + + public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll + { + get { return _overspeed ?? (_overspeed = Reader.OverspeedData); } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringDriverDataProviderV10 : XMLEngineeringDriverDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringDriverDataProviderV10( + IXMLEngineeringInputData inputData, XmlNode driverDataNode, string fsBasePath) : base( + inputData, driverDataNode, fsBasePath) { } + + #region Overrides of XMLEngineeringDriverDataProviderV07 + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs new file mode 100644 index 0000000000..5d1f8f5fe4 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs @@ -0,0 +1,96 @@ +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringDriverLookAheadV07 : AbstractXMLType, IXMLLookaheadData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected IXMLEngineeringDriverData DriverData; + + public XMLEngineeringDriverLookAheadV07(IXMLEngineeringDriverData driverData, XmlNode node) : base(node) + { + DriverData = driverData; + } + + #region Implementation of ILookaheadCoastingInputData + + public virtual bool Enabled + { + get { return GetBool(XMLNames.DriverModel_LookAheadCoasting_Enabled); } + } + + public virtual MeterPerSecond MinSpeed + { + get { + return GetNode(XMLNames.DriverModel_Overspeed_MinSpeed, required: false) + ?.InnerText.ToDouble().KMPHtoMeterPerSecond() ?? + DeclarationData.Driver.LookAhead.MinimumSpeed; + } + } + + public virtual double CoastingDecisionFactorOffset + { + get { + return GetNode(XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset, required: false) + ?.InnerText.ToDouble() ?? + DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset; + } + } + + public virtual double CoastingDecisionFactorScaling + { + get { + return GetNode(XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling, required: false) + ?.InnerText.ToDouble() ?? + DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling; + } + } + + public virtual double LookaheadDistanceFactor + { + get { + return GetNode(XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor, required: false) + ?.InnerText.ToDouble() ?? + DeclarationData.Driver.LookAhead.LookAheadDistanceFactor; + } + } + + public virtual TableData CoastingDecisionFactorTargetSpeedLookup + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DriverData.DataSource.SourcePath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, + XMLNames.LookAheadCoasting_SpeedDependentDecisionFactor_Entry, + AttributeMappings.CoastingDFTargetSpeedLookupMapping); + } + } + + public virtual TableData CoastingDecisionFactorVelocityDropLookup + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DriverData.DataSource.SourcePath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, + XMLNames.LookAheadCoasting_VelocityDropDecisionFactor_Entry, + AttributeMappings.CoastingDFVelocityDropLookupMapping); + } + } + + #endregion + } + + internal class XMLEngineeringDriverLookAheadV10 : XMLEngineeringDriverLookAheadV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringDriverLookAheadV10(IXMLEngineeringDriverData driverData, XmlNode node) : + base(driverData, node) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs new file mode 100644 index 0000000000..db24106aad --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs @@ -0,0 +1,214 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringEngineDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, + IXMLEngineData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringEngineDataProviderV07( + IXMLEngineeringVehicleData vehicle, + XmlNode vehicleNode, string fsBasePath) + : base(vehicle, vehicleNode, fsBasePath) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + public XMLEngineeringEngineDataProviderV07(XmlNode node, string sourceFile) : base(null, node, sourceFile) { } + + public virtual CubicMeter Displacement + { + get { return GetDouble(XMLNames.Engine_Displacement).SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(); } + } + + public virtual PerSecond IdleSpeed + { + get { return GetDouble(XMLNames.Engine_IdlingSpeed).RPMtoRad(); } + } + + public virtual double WHTCEngineering + { + get { return GetDouble(XMLNames.Engine_WHTCEngineering); } + } + + public virtual double WHTCMotorway + { + get { throw new VectoException("Property not available in Engineering Mode"); } + } + + public virtual double WHTCRural + { + get { throw new VectoException("Property not available in Engineering Mode"); } + } + + public virtual double WHTCUrban + { + get { throw new VectoException("Property not available in Engineering Mode"); } + } + + public virtual double ColdHotBalancingFactor + { + get { throw new VectoException("Property not available in Engineering Mode"); } + } + + public virtual double CorrectionFactorRegPer + { + get { + return 1; + + //GetDoubleElementValue(XMLNames.Engine_CorrectionFactor_RegPer); + } + } + + public virtual double CorrectionFactorNCV + { + get { return 1; } + } + + public virtual FuelType FuelType + { + get { + return FuelType.DieselCI; //GetElementValue(XMLNames.Engine_FuelType).ParseEnum<FuelType>(); + } + } + + public virtual TableData FuelConsumptionMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry, + AttributeMappings.FuelConsumptionMapMapping); + } + } + + public virtual TableData FullLoadCurve + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FullLoadCurve_Entry, + AttributeMappings.EngineFullLoadCurveMapping); + } + } + + public virtual Watt RatedPowerDeclared + { + get { + return null; //GetDoubleElementValue(XMLNames.Engine_RatedPower).SI<Watt>(); + } + } + + public virtual PerSecond RatedSpeedDeclared + { + get { + return null; //GetDoubleElementValue(XMLNames.Engine_RatedSpeed).RPMtoRad(); + } + } + + public virtual NewtonMeter MaxTorqueDeclared + { + get { + return null; //GetDoubleElementValue(XMLNames.Engine_MaxTorque).SI<NewtonMeter>(); + } + } + + public virtual KilogramSquareMeter Inertia + { + get { return GetString(XMLNames.Engine_Inertia, required: false)?.ToDouble().SI<KilogramSquareMeter>(); } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringEngineDataProviderV10 : XMLEngineeringEngineDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringEngineDataProviderV10( + XMLEngineeringVehicleDataProviderV07 vehicle, XmlNode vehicleNode, string fsBasePath) : base( + vehicle, vehicleNode, fsBasePath) { } + + public XMLEngineeringEngineDataProviderV10(XmlNode node, string sourceFile) : base(node, sourceFile) { } + + public override double WHTCEngineering + { + get { return GetDouble(XMLNames.Engine_FCCorrection, 1.0); } + } + + #region Overrides of XMLEngineeringEngineDataProviderV07 + + #region Overrides of XMLEngineeringEngineDataProviderV07 + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + + #endregion + } + + // this class is just for testing reading derived XML datatypes + internal class XMLEngineeringEngineDataProviderV10TEST : XMLEngineeringEngineDataProviderV10 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST; + + public XMLEngineeringEngineDataProviderV10TEST(XMLEngineeringVehicleDataProviderV07 vehicle, XmlNode vehicleNode, string fsBasePath) : base(vehicle, vehicleNode, fsBasePath) { } + + public XMLEngineeringEngineDataProviderV10TEST(XmlNode node, string sourceFile) : base(node, sourceFile) { } + + #region Overrides of XMLEngineeringEngineDataProviderV07 + + public override PerSecond RatedSpeedDeclared { get { + return GetString(XMLNames.Engine_RatedSpeed).Replace("rpm", "").ToDouble(0).RPMtoRad(); + } } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } + +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs new file mode 100644 index 0000000000..64ef5f418d --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs @@ -0,0 +1,238 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Collections.Generic; +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringGearboxDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, + IXMLGearboxData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + private ITorqueConverterEngineeringInputData _torqueConverter; + + public XMLEngineeringGearboxDataProviderV07( + IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath) + : base(vehicle, axlegearNode, fsBasePath) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + public virtual GearboxType Type + { + get { return GetString(XMLNames.Gearbox_TransmissionType).ParseEnum<GearboxType>(); } + } + + + public virtual KilogramSquareMeter Inertia + { + get { return GetDouble(XMLNames.Gearbox_Inertia).SI<KilogramSquareMeter>(); } + } + + public virtual Second TractionInterruption + { + get { return GetDouble(XMLNames.Gearbox_TractionInterruption).SI<Second>(); } + } + + public virtual Second PowershiftShiftTime + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime, + ((XMLEngineeringInputDataProviderV07)Vehicle.Job.InputData).Document.DocumentElement, required: false) + ?.InnerText.ToDouble().SI<Second>() ?? Constants.DefaultPowerShiftTime; + } + } + + public virtual IList<ITransmissionInputData> Gears + { + get { + var gearNodes = GetNodes(new[] { XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear }); + if (gearNodes == null || gearNodes.Count == 0) { + return new List<ITransmissionInputData>(); + } + + var retVal = new List<ITransmissionInputData>(); + foreach (XmlNode gearNode in gearNodes) { + retVal.Add(Reader.CreateGear(gearNode)); + } + + return retVal; + } + } + + + ITorqueConverterDeclarationInputData IGearboxDeclarationInputData.TorqueConverter + { + get { return TorqueConverter; } + } + + public ITorqueConverterEngineeringInputData TorqueConverter + { + get { return _torqueConverter ?? (_torqueConverter = Reader.TorqueConverter); } + } + + public IXMLComponentsReader Reader { protected get; set; } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + + internal class XMLEngineeringGearboxDataProviderV10 : XMLEngineeringGearboxDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringGearboxDataProviderV10( + IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base( + vehicle, axlegearNode, fsBasePath) { } + + #region Overrides of XMLEngineeringGearboxDataProviderV07 + + public override Second PowershiftShiftTime + { + get { return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime, required: false)?.InnerText.ToDouble().SI<Second>() ?? Constants.DefaultPowerShiftTime; } + } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } + + public abstract class XMLAbstractGearData : AbstractXMLType + { + protected string BasePath; + + public XMLAbstractGearData(XmlNode node, string basePath) : base(node) + { + BasePath = basePath; + } + + public virtual int Gear + { + get { + return XmlConvert.ToUInt16( + BaseNode.Attributes?.GetNamedItem(XMLNames.Gearbox_Gear_GearNumber_Attr).InnerText ?? "0"); + } + } + + public virtual double Ratio + { + get { + return BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Gearbox_Gear_Ratio))?.InnerText.ToDouble() ?? + double.NaN; + } + } + + public virtual TableData LossMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, BasePath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry, + AttributeMappings.TransmissionLossmapMapping); + } + } + + public virtual double Efficiency + { + get { + return GetNode(new[] { XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_Efficiency }) + ?.InnerText.ToDouble() ?? double.NaN; + } + } + } + + internal class XMLGearDataV07 : XMLAbstractGearData, IXMLGearData + { + protected DataSource _dataSource; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLGearDataV07(XmlNode gearNode, string basePath) : base(gearNode, basePath) { } + + #region Implementation of ITransmissionInputData + + public virtual NewtonMeter MaxTorque + { + get { + return GetNode(XMLNames.Gearbox_Gears_MaxTorque, required: false)?.InnerText + .ToDouble().SI<NewtonMeter>(); + } + } + + public virtual PerSecond MaxInputSpeed + { + get { return GetNode(XMLNames.Gearbox_Gear_MaxSpeed, required: false)?.InnerText.ToDouble().RPMtoRad(); } + } + + public virtual TableData ShiftPolygon + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, BasePath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry, + AttributeMappings.ShiftPolygonMapping); + } + } + + public virtual DataSource DataSource + { + get { return _dataSource ?? (_dataSource = new DataSource() {SourceFile = BasePath, SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }); } + } + + #endregion + } + + internal class XMLGearDataV10 : XMLGearDataV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLGearDataV10(XmlNode gearNode, string basePath) : base(gearNode, basePath) { } + + public override DataSource DataSource + { + get { return _dataSource ?? (_dataSource = new DataSource() { SourceFile = BasePath, SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }); } + } + + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs new file mode 100644 index 0000000000..0b40d588f2 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs @@ -0,0 +1,128 @@ +using System.Xml; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringGearshiftDataV07 : AbstractXMLType, IXMLEngineeringGearshiftData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringGearshiftDataV07(XmlNode node) : base(node) { } + + #region Implementation of IGearshiftEngineeringInputData + + //public virtual Second TractionInterruption + //{ + // get { return GetNode(XMLNames.Gearbox_TractionInterruption)?.InnerText.ToDouble().SI<Second>(); } + //} + + public virtual Second MinTimeBetweenGearshift + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift, required: false) + ?.InnerText.ToDouble().SI<Second>() ?? DeclarationData.Gearbox.MinTimeBetweenGearshifts; + } + } + + public virtual double TorqueReserve + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve, required: false)?.InnerText.ToDouble() ?? + DeclarationData.Gearbox.TorqueReserve; + } + } + + public virtual MeterPerSecond StartSpeed + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed, required: false) + ?.InnerText.ToDouble().SI<MeterPerSecond>() ?? DeclarationData.Gearbox.StartSpeed; + } + } + + public virtual MeterPerSquareSecond StartAcceleration + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration, required: false) + ?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ?? DeclarationData.Gearbox.StartAcceleration; + } + } + + public virtual double StartTorqueReserve + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve, required: false) + ?.InnerText.ToDouble() ?? + DeclarationData.Gearbox.TorqueReserveStart; + } + } + + public virtual Second DownshiftAfterUpshiftDelay + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay, required: false) + ?.InnerText.ToDouble().SI<Second>() ?? + DeclarationData.Gearbox.DownshiftAfterUpshiftDelay; + } + } + + public virtual Second UpshiftAfterDownshiftDelay + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay, required: false) + ?.InnerText.ToDouble().SI<Second>() ?? DeclarationData.Gearbox.UpshiftAfterDownshiftDelay; + } + } + + public virtual MeterPerSquareSecond UpshiftMinAcceleration + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration, required: false) + ?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ?? DeclarationData.Gearbox.UpshiftMinAcceleration; + } + } + + public virtual Second PowershiftShiftTime + { + get { + return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime, required: false) + ?.InnerText.ToDouble().SI<Second>() ?? 0.8.SI<Second>(); + } + } + + #endregion + + #region Implementation of ITorqueConverterEngineeringShiftParameterInputData + + public virtual MeterPerSquareSecond CLUpshiftMinAcceleration + { + get { + return GetNode(XMLNames.TorqueConverter_CLUpshiftMinAcceleration, required: false) + ?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ?? + DeclarationData.Gearbox.UpshiftMinAcceleration; + } + } + + public virtual MeterPerSquareSecond CCUpshiftMinAcceleration + { + get { + return GetNode(XMLNames.TorqueConverter_CCUpshiftMinAcceleration, required: false) + ?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ?? + DeclarationData.Gearbox.UpshiftMinAcceleration; + } + } + + #endregion + } + + internal class XMLEngineeringGearshiftDataV10 : XMLEngineeringGearshiftDataV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringGearshiftDataV10(XmlNode node) : base(node) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs new file mode 100644 index 0000000000..81fdff48f6 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs @@ -0,0 +1,72 @@ +using System; +using System.Xml; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringInputDataProviderV07 : AbstractXMLResource, IXMLEngineeringInputData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + internal XmlDocument Document; + + protected IEngineeringJobInputData JobData; + protected IDriverEngineeringInputData DriverData; + + public IXMLEngineeringInputReader Reader { protected get; set; } + + public XMLEngineeringInputDataProviderV07(XmlDocument xmldoc, string fileName) : base( + xmldoc.DocumentElement, fileName) + { + Document = xmldoc; + + // check for reference elements inside the vehicle or the vehicle is referenced itself + var refNodes = Document.DocumentElement?.SelectNodes( + String.Format("//*[local-name()='{0}']//*[local-name()='{1}' and @{2}]|/*/*[local-name()='{1}' and @{2}]", XMLNames.Component_Vehicle, XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr)); + if (refNodes != null && refNodes.Count > 0 && fileName == null) { + throw new VectoException("XML input data with file references can not be read via stream!"); + } + + SourceType = DataSourceType.XMLFile; + } + + + #region Implementation of IEngineeringInputDataProvider + + public virtual IEngineeringJobInputData JobInputData + { + get { return JobData ?? (JobData = Reader.JobData); } + } + + public virtual IDriverEngineeringInputData DriverInputData + { + get { return DriverData ?? (DriverData = Reader.DriverModel); } + } + + #endregion + + + + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringInputDataProviderV10 : XMLEngineeringInputDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringInputDataProviderV10(XmlDocument xmldoc, string fileName) : base(xmldoc, fileName) { } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs new file mode 100644 index 0000000000..22f15638a1 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.IO; +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringJobInputDataProviderV07 : AbstractXMLResource, IXMLEngineeringJobInputData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected string FileName; + protected IXMLEngineeringInputData InputProvider; + + private IEngineEngineeringInputData _engineOnly; + private IVehicleEngineeringInputData _vehicle; + + public IXMLJobDataReader Reader { protected get; set; } + private IXMLCyclesDataProvider _cycles; + + + public XMLEngineeringJobInputDataProviderV07(XmlNode node, IXMLEngineeringInputData inputProvider, string fileName) : + base(node, fileName) + { + InputProvider = inputProvider; + FileName = fileName; + + EngineOnlyMode = GetBool(XMLNames.VectoJob_EngineOnlyMode); + SourceType = (inputProvider as IXMLResource).DataSource.SourceFile == fileName ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + + public virtual IList<ICycleData> Cycles + { + get { return (_cycles ?? (_cycles = Reader.CreateCycles)).Cycles; } + } + + public virtual IEngineEngineeringInputData EngineOnly + { + get { return _engineOnly ?? (_engineOnly = Reader.CreateEngineOnly); } + } + + public virtual bool EngineOnlyMode { get; } + + + public virtual string JobName + { + get { + return EngineOnlyMode + ? EngineOnly.Model + : (GetAttribute(BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Component_Vehicle)), "id") ?? + Vehicle.Model + " " + Vehicle.Manufacturer); + } + } + + public virtual bool SavedInDeclarationMode + { + get { return false; } + } + + public virtual IVehicleEngineeringInputData Vehicle + { + get { return _vehicle ?? (_vehicle = Reader.CreateVehicle); } + } + + IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle + { + get { return Vehicle; } + } + + public string SourePath + { + get { return FileName == null ? null : Path.GetDirectoryName(Path.GetFullPath(FileName)); } + } + + public IXMLEngineeringInputData InputData + { + get { return InputProvider; } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + + internal class XMLEngineeringJobInputDataProviderV10 : XMLEngineeringJobInputDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10; + + public XMLEngineeringJobInputDataProviderV10(XmlNode node, IXMLEngineeringInputData inputProvider, string fileName) : + base(node, inputProvider, fileName) { } + + #region Overrides of XMLEngineeringJobInputDataProviderV07 + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs new file mode 100644 index 0000000000..6b29a3949c --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs @@ -0,0 +1,58 @@ +using System.Xml; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringOverspeedV07 : AbstractXMLType, IXMLOverspeedData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected IXMLEngineeringDriverData DriverData; + + public XMLEngineeringOverspeedV07(IXMLEngineeringDriverData driverData, XmlNode node) : base(node) + { + DriverData = driverData; + } + + #region Implementation of IOverSpeedEcoRollDeclarationInputData + + public virtual DriverMode Mode + { + get { return GetNode(XMLNames.DriverModel_Overspeed_Mode, required: false)?.InnerText.ParseEnum<DriverMode>() ?? DriverMode.Off; } + } + + #endregion + + #region Implementation of IOverSpeedEcoRollEngineeringInputData + + public virtual MeterPerSecond MinSpeed + { + get { return GetNode(XMLNames.DriverModel_Overspeed_MinSpeed, required: false)?.InnerText.ToDouble().KMPHtoMeterPerSecond(); } + } + + public virtual MeterPerSecond OverSpeed + { + get { return GetNode(XMLNames.DriverModel_Overspeed_AllowedOverspeed, required: false)?.InnerText.ToDouble().KMPHtoMeterPerSecond(); } + } + + public virtual MeterPerSecond UnderSpeed + { + get { + return GetNode(XMLNames.DriverModel_Overspeed_AllowedUnderspeed, required: false)?.InnerText.ToDouble().KMPHtoMeterPerSecond(); + } + } + + #endregion + } + + internal class XMLEngineeringOverspeedV10 : XMLEngineeringOverspeedV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringOverspeedV10(IXMLEngineeringDriverData driverData, XmlNode node) : base(driverData, node) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs new file mode 100644 index 0000000000..65aa4c7eac --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs @@ -0,0 +1,95 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringRetarderDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, IXMLRetarderData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringRetarderDataProviderV07( + IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath) + : base(vehicle, axlegearNode, fsBasePath) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + public virtual RetarderType Type + { + get { return Vehicle.RetarderType; } + } + + public virtual double Ratio + { + get { return Vehicle.RetarderRatio; } + } + + public virtual TableData LossMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry, + AttributeMappings.RetarderLossmapMapping); + } + } + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringRetarderDataProviderV10 : XMLEngineeringRetarderDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringRetarderDataProviderV10( + IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base( + vehicle, axlegearNode, fsBasePath) { } + + #region Overrides of XMLEngineeringRetarderDataProviderV07 + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs new file mode 100644 index 0000000000..343e10ac73 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs @@ -0,0 +1,92 @@ +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl +{ + internal class XMLEngineeringTorqueConverterDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, + IXMLTorqueconverterData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public XMLEngineeringTorqueConverterDataProviderV07( + IXMLEngineeringVehicleData vehicle, XmlNode node, string source) : base(vehicle, node, source) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == source ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + #region Implementation of ITorqueConverterDeclarationInputData + + public virtual TableData TCData + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.TorqueConverter_Characteristics, XMLNames.TorqueConverter_Characteristics_Entry, + AttributeMappings.TorqueConverterDataMapping); + } + } + + #endregion + + #region Implementation of ITorqueConverterEngineeringInputData + + public virtual PerSecond ReferenceRPM + { + get { + return GetNode(XMLNames.TorqueConverter_ReferenceRPM)?.InnerText.ToDouble().RPMtoRad() ?? + DeclarationData.TorqueConverter.ReferenceRPM; + } + } + + public virtual KilogramSquareMeter Inertia + { + get { + return GetNode(XMLNames.TorqueConverter_Inertia)?.InnerText.ToDouble().SI<KilogramSquareMeter>() ?? + 0.SI<KilogramSquareMeter>(); + } + } + + public virtual TableData ShiftPolygon + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.TorqueConverter_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry, + AttributeMappings.ShiftPolygonMapping); + } + } + + public virtual PerSecond MaxInputSpeed + { + get { return GetNode(XMLNames.TorqueConverter_MaxInputSpeed)?.InnerText.ToDouble().RPMtoRad(); } + } + + #endregion + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLEngineeringTorqueConverterDataProviderV10 : XMLEngineeringTorqueConverterDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringTorqueConverterDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode node, string source) : + base(vehicle, node, source) { } + + #region Overrides of XMLEngineeringTorqueConverterDataProviderV07 + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs new file mode 100644 index 0000000000..e0235dfc06 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs @@ -0,0 +1,104 @@ +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringVehicleComponentsDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, IXMLEngineeringVehicleComponentsData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + private IAirdragEngineeringInputData _airdragInputData; + private IGearboxEngineeringInputData _gearboxInputData; + private IAxleGearInputData _axleGearInputData; + private IAngledriveInputData _angledriveInputData; + private IEngineEngineeringInputData _engineInputData; + private IRetarderInputData _retarderInputData; + private IAuxiliariesEngineeringInputData _auxInputData; + private IAxlesEngineeringInputData _axleWheels; + + public XMLEngineeringVehicleComponentsDataProviderV07( + IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(vehicle, baseNode, source) + { + SourceType = DataSourceType.XMLEmbedded; + } + + #region Implementation of IVehicleComponentsEngineering + + public override DataSource DataSource + { + get { return ((IXMLResource)Vehicle).DataSource; } + } + + public IXMLComponentsReader ComponentReader { protected get; set; } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + protected override DataSourceType SourceType { get; } + + public virtual IAirdragEngineeringInputData AirdragInputData + { + get { return _airdragInputData ?? (_airdragInputData = ComponentReader.AirdragInputData); } + } + + public virtual IGearboxEngineeringInputData GearboxInputData + { + get { return _gearboxInputData ?? (_gearboxInputData = ComponentReader.GearboxData); } + } + public virtual ITorqueConverterEngineeringInputData TorqueConverterInputData + { + get { return GearboxInputData.TorqueConverter; } + } + + public virtual IAxleGearInputData AxleGearInputData + { + get { return _axleGearInputData ?? (_axleGearInputData = ComponentReader.AxleGearInputData); } + } + + public virtual IAngledriveInputData AngledriveInputData + { + get { return _angledriveInputData ?? (_angledriveInputData = ComponentReader.AngularGearInputData); } + } + + public virtual IEngineEngineeringInputData EngineInputData + { + get { return _engineInputData ?? (_engineInputData = ComponentReader.EngineInputData); } + } + + public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData + { + get { return _auxInputData ?? (_auxInputData = ComponentReader.AuxiliaryData); } + } + + public virtual IRetarderInputData RetarderInputData + { + get { return _retarderInputData ?? (_retarderInputData = ComponentReader.RetarderInputData); } + } + + public IPTOTransmissionInputData PTOTransmissionInputData { get { return Vehicle; } } + + public IAxlesEngineeringInputData AxleWheels + { + get { return _axleWheels ?? (_axleWheels = ComponentReader.AxlesEngineeringInputData); } + } + + #endregion + + #region Implementation of IXMLResource + + + #endregion + + } + + internal class XMLEngineeringVehicleComponentsDataProviderV10 : XMLEngineeringVehicleComponentsDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringVehicleComponentsDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(vehicle, baseNode, source) { } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs new file mode 100644 index 0000000000..4782e983ae --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs @@ -0,0 +1,304 @@ +using System.Collections.Generic; +using System.Xml; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.Impl; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLEngineeringVehicleDataProviderV07 : AbstractVehicleEngineeringType, IXMLEngineeringVehicleData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + public IXMLComponentsReader ComponentReader { protected get; set; } + + private IVehicleComponentsEngineering _components; + + + public XMLEngineeringVehicleDataProviderV07( + IXMLEngineeringJobInputData jobProvider, XmlNode vehicleNode, string fullFilename) : + base(vehicleNode, fullFilename) + { + Job = jobProvider; + SourceType = jobProvider.DataSource.SourceFile == fullFilename ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + #region Implementation of IComponentInputData + + public override CertificationMethod CertificationMethod + { + get { return CertificationMethod.NotCertified; } + } + + public override string CertificationNumber + { + get { return "N.A."; } + } + + public override DigestData DigestValue + { + get { return null; } + } + + #endregion + + #region Implementation of IVehicleDeclarationInputData + + public string Identifier { get; } + + public bool ExemptedVehicle + { + get { return false; } + } + + public virtual string VIN + { + get { return GetString(XMLNames.Vehicle_VIN); } + } + + public virtual LegislativeClass LegislativeClass + { + get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); } + } + + public virtual VehicleCategory VehicleCategory + { + get { + return GetNode(XMLNames.Vehicle_VehicleCategory, required: false)?.InnerText.ParseEnum<VehicleCategory>() ?? + VehicleCategory.Unknown; + } + } + + public virtual AxleConfiguration AxleConfiguration + { + get { return AxleConfigurationHelper.Parse(GetString(XMLNames.Vehicle_AxleConfiguration)); } + } + + public virtual Kilogram CurbMassChassis + { + get { return GetDouble(XMLNames.Vehicle_CurbMassChassis).SI<Kilogram>(); } + } + + public virtual Kilogram CurbMassExtra + { + get { return GetDouble(XMLNames.Vehicle_CurbMassExtra).SI<Kilogram>(); } + } + + public virtual Kilogram GrossVehicleMassRating + { + get { return GetDouble(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); } + } + + public virtual string ManufacturerAddress + { + get { return GetString(XMLNames.Component_ManufacturerAddress); } + } + + public virtual PerSecond EngineIdleSpeed + { + get { return GetDouble(XMLNames.Vehicle_IdlingSpeed).RPMtoRad(); } + } + + public bool VocationalVehicle + { + get { return false; } + } + + public bool SleeperCab + { + get { return false; } + } + + public TankSystem? TankSystem + { + get { + return ElementExists(XMLNames.Vehicle_NgTankSystem) + ? EnumHelper.ParseEnum<TankSystem>(GetString(XMLNames.Vehicle_NgTankSystem)) + : (TankSystem?)null; + } + } + + + public bool ZeroEmissionVehicle + { + get { return false; } + } + + public bool HybridElectricHDV + { + get { return false; } + } + + public bool DualFuelVehicle + { + get { return false; } + } + + public Watt MaxNetPower1 + { + get { return null; } + } + + public Watt MaxNetPower2 + { + get { return null; } + } + + IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components + { + get { return null; } + } + + IAdvancedDriverAssistantSystemDeclarationInputData IVehicleDeclarationInputData.ADAS + { + get { return null; } + } + + + public IAdvancedDriverAssistantSystemsEngineering ADAS + { + get { return null; } + } + + public virtual Kilogram Loading + { + get { return GetDouble(XMLNames.Vehicle_Loading).SI<Kilogram>(); } + } + + public virtual Meter DynamicTyreRadius + { + get { + var queryString = XMLHelper.QueryLocalName( + XMLNames.Vehicle_Components, + XMLNames.Component_AxleWheels, + XMLNames.ComponentDataWrapper, + XMLNames.AxleWheels_Axles, + XMLNames.AxleWheels_Axles_Axle + ); + queryString += string.Format( + "/*[local-name()='{0}' and text()='{1}']/ancestor-or-self::*[local-name()='{2}']//*[local-name()='{3}']", + XMLNames.AxleWheels_Axles_Axle_AxleType, AxleType.VehicleDriven.ToString(), + XMLNames.AxleWheels_Axles_Axle, XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius); + var node = BaseNode.SelectSingleNode(queryString); + return node?.InnerText.ToDouble().SI(Unit.SI.Milli.Meter).Cast<Meter>(); + } + } + + public virtual IList<ITorqueLimitInputData> TorqueLimits + { + get { + var retVal = new List<ITorqueLimitInputData>(); + + var tqLimits = GetNode(XMLNames.Vehicle_TorqueLimits, required: false); + if (tqLimits == null) { + return retVal; + } + + var entries = GetNodes(XMLNames.Vehicle_TorqueLimits_Entry, tqLimits); + foreach (XmlNode entry in entries) { + retVal.Add( + new TorqueLimitInputData() { + Gear = GetAttribute(entry, XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr).ToInt(), + MaxTorque = GetAttribute(entry, XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr).ToDouble().SI<NewtonMeter>() + }); + } + + return retVal; + } + } + + + public virtual Meter Height + { + get { return GetNode("VehicleHeight")?.InnerText.ToDouble().SI<Meter>(); } + } + + public IVehicleComponentsEngineering Components + { + get { return _components ?? (_components = ComponentReader.ComponentInputData); } + } + + #endregion + + + public virtual RetarderType RetarderType + { + get { return GetString(XMLNames.Vehicle_RetarderType).ParseEnum<RetarderType>(); } + } + + public virtual double RetarderRatio + { + get { return GetDouble(XMLNames.Vehicle_RetarderRatio); } + } + + + public virtual AngledriveType AngledriveType + { + get { return GetString(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); } + } + + public virtual IXMLEngineeringJobInputData Job { get; } + + #region Implementation of IPTOTransmissionInputData + + public virtual string PTOTransmissionType + { + get { return GetString(XMLNames.Vehicle_PTOType); } + } + + public virtual TableData PTOLossMap + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Vehicle_PTOIdleLossMap, XMLNames.Vehicle_PTOIdleLossMap_Entry, + AttributeMappings.PTOLossMap); + } + } + + public virtual TableData PTOCycle + { + get { + return XMLHelper.ReadEntriesOrResource( + BaseNode, DataSource.SourcePath, XMLNames.Vehicle_PTOCycle, XMLNames.Vehicle_PTOCycle_Entry, + AttributeMappings.PTOCycleMap); + } + } + + #endregion + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + + internal class XMLEngineeringVehicleDataProviderV10 : XMLEngineeringVehicleDataProviderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringVehicleDataProviderV10( + IXMLEngineeringJobInputData jobProvider, XmlNode vehicleNode, string fullFilename) : base( + jobProvider, vehicleNode, fullFilename) { } + + #region Overrides of XMLEngineeringVehicleDataProviderV07 + + protected override string SchemaNamespace + { + get { return NAMESPACE_URI; } + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs new file mode 100644 index 0000000000..58cdedf66e --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs @@ -0,0 +1,72 @@ +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider +{ + internal class XMLTyreEngineeringDataProviderV10 : AbstractEngineeringXMLComponentDataProvider, IXMLTyreData + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLTyreEngineeringDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : + base(vehicle, baseNode, source) + { + SourceType = (vehicle as IXMLResource).DataSource.SourceFile == source ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile; + } + + #region Implementation of ITyreDeclarationInputData + + public virtual string Dimension + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Dimension, required:false)?.InnerText; } + } + + public virtual double RollResistanceCoefficient + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_RRCISO, required: false)?.InnerText.ToDouble() ?? double.NaN; } + } + + public virtual Newton TyreTestLoad + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_FzISO, required: false)?.InnerText.ToDouble().SI<Newton>(); } + } + + #endregion + + #region Implementation of ITyreEngineeringInputData + + public virtual KilogramSquareMeter Inertia + { + get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Inertia, required: false)?.InnerText.ToDouble().SI<KilogramSquareMeter>(); } + } + + public virtual Meter DynamicTyreRadius + { + get { + return GetNode(XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius, required: false)?.InnerText.ToDouble().SI(Unit.SI.Milli.Meter).Cast<Meter>(); + } + } + + #endregion + + #region Overrides of AbstractXMLResource + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + + protected override DataSourceType SourceType { get; } + + #endregion + } + + internal class XMLTyreEngineeringDataProviderV10TEST : XMLTyreEngineeringDataProviderV10 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST; + + public XMLTyreEngineeringDataProviderV10TEST(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(vehicle, baseNode, source) { } + + protected override string SchemaNamespace { get { return NAMESPACE_URI; } } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs deleted file mode 100644 index 2b7098c4ef..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Xml; -using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory -{ - public interface IEngineeringInjectFactory - { - IXMLEngineeringInputData CreateInputProvider(string version, XmlDocument xmldoc, string fileName); - - IXMLEngineeringInputReader CreateInputReader( - string version, IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml); - } -} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs new file mode 100644 index 0000000000..b8a952b600 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs @@ -0,0 +1,77 @@ +using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory +{ + public interface IEngineeringInjectFactory + { + IXMLEngineeringInputData CreateInputProvider(string version, XmlDocument xmldoc, string fileName); + + IXMLEngineeringInputReader CreateInputReader( + string version, IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml); + + IXMLJobDataReader CreateJobReader( + string version, IXMLEngineeringJobInputData jobData, XmlNode jobNode, bool verifyXML); + + + IXMLDriverDataReader CreateDriverReader(string version, IXMLEngineeringDriverData driverData, XmlNode driverDataNode, bool verifyXML); + + IXMLComponentsReader CreateComponentReader(string version, IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML); + + IXMLComponentsReader CreateAxleReader(string version, IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML); + + + IXMLEngineeringJobInputData CreateJobData(string version, XmlNode node, IXMLEngineeringInputData inputProvider, string fileName); + + IXMLEngineeringDriverData CreateDriverData(string version, IXMLEngineeringInputData inputData, + XmlNode driverDataNode, string fsBasePath); + + IXMLEngineeringGearshiftData CreateShiftParametersData(string version, XmlNode node); + + IXMLCyclesDataProvider CreateCycleData(string version, IEngineeringJobInputData jobData, XmlNode baseNode, string basePath); + + IXMLEngineeringVehicleData CreateVehicleData(string version, IXMLEngineeringJobInputData jobProvider, XmlNode vehicleNode, string fullFilename); + + IXMLAxleEngineeringData CreateAxleData(string version, XmlNode node, IXMLEngineeringVehicleData vehicle); + + IXMLGearData CreateGearData(string version, XmlNode gearNode, string basePath); + + IXMLAuxiliaryData CreateAuxData(string version, XmlNode node, string basePath); + + IXMLAxlegearData CreateAxlegearData(string version, IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath); + + IXMLAngledriveData CreateAngledriveData(string version, IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath); + + IXMLEngineData CreateEngineData(string version, IXMLEngineeringVehicleData vehicle, + XmlNode vehicleNode, string fsBasePath); + + IXMLRetarderData CreateRetarderData(string version, IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath); + + IXMLAuxiliairesData CreateAuxiliariesData(string version, IXMLEngineeringVehicleData vehicle, XmlNode componentNode, string sourceFile); + + IXMLGearboxData CreateGearboxData(string version, IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath); + + IXMLAirdragData CreateAirdragData(string version, IXMLEngineeringVehicleData vehicle, + XmlNode axlegearNode, string fsBasePath); + + IXMLTorqueconverterData CreateTorqueconverterData(string version, IXMLEngineeringVehicleData vehicle, XmlNode node, string source); + + IXMLAxlesData CreateAxlesData(string version, IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source); + + IXMLTyreData CreateTyre(string version, IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source); + + IXMLEngineData CreateEngineOnlyEngine(string version, XmlNode node, string sourceFile); + + IXMLLookaheadData CreateLookAheadData(string version, IXMLEngineeringDriverData driverData, XmlNode node); + + IXMLOverspeedData CreateOverspeedData(string version, IXMLEngineeringDriverData driverData, XmlNode node); + + IXMLDriverAcceleration CreateAccelerationCurveData(string version, IXMLEngineeringDriverData driverData, XmlNode node); + IXMLEngineeringVehicleComponentsData CreateComponentData(string version, IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source); + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs new file mode 100644 index 0000000000..436f10e508 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs @@ -0,0 +1,38 @@ +using System.Xml; +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering +{ + public interface IXMLComponentsReader + { + IAxleGearInputData AxleGearInputData { get; } + + IAngledriveInputData AngularGearInputData { get; } + + IEngineEngineeringInputData EngineInputData { get; } + + IRetarderInputData RetarderInputData { get; } + + IAuxiliariesEngineeringInputData AuxiliaryData { get; } + + IGearboxEngineeringInputData GearboxData { get; } + + ITorqueConverterEngineeringInputData TorqueConverter { get; } + + IPTOTransmissionInputData PTOData { get; } + + IAirdragEngineeringInputData AirdragInputData { get; } + + IAxlesEngineeringInputData AxlesEngineeringInputData { get; } + + ITyreEngineeringInputData Tyre { get; } + + IVehicleComponentsEngineering ComponentInputData { get; } + + IAxleEngineeringInputData CreateAxle(XmlNode axleNode); + + ITransmissionInputData CreateGear(XmlNode gearNode); + + IAuxiliaryEngineeringInputData Create(XmlNode auxNode); + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs new file mode 100644 index 0000000000..b896ec0eba --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs @@ -0,0 +1,16 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering +{ + public interface IXMLDriverDataReader + { + ILookaheadCoastingInputData LookAheadData { get; } + + IOverSpeedEcoRollEngineeringInputData OverspeedData { get; } + + IXMLDriverAcceleration AccelerationCurveData { get; } + + IGearshiftEngineeringInputData ShiftParameters { get; } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs index 4b8dc29403..0ed673f29e 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs @@ -7,5 +7,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering IEngineeringJobInputData JobData { get; } IDriverEngineeringInputData DriverModel { get; } + } -} +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs new file mode 100644 index 0000000000..508af6f2a2 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs @@ -0,0 +1,13 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering +{ + public interface IXMLJobDataReader { + IEngineEngineeringInputData CreateEngineOnly { get; } + + IVehicleEngineeringInputData CreateVehicle { get; } + + IXMLCyclesDataProvider CreateCycles { get; } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs new file mode 100644 index 0000000000..cfe5a661b1 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLAirdragData : IAirdragEngineeringInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs new file mode 100644 index 0000000000..f4bb56fab3 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces { + public interface IXMLAngledriveData : IAngledriveInputData + { } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs new file mode 100644 index 0000000000..81cd5beb87 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs @@ -0,0 +1,9 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLAuxiliairesData : IAuxiliariesEngineeringInputData + { + IXMLComponentsReader Reader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs new file mode 100644 index 0000000000..38ae9e611f --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLAuxiliaryData : IAuxiliaryEngineeringInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs new file mode 100644 index 0000000000..e94c84b2fc --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs @@ -0,0 +1,9 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLAxleEngineeringData : IAxleEngineeringInputData, IXMLResource + { + IXMLComponentsReader Reader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs new file mode 100644 index 0000000000..0f45dac724 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLAxlegearData : IAxleGearInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs new file mode 100644 index 0000000000..1f66928edb --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs @@ -0,0 +1,9 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLAxlesData : IAxlesEngineeringInputData + { + IXMLComponentsReader Reader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs new file mode 100644 index 0000000000..76d20b7ce2 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLCyclesDataProvider + { + IList<ICycleData> Cycles { get; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs new file mode 100644 index 0000000000..5c24b6fe96 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs @@ -0,0 +1,9 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLDriverAcceleration + { + IDriverAccelerationData AccelerationCurve { get; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs new file mode 100644 index 0000000000..b5669537e5 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLEngineData : IEngineEngineeringInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs new file mode 100644 index 0000000000..a3aa113fe8 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs @@ -0,0 +1,9 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLEngineeringDriverData : IDriverEngineeringInputData, IXMLResource + { + IXMLDriverDataReader Reader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs new file mode 100644 index 0000000000..779d497a72 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs @@ -0,0 +1,7 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLEngineeringGearshiftData : IGearshiftEngineeringInputData, + ITorqueConverterEngineeringShiftParameterInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs index 23e47cf715..54fb54f151 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs @@ -1,4 +1,4 @@ -using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.InputData; namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces { diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs new file mode 100644 index 0000000000..d04a069034 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs @@ -0,0 +1,11 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLEngineeringJobInputData : IEngineeringJobInputData, IXMLResource + { + IXMLJobDataReader Reader { set; } + + IXMLEngineeringInputData InputData { get; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs new file mode 100644 index 0000000000..7e650b140a --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs @@ -0,0 +1,8 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLEngineeringVehicleComponentsData : IVehicleComponentsEngineering, IXMLResource { + IXMLComponentsReader ComponentReader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs new file mode 100644 index 0000000000..af56267af8 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs @@ -0,0 +1,18 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLEngineeringVehicleData : IVehicleEngineeringInputData, IPTOTransmissionInputData, IXMLResource + { + IXMLComponentsReader ComponentReader { set; } + + AngledriveType AngledriveType { get; } + + RetarderType RetarderType { get; } + + double RetarderRatio { get; } + + IXMLEngineeringJobInputData Job { get; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs new file mode 100644 index 0000000000..43cbfbc1b6 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLGearData : ITransmissionInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs new file mode 100644 index 0000000000..6a6e30593c --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs @@ -0,0 +1,9 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLGearboxData : IGearboxEngineeringInputData + { + IXMLComponentsReader Reader { set; } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs new file mode 100644 index 0000000000..4448fd17bb --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs @@ -0,0 +1,5 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces { + public interface IXMLLookaheadData : ILookaheadCoastingInputData { } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs new file mode 100644 index 0000000000..3964d013ca --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs @@ -0,0 +1,8 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces { + public interface IXMLOverspeedData : IOverSpeedEcoRollEngineeringInputData + { + + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs new file mode 100644 index 0000000000..036599682c --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLRetarderData : IRetarderInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs new file mode 100644 index 0000000000..9f723b7313 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLTorqueconverterData : ITorqueConverterEngineeringInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs new file mode 100644 index 0000000000..cf2a984c7a --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs @@ -0,0 +1,6 @@ +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces +{ + public interface IXMLTyreData : ITyreEngineeringInputData { } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs new file mode 100644 index 0000000000..db3c326691 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs @@ -0,0 +1,28 @@ +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules +{ + public class XMLEngineeringReaderTestOverrides : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + // testing derived xml data types + Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV10TEST>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineDataProviderV10TEST.NAMESPACE_URI)); + Bind<IXMLTyreData>().To<XMLTyreEngineeringDataProviderV10TEST>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLTyreEngineeringDataProviderV10TEST.NAMESPACE_URI)); + + Bind<IXMLAxleEngineeringData>().To<XMLAxleEngineeringDataV10TEST>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLAxleEngineeringDataV10TEST.NAMESPACE_URI)); + Bind<IXMLComponentsReader>().To<XMLComponentsEngineeringReaderV10TEST>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLComponentsEngineeringReaderV10TEST.NAMESPACE_URI)); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs new file mode 100644 index 0000000000..6f7b3c8c1f --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs @@ -0,0 +1,84 @@ +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules +{ + public class XMLEngineeringReaderV07InjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IXMLEngineeringInputData>().To<XMLEngineeringInputDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputDataProviderV07.NAMESPACE_URI)); + Bind<IXMLEngineeringInputReader>().To<XMLEngineeringInputReaderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputReaderV07.NAMESPACE_URI)); + + Bind<IXMLEngineeringJobInputData>().To<XMLEngineeringJobInputDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringJobInputDataProviderV07.NAMESPACE_URI)); + + Bind<IXMLJobDataReader>().To<XMLJobDataReaderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLJobDataReaderV07.NAMESPACE_URI)); + + Bind<IXMLEngineeringDriverData>().To<XMLEngineeringDriverDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverDataProviderV07.NAMESPACE_URI)); + + Bind<IXMLDriverDataReader>().To<XMLDriverDataReaderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverDataReaderV07.NAMESPACE_URI)); + + Bind<IXMLEngineeringGearshiftData>().To<XMLEngineeringGearshiftDataV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearshiftDataV07.NAMESPACE_URI)); + + Bind<IXMLCyclesDataProvider>().To<XMLCyclesDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLCyclesDataProviderV07.NAMESPACE_URI)); + + Bind<IXMLEngineeringVehicleData>().To<XMLEngineeringVehicleDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleDataProviderV07.NAMESPACE_URI)); + Bind<IXMLComponentsReader>().To<XMLComponentsEngineeringReaderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLComponentsEngineeringReaderV07.NAMESPACE_URI)); + + Bind<IXMLEngineeringVehicleComponentsData>().To<XMLEngineeringVehicleComponentsDataProviderV07>() + .Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleComponentsDataProviderV07.NAMESPACE_URI)); + + Bind<IXMLAxleEngineeringData>().To<XMLAxleEngineeringDataV07>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLAxleEngineeringDataV07.NAMESPACE_URI)); + Bind<IXMLGearData>().To<XMLGearDataV07>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLGearDataV07.NAMESPACE_URI)); + Bind<IXMLAuxiliaryData>().To<XMLAuxiliaryEngineeringDataV07>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLAuxiliaryEngineeringDataV07.NAMESPACE_URI)); + Bind<IXMLAxlegearData>().To<XMLEngineeringAxlegearDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlegearDataProviderV07.NAMESPACE_URI)); + Bind<IXMLAngledriveData>().To<XMLEngineeringAngledriveDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAngledriveDataProviderV07.NAMESPACE_URI)); + Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineDataProviderV07.NAMESPACE_URI)); + Bind<IXMLRetarderData>().To<XMLEngineeringRetarderDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringRetarderDataProviderV07.NAMESPACE_URI)); + Bind<IXMLAuxiliairesData>().To<XMLEngineeringAuxiliariesDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliariesDataProviderV07.NAMESPACE_URI)); + Bind<IXMLGearboxData>().To<XMLEngineeringGearboxDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearboxDataProviderV07.NAMESPACE_URI)); + Bind<IXMLAirdragData>().To<XMLEngineeringAirdragDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAirdragDataProviderV07.NAMESPACE_URI)); + Bind<IXMLTorqueconverterData>().To<XMLEngineeringTorqueConverterDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTorqueConverterDataProviderV07.NAMESPACE_URI)); + Bind<IXMLAxlesData>().To<XMLEngineeringAxlesDataProviderV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlesDataProviderV07.NAMESPACE_URI)); + + Bind<IXMLLookaheadData>().To<XMLEngineeringDriverLookAheadV07>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverLookAheadV07.NAMESPACE_URI)); + + Bind<IXMLOverspeedData>().To<XMLEngineeringOverspeedV07>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringOverspeedV07.NAMESPACE_URI)); + + Bind<IXMLDriverAcceleration>().To<XMLDriverAccelerationV07>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverAccelerationV07.NAMESPACE_URI)); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs new file mode 100644 index 0000000000..42065f596c --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs @@ -0,0 +1,86 @@ +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules +{ + public class XMLEngineeringReaderV10InjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IXMLEngineeringInputData>().To<XMLEngineeringInputDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputDataProviderV10.NAMESPACE_URI)); + Bind<IXMLEngineeringInputReader>().To<XMLEngineeringInputReaderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputReaderV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringJobInputData>().To<XMLEngineeringJobInputDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringJobInputDataProviderV10.NAMESPACE_URI)); + + Bind<IXMLJobDataReader>().To<XMLJobDataReaderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLJobDataReaderV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringDriverData>().To<XMLEngineeringDriverDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverDataProviderV10.NAMESPACE_URI)); + + Bind<IXMLDriverDataReader>().To<XMLDriverDataReaderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverDataReaderV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringGearshiftData>().To<XMLEngineeringGearshiftDataV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearshiftDataV10.NAMESPACE_URI)); + + Bind<IXMLCyclesDataProvider>().To<XMLCyclesDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLCyclesDataProviderV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringVehicleData>().To<XMLEngineeringVehicleDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleDataProviderV10.NAMESPACE_URI)); + Bind<IXMLComponentsReader>().To<XMLComponentsEngineeringReaderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLComponentsEngineeringReaderV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringVehicleComponentsData>().To<XMLEngineeringVehicleComponentsDataProviderV10>() + .Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleComponentsDataProviderV10.NAMESPACE_URI)); + + Bind<IXMLAxleEngineeringData>().To<XMLAxleEngineeringDataV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLAxleEngineeringDataV10.NAMESPACE_URI)); + Bind<IXMLGearData>().To<XMLGearDataV10>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLGearDataV10.NAMESPACE_URI)); + Bind<IXMLAuxiliaryData>().To<XMLAuxiliaryEngineeringDataV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLAuxiliaryEngineeringDataV10.NAMESPACE_URI)); + Bind<IXMLAxlegearData>().To<XMLEngineeringAxlegearDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlegearDataProviderV10.NAMESPACE_URI)); + Bind<IXMLAngledriveData>().To<XMLEngineeringAngledriveDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAngledriveDataProviderV10.NAMESPACE_URI)); + Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineDataProviderV10.NAMESPACE_URI)); + Bind<IXMLRetarderData>().To<XMLEngineeringRetarderDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringRetarderDataProviderV10.NAMESPACE_URI)); + Bind<IXMLAuxiliairesData>().To<XMLEngineeringAuxiliariesDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliariesDataProviderV10.NAMESPACE_URI)); + Bind<IXMLGearboxData>().To<XMLEngineeringGearboxDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearboxDataProviderV10.NAMESPACE_URI)); + Bind<IXMLAirdragData>().To<XMLEngineeringAirdragDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAirdragDataProviderV10.NAMESPACE_URI)); + Bind<IXMLTorqueconverterData>().To<XMLEngineeringTorqueConverterDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTorqueConverterDataProviderV10.NAMESPACE_URI)); + Bind<IXMLAxlesData>().To<XMLEngineeringAxlesDataProviderV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlesDataProviderV10.NAMESPACE_URI)); + Bind<IXMLTyreData>().To<XMLTyreEngineeringDataProviderV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLTyreEngineeringDataProviderV10.NAMESPACE_URI)); + + Bind<IXMLLookaheadData>().To<XMLEngineeringDriverLookAheadV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverLookAheadV10.NAMESPACE_URI)); + + Bind<IXMLOverspeedData>().To<XMLEngineeringOverspeedV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringOverspeedV10.NAMESPACE_URI)); + + Bind<IXMLDriverAcceleration>().To<XMLDriverAccelerationV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverAccelerationV10.NAMESPACE_URI)); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs new file mode 100644 index 0000000000..84d95595a0 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs @@ -0,0 +1,90 @@ +using System; +using System.IO; +using System.Xml; +using System.Xml.Schema; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; +using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader +{ + internal abstract class AbstractExternalResourceReader + { + protected XmlNode BaseNode; + protected bool VerifyXML; + protected IXMLResource ParentComponent; + + public AbstractExternalResourceReader(IXMLResource parent, XmlNode baseNode, bool verifyXML) + { + BaseNode = baseNode; + VerifyXML = verifyXML; + ParentComponent = parent; + } + + protected virtual T CreateComponent<T>( + string component, Func<string, XmlNode, string, T> componentCreator, bool allowExternalResource = true, + bool createDummy = false) + { + var componentNode = BaseNode.LocalName == component + ? BaseNode + : BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(component)); + var dataNode = componentNode?.SelectSingleNode(string.Format("./*[local-name()='{0}']", XMLNames.ComponentDataWrapper)) ?? componentNode; + if (componentNode != null) { + var version = XMLHelper.GetSchemaVersion(dataNode ?? componentNode); + try { + return componentCreator(version, componentNode, ParentComponent.DataSource.SourceFile); + } catch (Exception e) { + throw new VectoException("Failed to create component {0} version {1}.", e, component, version); + } + } + + if (!allowExternalResource && !createDummy) { + throw new VectoException("Component {0} not found!", component); + } + + var componentResourceNode = BaseNode.SelectSingleNode( + string.Format( + "./*[local-name()='{0}' and @{1}='{2}' and @{3}='{4}']", XMLNames.ExternalResource, + XMLNames.ExtResource_Component_Attr, component, XMLNames.ExtResource_Type_Attr, + XMLNames.ExtResource_Type_Value_XML)); + if (componentResourceNode != null) { + try { + var componentFile = componentResourceNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText; + var fullFileName = componentFile == null ? null : Path.Combine(ParentComponent.DataSource.SourcePath, componentFile); + if (componentFile == null || !File.Exists(fullFileName)) { + throw new VectoException( + "Referenced component file '{1}' for component '{0}' not found!", component, componentFile); + } + + var componentDocument = new XmlDocument(); + componentDocument.Load(XmlReader.Create(fullFileName)); + if (VerifyXML) { + new XMLValidator(componentDocument, null, XMLValidator.CallBackExceptionOnError).ValidateXML( + XmlDocumentType.EngineeringJobData); + } + + var version = XMLHelper.GetSchemaVersion(componentDocument.DocumentElement); + try { + return componentCreator(version, componentDocument.DocumentElement, fullFileName); + } catch (Exception e) { + throw new VectoException("Failed to create component {0} version {1}.", e, component, version); + } + } catch (XmlSchemaValidationException validationException) { + throw new VectoException("Validation of XML-file for component {0} failed", validationException, component); + } + } + + if (createDummy) { + try { + return componentCreator(null, null, null); + } catch (Exception e) { + throw new VectoException("Failed to create dummy instance for component {0}.", e, component); + } + } + + throw new VectoException("Component {0} not found!", component); + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs new file mode 100644 index 0000000000..e7a5231596 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs @@ -0,0 +1,268 @@ +using System; +using System.Xml; +using Ninject; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader +{ + internal class XMLComponentsEngineeringReaderV07 : AbstractExternalResourceReader, IXMLComponentsReader + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + //protected string Version; + protected IXMLEngineeringVehicleData Vehicle; + + protected IAxleGearInputData _axleGearInputData; + protected IAngledriveInputData _angularGearInputData; + protected IEngineEngineeringInputData _engineInputData; + protected IRetarderInputData _retarderInputData; + protected IAuxiliariesEngineeringInputData _auxiliaryData; + protected IGearboxEngineeringInputData _gearboxData; + protected IAirdragEngineeringInputData _airdragInputData; + protected ITorqueConverterEngineeringInputData _torqueConverterInputData; + protected IAxlesEngineeringInputData _axlesInputData; + protected ITyreEngineeringInputData _tyre; + protected IVehicleComponentsEngineering _components; + + [Inject] + public IEngineeringInjectFactory Factory { protected get; set; } + + public XMLComponentsEngineeringReaderV07(IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML) : + base(vehicle, componentsNode, verifyXML) + { + if (componentsNode == null) { + throw new VectoException("component node must not be null!"); + } + + BaseNode = componentsNode; + Vehicle = vehicle; + } + + #region Implementation of IEngineeringComponentsFactory + + public virtual IAxleGearInputData AxleGearInputData + { + get { + return _axleGearInputData ?? (_axleGearInputData = CreateComponent(XMLNames.Component_Axlegear, AxlegearCreator)); + } + } + + public virtual IAngledriveInputData AngularGearInputData + { + get { + return _angularGearInputData ?? (_angularGearInputData = CreateComponent( + XMLNames.Component_Angledrive, AngledriveCreator, false, true)); + } + } + + public virtual IEngineEngineeringInputData EngineInputData + { + get { return _engineInputData ?? (_engineInputData = CreateComponent(XMLNames.Component_Engine, EngineCreator)); } + } + + public virtual IRetarderInputData RetarderInputData + { + get { + return _retarderInputData ?? (_retarderInputData = CreateComponent( + XMLNames.Component_Retarder, RetarderCreator, false, true)); + } + } + + public virtual IAuxiliariesEngineeringInputData AuxiliaryData + { + get { + return _auxiliaryData ?? (_auxiliaryData = CreateComponent(XMLNames.Component_Auxiliaries, AuxiliariesCreator)); + } + } + + public virtual IGearboxEngineeringInputData GearboxData + { + get { return _gearboxData ?? (_gearboxData = CreateComponent(XMLNames.Component_Gearbox, GearboxCreator)); } + } + + public virtual IPTOTransmissionInputData PTOData + { + get { return Vehicle; } + } + + public virtual IAirdragEngineeringInputData AirdragInputData + { + get { + return _airdragInputData ?? (_airdragInputData = CreateComponent(XMLNames.Component_AirDrag, AirdragCreator)); + } + } + + public virtual IAxlesEngineeringInputData AxlesEngineeringInputData + { + get { return _axlesInputData ?? (_axlesInputData = CreateComponent(XMLNames.Component_AxleWheels, AxlesCreator)); } + } + + public virtual ITorqueConverterEngineeringInputData TorqueConverter + { + get { + return _torqueConverterInputData ?? (_torqueConverterInputData = CreateComponent( + XMLNames.Component_TorqueConverter, TorqueConverterCreator, true, true)); + } + } + + public virtual ITyreEngineeringInputData Tyre + { + get { return _tyre ?? (_tyre = CreateComponent(XMLNames.AxleWheels_Axles_Axle_Tyre, TyreCreator)); } + } + + public virtual IVehicleComponentsEngineering ComponentInputData { get { + return _components ?? (_components = CreateComponent(XMLNames.Vehicle_Components, ComponentsCreator)); + } } + + + + + public IAxleEngineeringInputData CreateAxle(XmlNode axleNode) + { + var version = XMLHelper.GetSchemaVersion(axleNode); + try { + var axle = Factory.CreateAxleData(version, axleNode, Vehicle); + axle.Reader = Factory.CreateAxleReader(version, Vehicle, axleNode, VerifyXML); + return axle; + } 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); + } + } + + public ITransmissionInputData CreateGear(XmlNode gearNode) + { + var version = XMLHelper.GetSchemaVersion(gearNode); + try { + return Factory.CreateGearData(version, gearNode, (Vehicle as IXMLResource).DataSource.SourcePath); + } 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); + } + } + + public IAuxiliaryEngineeringInputData Create(XmlNode auxNode) + { + var version = XMLHelper.GetSchemaVersion(auxNode); + try { + return Factory.CreateAuxData(version, auxNode, (Vehicle as IXMLResource).DataSource.SourcePath); + } catch (Exception e) { + throw new VectoException("Unsupported XML Version! Node: {0} Version: {2}", e, auxNode.LocalName, version); + } + } + + #endregion + + #region FactoryMethods + + protected IVehicleComponentsEngineering ComponentsCreator(string version, XmlNode componentNode, string sourcefile) + { + var components = Factory.CreateComponentData(version, Vehicle, componentNode, sourcefile); + components.ComponentReader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML); + return components; + } + + protected virtual IAxleGearInputData AxlegearCreator(string version, XmlNode componentNode, string sourceFile) + { + return Factory.CreateAxlegearData(version, Vehicle, componentNode, sourceFile); + } + + protected IAngledriveInputData AngledriveCreator(string version, XmlNode componentNode, string sourceFile) + { + if (version == null) { + return new XMLEngineeringAngledriveDataProviderV07(Vehicle, componentNode, sourceFile); + } + + return Factory.CreateAngledriveData(version, Vehicle, componentNode, sourceFile); + } + + protected virtual IEngineEngineeringInputData EngineCreator(string version, XmlNode componentNode, string sourceFile) + { + return Factory.CreateEngineData(version, Vehicle, componentNode, sourceFile); + } + + protected virtual IRetarderInputData RetarderCreator(string version, XmlNode componentNode, string sourceFile) + { + if (version == null) { + return new XMLEngineeringRetarderDataProviderV07(Vehicle, componentNode, sourceFile); + } + + return Factory.CreateRetarderData(version, Vehicle, componentNode, sourceFile); + } + + protected virtual IAuxiliariesEngineeringInputData AuxiliariesCreator( + string version, XmlNode componentNode, string sourceFile) + { + var aux = Factory.CreateAuxiliariesData(version, Vehicle, componentNode, sourceFile); + aux.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML); + return aux; + } + + protected virtual IGearboxEngineeringInputData GearboxCreator( + string version, XmlNode componentNode, string sourceFile) + { + var gbx = Factory.CreateGearboxData(version, Vehicle, componentNode, sourceFile); + gbx.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML); + return gbx; + } + + protected virtual IAirdragEngineeringInputData AirdragCreator( + string version, XmlNode componentNode, string sourceFile) + { + return Factory.CreateAirdragData(version, Vehicle, componentNode, sourceFile); + } + + protected ITorqueConverterEngineeringInputData TorqueConverterCreator( + string version, XmlNode componentNode, string sourceFile) + { + if (version == null) { + return new XMLEngineeringTorqueConverterDataProviderV07(Vehicle, componentNode, sourceFile); + } + + return Factory.CreateTorqueconverterData(version, Vehicle, componentNode, sourceFile); + } + + protected IAxlesEngineeringInputData AxlesCreator(string version, XmlNode componentNode, string sourceFile) + { + var axles = Factory.CreateAxlesData(version, Vehicle, componentNode, sourceFile); + axles.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML); + return axles; + } + + protected ITyreEngineeringInputData TyreCreator(string version, XmlNode componentNode, string sourceFile) + { + return Factory.CreateTyre(version, Vehicle, componentNode, sourceFile); + } + + #endregion + } + + internal class XMLComponentsEngineeringReaderV10 : XMLComponentsEngineeringReaderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLComponentsEngineeringReaderV10(IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML) : + base(vehicle, componentsNode, verifyXML) { } + } + + internal class XMLComponentsEngineeringReaderV10TEST : XMLComponentsEngineeringReaderV10 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST; + + public XMLComponentsEngineeringReaderV10TEST(IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML) : base(vehicle, componentsNode, verifyXML) { } + + public override ITyreEngineeringInputData Tyre + { + get { return _tyre ?? (_tyre = CreateComponent("Tire", TyreCreator)); } + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs new file mode 100644 index 0000000000..c9bbdca1d8 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs @@ -0,0 +1,125 @@ +using System; +using System.Xml; +using Ninject; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader { + internal class XMLDriverDataReaderV07 : IXMLDriverDataReader + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected XmlNode DriverDataNode; + protected IXMLEngineeringDriverData DriverData; + + [Inject] + public IEngineeringInjectFactory Factory { protected get; set; } + + public XMLDriverDataReaderV07(IXMLEngineeringDriverData driverData, XmlNode driverDataNode, bool verifyXML) + { + DriverData = driverData; + DriverDataNode = driverDataNode; + } + + public ILookaheadCoastingInputData LookAheadData + { + get { + return CreateData( + XMLNames.DriverModel_LookAheadCoasting, (version, node) => Factory.CreateLookAheadData(version, DriverData, node)); + } + } + + public IOverSpeedEcoRollEngineeringInputData OverspeedData + { + get { + return CreateData( + XMLNames.DriverModel_Overspeed, (version, node) => Factory.CreateOverspeedData(version, DriverData, node)); + } + } + + public IXMLDriverAcceleration AccelerationCurveData + { + get { + return CreateData( + XMLNames.DriverModel_DriverAccelerationCurve, + (version, node) => version == null + ? DefaultAccelerationCurve() + : Factory.CreateAccelerationCurveData(version, DriverData, node), false); + } + } + + public IGearshiftEngineeringInputData ShiftParameters + { + get { + return CreateData( + XMLNames.DriverModel_ShiftStrategyParameters, ShiftParametersCreator, false); + } + } + + private IGearshiftEngineeringInputData ShiftParametersCreator(string version, XmlNode node) + { + if (version == null) { + return new XMLEngineeringGearshiftDataV07(null); + } + return Factory.CreateShiftParametersData(version, node); + } + + protected virtual T CreateData<T>(string elementName, Func<string, XmlNode, T> creator, bool required = true) + { + var node = GetNode(elementName, required); + if (!required && node == null) { + try { + return creator(null, node); + } catch (Exception e) { + throw new VectoException("Failed to create dummy data provider", e); + } + } + + var version = XMLHelper.GetSchemaVersion(node); + try { + return creator(version, node); + } catch (Exception e) { + throw new VectoException("Unsupported XML Version! Node: {0} Version: {1}", e, node.LocalName, version); + } + } + + + protected virtual XmlNode GetNode(string elementName, bool required = true) + { + var retVal = + DriverDataNode.SelectSingleNode(XMLHelper.QueryLocalName(elementName)); + if (required && retVal == null) { + throw new VectoException("Element {0} not found!", elementName); + } + + return retVal; + } + + private static IXMLDriverAcceleration DefaultAccelerationCurve() + { + try { + var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC.Truck" + + Constants.FileExtensions.DriverAccelerationCurve; + return new XMLDriverAccelerationV07( + VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName)); + } catch (Exception e) { + throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e); + } + } + } + + internal class XMLDriverDataReaderV10 : XMLDriverDataReaderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLDriverDataReaderV10(IXMLEngineeringDriverData driverData, XmlNode driverDataNode, bool verifyXML) : base(driverData, driverDataNode, verifyXML) { } + } + +} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs new file mode 100644 index 0000000000..ad7150b5cc --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs @@ -0,0 +1,64 @@ +using System.Xml; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader +{ + internal class XMLEngineeringInputReaderV07 : AbstractExternalResourceReader, IXMLEngineeringInputReader + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected XmlNode JobNode; + protected IXMLEngineeringInputData InputData; + private IEngineeringJobInputData _jobData; + private IDriverEngineeringInputData _driverModel; + + [Inject] + public IEngineeringInjectFactory Factory { protected get; set; } + + public XMLEngineeringInputReaderV07(IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml) : + base(inputData, documentElement, verifyXml) + { + JobNode = documentElement; + InputData = inputData; + } + + public IEngineeringJobInputData JobData + { + get { return _jobData ?? (_jobData = CreateComponent(XMLNames.VectoInputEngineering, JobCreator, false)); } + } + + public IDriverEngineeringInputData DriverModel + { + get { return _driverModel ?? (_driverModel = CreateComponent(XMLNames.Component_DriverModel, DriverModelCreator)); } + } + + + public IEngineeringJobInputData JobCreator(string version, XmlNode baseNode, string filename) + { + var job = Factory.CreateJobData(version, JobNode, InputData, (InputData as IXMLResource).DataSource.SourceFile); + job.Reader = Factory.CreateJobReader(version, job, JobNode, VerifyXML); + return job; + } + + public IDriverEngineeringInputData DriverModelCreator(string version, XmlNode baseNode, string filename) + { + var driverData = Factory.CreateDriverData(version, InputData, baseNode, (InputData as IXMLResource).DataSource.SourceFile); + driverData.Reader = Factory.CreateDriverReader(version, driverData, baseNode, VerifyXML); + return driverData; + } + } + + internal class XMLEngineeringInputReaderV10 : XMLEngineeringInputReaderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringInputReaderV10( + IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml) : + base(inputData, documentElement, verifyXml) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs new file mode 100644 index 0000000000..40920d11e1 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs @@ -0,0 +1,69 @@ +using System.Xml; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader +{ + internal class XMLJobDataReaderV07 : AbstractExternalResourceReader, IXMLJobDataReader + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07; + + protected XmlNode JobNode; + protected IXMLEngineeringJobInputData JobData; + + private IVehicleEngineeringInputData _vehicle; + private IEngineEngineeringInputData _engine; + + [Inject] public IEngineeringInjectFactory Factory { protected get; set; } + + public XMLJobDataReaderV07(IXMLEngineeringJobInputData jobData, XmlNode jobNode, bool verifyXML) : base( + jobData, jobNode, verifyXML) + { + JobNode = jobNode; + JobData = jobData; + } + + public IEngineEngineeringInputData CreateEngineOnly + { + get { return _engine ?? (_engine = CreateComponent(XMLNames.Component_Engine, (version, node, sourceFile) => Factory.CreateEngineOnlyEngine(version, node, sourceFile))); } + } + + public IVehicleEngineeringInputData CreateVehicle + { + get { return _vehicle ?? (_vehicle = CreateComponent(XMLNames.Component_Vehicle, VehicleCreator)); } + } + + + public IXMLCyclesDataProvider CreateCycles + { + get { + var cyclesNode = JobNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.VectoJob_MissionCycles)); + var version = XMLHelper.GetSchemaVersion(cyclesNode); + + return Factory.CreateCycleData(version, JobData, JobNode, JobData.DataSource.SourcePath); + } + } + + + private IVehicleEngineeringInputData VehicleCreator(string version, XmlNode componentNode, string sourceFile) + { + var vehicle = Factory.CreateVehicleData(version, JobData, componentNode, sourceFile); + vehicle.ComponentReader = Factory.CreateComponentReader(version, vehicle, componentNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Vehicle_Components)), VerifyXML); + return vehicle; + } + + } + + + internal class XMLJobDataReaderV10 : XMLJobDataReaderV07 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLJobDataReaderV10(XMLEngineeringJobInputDataProviderV10 jobData, XmlNode jobNode, bool verifyXML) : base(jobData, jobNode, verifyXML) { } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs deleted file mode 100644 index 5e4f236b86..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs +++ /dev/null @@ -1,73 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Xml; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringAirdragDataProvider : AbstractEngineeringXMLComponentDataProvider, - IAirdragEngineeringInputData - { - public XMLEngineeringAirdragDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument axlegearDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, axlegearDocument, xmlBasePath, fsBasePath) {} - - public SquareMeter AirDragArea - { - get { return GetDoubleElementValue(XMLNames.Vehicle_AirDragArea).SI<SquareMeter>(); } - } - - public CrossWindCorrectionMode CrossWindCorrectionMode - { - get { return GetElementValue(XMLNames.Vehicle_CrossWindCorrectionMode).ParseEnum<CrossWindCorrectionMode>(); } - } - - public TableData CrosswindCorrectionMap - { - get { - return ReadTableData(AttributeMappings.CrossWindCorrectionMapping, - Helper.Query(XMLNames.Vehicle_CrosswindCorrectionData, XMLNames.Vehicle_CrosswindCorrectionData_Entry)); - } - } - - #region Implementation of IComponentInputData - - - - #endregion - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs deleted file mode 100644 index e24071b4a7..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs +++ /dev/null @@ -1,73 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Xml; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringAngledriveDataProvider : AbstractEngineeringXMLComponentDataProvider, IAngledriveInputData - { - public XMLEngineeringAngledriveDataProvider(XMLEngineeringInputDataProvider jobInputData, XmlDocument xmlDocument, - string xBasePath, string fsBasePath) : base(jobInputData, xmlDocument, xBasePath, fsBasePath) {} - - public AngledriveType Type - { - get { return InputData.VehicleData.AngledriveType; } - } - - public double Ratio - { - get { return GetDoubleElementValue(XMLNames.AngleDrive_Ratio); } - } - - public TableData LossMap - { - get { - if (ElementExists(Helper.Query(XMLNames.AngleDrive_TorqueLossMap, XMLNames.Angledrive_LossMap_Entry))) { - return ReadTableData(AttributeMappings.TransmissionLossmapMapping, - Helper.Query(XMLNames.AngleDrive_TorqueLossMap, XMLNames.Angledrive_LossMap_Entry)); - } - return ReadCSVResourceFile(XMLNames.AngleDrive_TorqueLossMap); - } - } - - public double Efficiency - { - get { - return GetDoubleElementValue(Helper.Query(XMLNames.AngleDrive_TorqueLossMap, XMLNames.AngleDrive_Efficiency)); - } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs deleted file mode 100644 index 5207e8e82d..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs +++ /dev/null @@ -1,139 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.InputData.Impl; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringAuxiliaryDataProvider : AbstractEngineeringXMLComponentDataProvider, - IAuxiliariesEngineeringInputData - { - public XMLEngineeringAuxiliaryDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument auxDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, auxDocument, xmlBasePath, fsBasePath) {} - - - public IList<IAuxiliaryDeclarationInputData> Auxiliaries - { - get { return AuxiliaryInputData().Cast<IAuxiliaryDeclarationInputData>().ToList(); } - } - - IList<IAuxiliaryEngineeringInputData> IAuxiliariesEngineeringInputData.Auxiliaries - { - get { return AuxiliaryInputData().Cast<IAuxiliaryEngineeringInputData>().ToList(); } - } - - private IEnumerable<AuxiliaryDataInputData> AuxiliaryInputData() - { - var retVal = new List<AuxiliaryDataInputData>(); - var auxiliaries = Navigator.Select(Helper.Query(XBasePath, XMLNames.Auxiliaries_Auxiliary), Manager); - while (auxiliaries.MoveNext()) { - var constantAux = auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad), Manager); - if (constantAux == null) { - retVal.Add(CreateMappingAuxiliary(auxiliaries)); - } else { - retVal.Add(new AuxiliaryDataInputData() { - ID = "ConstantAux", - AuxiliaryType = AuxiliaryDemandType.Constant, - ConstantPowerDemand = constantAux.ValueAsDouble.SI<Watt>() - }); - } - } - return retVal; - } - - protected AuxiliaryDataInputData CreateMappingAuxiliary(XPathNodeIterator auxiliaries) - { - var auxData = new AuxiliaryDataInputData { - AuxiliaryType = AuxiliaryDemandType.Mapping, - ID = auxiliaries.Current.GetAttribute("id", ""), - }; - var node = - auxiliaries.Current.SelectSingleNode(ExtCsvResourceTag, Manager); - if (node != null) { - var auxFile = node.GetAttribute(XMLNames.ExtResource_File_Attr, ""); - - if (!File.Exists(Path.Combine(FSBasePath, auxFile))) { - throw new VectoException("Auxiliary resource file {0} not found! Aux: {1}", auxFile, auxData.ID); - } - AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData, Path.Combine(FSBasePath, auxFile)); - } else { - var transmissionRatio = - auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_TransmissionRatioToEngine), - Manager); - if (transmissionRatio != null) { - auxData.TransmissionRatio = transmissionRatio.ValueAsDouble; - } - var efficiencyEngine = - auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_EfficiencyToEngine), Manager); - if (efficiencyEngine != null) { - auxData.EfficiencyToEngine = efficiencyEngine.ValueAsDouble; - } - var efficiencyAuxSupply = - auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_EfficiencyAuxSupply), Manager); - if (efficiencyAuxSupply != null) { - auxData.EfficiencyToSupply = efficiencyAuxSupply.ValueAsDouble; - } - auxData.DemandMap = ReadTableData(AttributeMappings.AuxMapMapping, - Helper.Query(XMLNames.Auxiliaries_Auxiliary_AuxMap, XMLNames.Auxiliaries_Auxiliary_AuxMap_Entry), - auxiliaries.Current); - - } - return auxData; - } - - public AuxiliaryModel AuxiliaryAssembly - { - get { return AuxiliaryModel.Classic; } - } - - public string AuxiliaryVersion - { - get { return ""; } - } - - public string AdvancedAuxiliaryFilePath - { - get { return ""; } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs deleted file mode 100644 index 6b1e3d5909..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs +++ /dev/null @@ -1,77 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Xml; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringAxlegearDataProvider : AbstractEngineeringXMLComponentDataProvider, IAxleGearInputData - { - public XMLEngineeringAxlegearDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument axlegearDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, axlegearDocument, xmlBasePath, fsBasePath) {} - - public double Ratio - { - get { return GetDoubleElementValue(XMLNames.Axlegear_Ratio); } - } - - public TableData LossMap - { - get { - if (ElementExists(Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry))) { - return ReadTableData(AttributeMappings.TransmissionLossmapMapping, - Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry)); - } - return ReadCSVResourceFile(XMLNames.Axlegear_TorqueLossMap); - } - } - - public double Efficiency - { - get { return GetDoubleElementValue(Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_Efficiency)); } - } - - public AxleLineType LineType - { - get { - return ElementExists(XMLNames.Axlegear_LineType) - ? GetElementValue(XMLNames.Axlegear_LineType).ParseEnum<AxleLineType>() - : AxleLineType.SinglePortalAxle; - } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs deleted file mode 100644 index 8d83f35a91..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs +++ /dev/null @@ -1,192 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.IO; -using System.Xml; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.Impl; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.SimulationComponent.Data; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringDriverDataProvider : AbstractEngineeringXMLComponentDataProvider, - IDriverEngineeringInputData - { - public XMLEngineeringDriverDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument driverDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, driverDocument, xmlBasePath, fsBasePath) {} - - IOverSpeedEcoRollEngineeringInputData IDriverEngineeringInputData.OverSpeedEcoRoll - { - get { - var minSpeedPath = Helper.Query(XMLNames.Component_DriverModel, - XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_MinSpeed); - var overSpeedPath = Helper.Query(XMLNames.Component_DriverModel, - XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_AllowedOverspeed); - var underSpeedPath = Helper.Query(XMLNames.Component_DriverModel, - XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_AllowedUnderspeed); - var retVal = new OverSpeedEcoRollInputData { - Mode = GetElementValue(Helper.Query(XMLNames.Component_DriverModel, - XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_Mode)).ParseEnum<DriverMode>(), - MinSpeed = ElementExists(minSpeedPath) - ? GetDoubleElementValue(minSpeedPath).KMPHtoMeterPerSecond() - : DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed, - OverSpeed = ElementExists(overSpeedPath) - ? GetDoubleElementValue(overSpeedPath).KMPHtoMeterPerSecond() - : DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed, - UnderSpeed = ElementExists(underSpeedPath) - ? GetDoubleElementValue(underSpeedPath).KMPHtoMeterPerSecond() - : DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed - }; - - return retVal; - } - } - - public TableData AccelerationCurve - { - get { - if (ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve))) { - return - ReadTableData(AttributeMappings.DriverAccelerationCurveMapping, - Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve, - XMLNames.DriverModel_DriverAccelerationCurve_Entry)); - } - //Log.Warn("Could not find file for acceleration curve. Trying lookup in declaration data."); - try { - var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC.Truck" + - Constants.FileExtensions.DriverAccelerationCurve; - return VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName); - } catch (Exception e) { - throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e); - } - } - } - - public ILookaheadCoastingInputData Lookahead - { - get { - var lookAheadXmlPath = Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_LookAheadCoasting); - - var retVal = new LookAheadCoastingInputData { - Enabled = - XmlConvert.ToBoolean( - GetElementValue(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_Enabled))), - LookaheadDistanceFactor = - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor)) - ? GetDoubleElementValue(Helper.Query(lookAheadXmlPath, - XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor)) - : DeclarationData.Driver.LookAhead.LookAheadDistanceFactor, - CoastingDecisionFactorOffset = - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset)) - ? GetDoubleElementValue(Helper.Query(lookAheadXmlPath, - XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset)) - : DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset, - CoastingDecisionFactorScaling = - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling)) - ? GetDoubleElementValue(Helper.Query(lookAheadXmlPath, - XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling)) - : DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling, - MinSpeed = ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_MinSpeed)) - ? GetDoubleElementValue(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_MinSpeed)) - .KMPHtoMeterPerSecond() - : DeclarationData.Driver.LookAhead.MinimumSpeed - }; - - if ( - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, - XMLNames.LookAheadCoasting_SpeedDependentDecisionFactor_Entry))) { - retVal.CoastingDecisionFactorTargetSpeedLookup = ReadTableData( - AttributeMappings.CoastingDFTargetSpeedLookupMapping, - Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, - XMLNames.LookAheadCoasting_SpeedDependentDecisionFactor_Entry)); - } else if ( - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, - XMLNames.ExternalResource))) { - var node = Navigator.SelectSingleNode(Helper.Query(XBasePath, lookAheadXmlPath, - XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, XMLNames.ExternalResource), Manager); - if (node != null && - XMLNames.ExtResource_Type_Value_CSV.Equals(node.GetAttribute(XMLNames.ExtResource_Type_Attr, ""))) { - retVal.CoastingDecisionFactorTargetSpeedLookup = - VectoCSVFile.Read(Path.Combine(FSBasePath, node.GetAttribute(XMLNames.ExtResource_File_Attr, ""))); - } - } else { - retVal.CoastingDecisionFactorTargetSpeedLookup = null; - } - - if ( - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, - XMLNames.LookAheadCoasting_VelocityDropDecisionFactor_Entry))) { - retVal.CoastingDecisionFactorVelocityDropLookup = - ReadTableData(AttributeMappings.CoastingDFVelocityDropLookupMapping, - Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, - XMLNames.LookAheadCoasting_VelocityDropDecisionFactor_Entry)); - } else if ( - ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, - XMLNames.ExternalResource))) { - var node = - Navigator.SelectSingleNode(Helper.Query(XBasePath, lookAheadXmlPath, - XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, XMLNames.ExternalResource), Manager); - if (node != null && - XMLNames.ExtResource_Type_Value_CSV.Equals(node.GetAttribute(XMLNames.ExtResource_Type_Attr, ""))) { - retVal.CoastingDecisionFactorVelocityDropLookup = - VectoCSVFile.Read(Path.Combine(FSBasePath, node.GetAttribute(XMLNames.ExtResource_File_Attr, ""))); - } - } else { - retVal.CoastingDecisionFactorVelocityDropLookup = null; - } - return retVal; - } - } - - public IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll - { - get { - var node = - Navigator.SelectSingleNode(Helper.Query(XBasePath, XMLNames.Component_DriverModel, XMLNames.DriverModel_Overspeed, - XMLNames.DriverModel_Overspeed_Mode), Manager); - return new OverSpeedEcoRollInputData() { - Mode = node != null ? DriverData.ParseDriverMode(node.Value) : DriverMode.Off - }; - } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs deleted file mode 100644 index 066653f4e6..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs +++ /dev/null @@ -1,144 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Xml; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringEngineDataProvider : AbstractEngineeringXMLComponentDataProvider, - IEngineEngineeringInputData - { - public XMLEngineeringEngineDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument engineDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, engineDocument, xmlBasePath, fsBasePath) {} - - public CubicMeter Displacement - { - get { return GetDoubleElementValue(XMLNames.Engine_Displacement).SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(); } - } - - public PerSecond IdleSpeed - { - get { return GetDoubleElementValue(XMLNames.Engine_IdlingSpeed).RPMtoRad(); } - } - - public double WHTCEngineering - { - get { return GetDoubleElementValue(XMLNames.Engine_WHTCEngineering); } - } - - public double WHTCMotorway - { - get { throw new VectoException("Property not available in Engineering Mode"); } - } - - public double WHTCRural - { - get { throw new VectoException("Property not available in Engineering Mode"); } - } - - public double WHTCUrban - { - get { throw new VectoException("Property not available in Engineering Mode"); } - } - - public double ColdHotBalancingFactor - { - get { throw new VectoException("Property not available in Engineering Mode"); } - } - - public double CorrectionFactorRegPer - { - get { - return 1; - //GetDoubleElementValue(XMLNames.Engine_CorrectionFactor_RegPer); - } - } - - public FuelType FuelType - { - get { return FuelType.DieselCI; //GetElementValue(XMLNames.Engine_FuelType).ParseEnum<FuelType>(); - } - } - - public TableData FuelConsumptionMap - { - get { - if (!ElementExists(Helper.Query(XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry))) { - return ReadCSVResourceFile(XMLNames.Engine_FuelConsumptionMap); - } - return ReadTableData(AttributeMappings.FuelConsumptionMapMapping, - Helper.Query(XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry)); - } - } - - public TableData FullLoadCurve - { - get { - if (!ElementExists(Helper.Query(XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FuelConsumptionMap_Entry))) { - return ReadCSVResourceFile(XMLNames.Engine_FullLoadAndDragCurve); - } - - return ReadTableData(AttributeMappings.EngineFullLoadCurveMapping, - Helper.Query(XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FuelConsumptionMap_Entry)); - } - } - - public Watt RatedPowerDeclared - { - get { return null; //GetDoubleElementValue(XMLNames.Engine_RatedPower).SI<Watt>(); - } - } - - public PerSecond RatedSpeedDeclared - { - get { return null; //GetDoubleElementValue(XMLNames.Engine_RatedSpeed).RPMtoRad(); - } - } - - public NewtonMeter MaxTorqueDeclared - { - get { return null; //GetDoubleElementValue(XMLNames.Engine_MaxTorque).SI<NewtonMeter>(); - } - } - - public KilogramSquareMeter Inertia - { - get { return GetDoubleElementValue(XMLNames.Engine_Inertia).SI<KilogramSquareMeter>(); } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs deleted file mode 100644 index ac92dbe496..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs +++ /dev/null @@ -1,174 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Collections.Generic; -using System.Xml; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.InputData.Impl; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringGearboxDataProvider : AbstractEngineeringXMLComponentDataProvider, - IGearboxEngineeringInputData - { - public XMLEngineeringGearboxDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument gbxDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, gbxDocument, xmlBasePath, fsBasePath) {} - - public GearboxType Type - { - get { return GetElementValue(XMLNames.Gearbox_TransmissionType).ParseEnum<GearboxType>(); } - } - - - public KilogramSquareMeter Inertia - { - get { return GetDoubleElementValue(XMLNames.Gearbox_Inertia).SI<KilogramSquareMeter>(); } - } - - public Second TractionInterruption - { - get { return GetDoubleElementValue(XMLNames.Gearbox_TractionInterruption).SI<Second>(); } - } - - public IList<ITransmissionInputData> Gears - { - get - { - var retVal = new List<ITransmissionInputData>(); - var gears = Navigator.Select(Helper.Query(XBasePath, XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear), Manager); - while (gears.MoveNext()) { - var gear = gears.Current.GetAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, ""); - retVal.Add(ReadGear(gear)); - } - return retVal; - } - } - - protected ITransmissionInputData ReadGear(string gearNr) - { - var retVal = new TransmissionInputData(); - var gearPath = Helper.Query(XMLNames.Gearbox_Gears, - Helper.QueryConstraint(XMLNames.Gearbox_Gears_Gear, XMLNames.Gearbox_Gear_GearNumber_Attr, gearNr)); - retVal.Ratio = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gear_Ratio)); - retVal.Gear = XmlConvert.ToUInt16(gearNr); - if ( - ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry))) { - retVal.LossMap = ReadTableData(AttributeMappings.TransmissionLossmapMapping, - Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry)); - } else { - retVal.LossMap = ReadCSVResourceFile(Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap)); - } - - if ( - ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, - XMLNames.Gearbox_Gears_Gear_ShiftPolygon_Entry))) { - retVal.ShiftPolygon = ReadTableData(AttributeMappings.ShiftPolygonMapping, - Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, XMLNames.Gearbox_Gears_Gear_ShiftPolygon_Entry)); - } - if ( - ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, ExtCsvResourceTag))) { - retVal.ShiftPolygon = ReadCSVResourceFile(Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon)); - } - - retVal.MaxTorque = ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque)) - ? GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque)).SI<NewtonMeter>() - : null; - return retVal; - } - - public Second MinTimeBetweenGearshift - { - get { return InputData.XMLEngineeringJobData.MinTimeBetweenGearshift; } - } - - public double TorqueReserve - { - get { return InputData.XMLEngineeringJobData.TorqueReserve; } - } - - public MeterPerSecond StartSpeed - { - get { return InputData.XMLEngineeringJobData.StartSpeed; } - } - - public MeterPerSquareSecond StartAcceleration - { - get { return InputData.XMLEngineeringJobData.StartAcceleration; } - } - - public double StartTorqueReserve - { - get { return InputData.XMLEngineeringJobData.StartTorqueReserve; } - } - - - ITorqueConverterDeclarationInputData IGearboxDeclarationInputData.TorqueConverter - { - get { return TorqueConverter; } - } - - public ITorqueConverterEngineeringInputData TorqueConverter - { - get - { - return new XMLEngineeringTorqueConverterDataProvider(InputData, XMLDocument, - Helper.Query(XBasePath, "parent::*", XMLNames.Component_TorqueConverter, XMLNames.ComponentDataWrapper), FSBasePath); - } - } - - public Second DownshiftAfterUpshiftDelay - { - get { return InputData.XMLEngineeringJobData.DownshiftAfterUpshiftDelay; } - } - - public Second UpshiftAfterDownshiftDelay - { - get { return InputData.XMLEngineeringJobData.UpshiftAfterDownshiftDelay; } - } - - public MeterPerSquareSecond UpshiftMinAcceleration - { - get { return InputData.XMLEngineeringJobData.UpshiftMinAcceleration; } - } - - public Second PowershiftShiftTime - { - get { return InputData.XMLEngineeringJobData.PowershiftShiftTime; } - } - - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs deleted file mode 100644 index 69818e6860..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs +++ /dev/null @@ -1,201 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.IO; -using System.Xml; -using System.Xml.Schema; -using System.Xml.XPath; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Utils; -using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringInputDataProvider : IEngineeringInputDataProvider - { - public readonly string FileName; - - internal XmlDocument Document; - - protected internal XMLEngineeringJobInputDataProvider XMLEngineeringJobData; - - protected internal XMLEngineeringVehicleDataProvider VehicleData; - protected internal XMLEngineeringDriverDataProvider XMLEngineeringDriverData; - - public bool VerifyXml { get; protected set; } - - public XMLEngineeringInputDataProvider(string filename, bool verifyXml) - { - VerifyXml = verifyXml; - FileName = filename; - ReadXMLDocument(File.OpenRead(filename)); - - InitializeComponentDataProvider(); - } - - - public XMLEngineeringInputDataProvider(Stream inputData, bool verifyXml) - { - FileName = "."; - VerifyXml = verifyXml; - ReadXMLDocument(inputData); - - var nav = Document.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var refNodes = - nav.Select( - "//" + helper.Query(helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr, null)), - manager); - if (refNodes.Count > 0) { - throw new VectoException("XML input data with file references can not be read via stream!"); - } - - InitializeComponentDataProvider(); - } - - - private void ReadXMLDocument(Stream inputData) - { - - var xmldoc = new XmlDocument(); - xmldoc.Load(inputData); - if (VerifyXml) { - new XMLValidator(xmldoc, null, ValidationCallBack).ValidateXML(XmlDocumentType.EngineeringJobData); - } - Document = xmldoc; - } - - private void InitializeComponentDataProvider() - { - var helper = new XPathHelper(ExecutionMode.Engineering); - XMLEngineeringJobData = new XMLEngineeringJobInputDataProvider(this, Document, - helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix)), - Path.GetDirectoryName(Path.GetFullPath(FileName))); - if (XMLEngineeringJobData.EngineOnlyMode) { - EngineOnlyInputData = new XMLEngineeringEngineDataProvider(this, Document, - helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Engine, - XMLNames.ComponentDataWrapper), Path.GetDirectoryName(Path.GetFullPath(FileName))); - return; - } - ReadVehicle(); - - XMLEngineeringDriverData = XMLEngineeringJobData.GetDriverData(); - } - - internal static void ValidationCallBack(XmlSeverityType severity, ValidationEvent evt) - { - if (severity == XmlSeverityType.Error) { - throw new VectoException("Validation error: {0}", evt.ValidationEventArgs.Message); - } - } - - private void ReadVehicle() - { - var helper = new XPathHelper(ExecutionMode.Engineering); - - - var nav = Document.CreateNavigator(); - var vehiclePath = helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle); - var manager = new XmlNamespaceManager(nav.NameTable); - helper.AddNamespaces(manager); - var vehicle = nav.SelectSingleNode(vehiclePath, manager); - if (vehicle != null) { - VehicleData = new XMLEngineeringVehicleDataProvider(this, Document, vehiclePath, - Path.GetDirectoryName(Path.GetFullPath(FileName))); - return; - } - - var extVehilePath = helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - helper.QueryConstraint(XMLNames.ExternalResource, "@component='Vehicle' and @type='xml'", null, "")); - var extVehicle = nav.SelectSingleNode(extVehilePath, manager); - if (extVehicle != null) { - try { - var vehicleFile = extVehicle.GetAttribute(XMLNames.ExtResource_File_Attr, ""); - var vehicleDocument = new XmlDocument(); - vehicleDocument.Load(XmlReader.Create(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile))); - if (VerifyXml) { - new XMLValidator(vehicleDocument, null, ValidationCallBack).ValidateXML(XmlDocumentType.EngineeringJobData); - } - var vehicleCompPath = - helper.QueryAbs( - helper.NSPrefix("VectoComponentEngineering", Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle); - VehicleData = new XMLEngineeringVehicleDataProvider(this, vehicleDocument, vehicleCompPath, - Path.GetDirectoryName(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile)))); - return; - } catch (XmlSchemaValidationException validationException) { - throw new VectoException("Validation of XML-file for Vehicle failed", validationException); - } - } - throw new VectoException("No Vehicle found"); - } - - private static XmlSchemaSet GetXMLSchema(string version) - { - var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema, - "VectoEngineeringInput.xsd"); - var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() }; - var reader = XmlReader.Create(resource, new XmlReaderSettings(), XmlResourceResolver.BaseUri); - xset.Add(XmlSchema.Read(reader, null)); - xset.Compile(); - return xset; - } - - public IEngineeringJobInputData JobInputData - { - get { return XMLEngineeringJobData; } - } - - public IVehicleEngineeringInputData VehicleInputData - { - get { return VehicleData; } - } - - public IEngineEngineeringInputData EngineOnlyInputData { get; private set; } - - public IDriverEngineeringInputData DriverInputData - { - get { return XMLEngineeringDriverData; } - } - - public string Source { get; private set; } - } -} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs deleted file mode 100644 index 00422ad327..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs +++ /dev/null @@ -1,260 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Collections.Generic; -using System.IO; -using System.Xml; -using System.Xml.XPath; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.Impl; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - // ReSharper disable once InconsistentNaming - public class XMLEngineeringJobInputDataProvider : AbstractEngineeringXMLComponentDataProvider, IEngineeringJobInputData - { - public XMLEngineeringJobInputDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider, - XmlDocument jobDocument, string xmlBasePath, string fsBasePath) - : base(xmlEngineeringJobInputDataProvider, jobDocument, xmlBasePath, fsBasePath) {} - - - public IVehicleDeclarationInputData Vehicle - { - get { return InputData.VehicleInputData; } - } - - IVehicleEngineeringInputData IEngineeringJobInputData.Vehicle - { - get { return InputData.VehicleInputData; } - } - - public IList<ICycleData> Cycles - { - get { - var retVal = new List<ICycleData>(); - var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles, - Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr, - XMLNames.ExtResource_Type_Value_CSV)), Manager); - while (cycles.MoveNext()) { - var file = cycles.Current.GetAttribute(XMLNames.ExtResource_File_Attr, ""); - var fileFull = Path.Combine(FSBasePath ?? "", file); - if (File.Exists(fileFull)) { - retVal.Add(new CycleInputData() { - Name = Path.GetFileNameWithoutExtension(fileFull), - CycleData = VectoCSVFile.Read(fileFull) - }); - } else { - try { - var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file + - Constants.FileExtensions.CycleFile; - retVal.Add(new CycleInputData() { - Name = Path.GetFileNameWithoutExtension(file), - CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName), - }); - } catch { - //Log.Debug("Driving Cycle could not be read: " + cycleFile); - throw new VectoException("Driving Cycle could not be read: " + file); - } - } - } - return retVal; - } - } - - public bool EngineOnlyMode - { - get { - return ElementExists(XMLNames.VectoJob_EngineOnlyMode) && - XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode)); - } - } - - public IEngineEngineeringInputData EngineOnly - { - get { return InputData.EngineOnlyInputData; } - } - - protected internal Second DownshiftAfterUpshiftDelay - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "DownshiftAfterUpshiftDelay")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "DownshiftAfterUpshiftDelay")).SI<Second>() - : DeclarationData.Gearbox.DownshiftAfterUpshiftDelay; - } - } - - protected internal Second UpshiftAfterDownshiftDelay - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftAfterDownshiftDelay")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftAfterDownshiftDelay")).SI<Second>() - : DeclarationData.Gearbox.UpshiftAfterDownshiftDelay; - } - } - - protected internal MeterPerSquareSecond UpshiftMinAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftMinAcceleration")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "UpshiftMinAcceleration")) - .SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.UpshiftMinAcceleration; - } - } - - - public string JobName - { - get { - return InputData.JobInputData.EngineOnlyMode - ? InputData.JobInputData.EngineOnly.Model - : InputData.VehicleData.GetVehicleID; - } - } - - public double TorqueReserve - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve)) - : DeclarationData.Gearbox.TorqueReserve; - } - } - - public Second MinTimeBetweenGearshift - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)).SI<Second>() - : DeclarationData.Gearbox.MinTimeBetweenGearshifts; - } - } - - public MeterPerSecond StartSpeed - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)).SI<MeterPerSecond>() - : DeclarationData.Gearbox.StartSpeed; - } - } - - public MeterPerSquareSecond StartAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)).SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.StartAcceleration; - } - } - - public double StartTorqueReserve - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve)) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve)) - : DeclarationData.Gearbox.TorqueReserveStart; - } - } - - - public Second PowershiftShiftTime - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "PowershiftShiftTime")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "PowershiftShiftTime")).SI<Second>() - : 0.8.SI<Second>(); - } - } - - public MeterPerSquareSecond CCUpshiftMinAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CCUpshiftMinAcceleration")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CCUpshiftMinAcceleration")).SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.UpshiftMinAcceleration; - } - } - - public MeterPerSquareSecond CLUpshiftMinAcceleration - { - get { - return - ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CLUpshiftMinAcceleration")) - ? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters, - "CLUpshiftMinAcceleration")).SI<MeterPerSquareSecond>() - : DeclarationData.Gearbox.UpshiftMinAcceleration; - } - } - - public XMLEngineeringDriverDataProvider GetDriverData() - { - return new XMLEngineeringDriverDataProvider(InputData, XMLDocument, XBasePath, FSBasePath); - } - } -} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs new file mode 100644 index 0000000000..d7bd276f70 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs @@ -0,0 +1,35 @@ +using Ninject.Extensions.Factory; +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader; +using TUGraz.VectoCore.Utils; +using TUGraz.VectoCore.Utils.Ninject; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering +{ + public class XMLEngineeringReaderInjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IEngineeringInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider()); + + Kernel?.Load(new INinjectModule[] { + new XMLEngineeringReaderV07InjectModule(), + new XMLEngineeringReaderV10InjectModule()} + ); + + } + + #endregion + + + + + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs deleted file mode 100644 index 66bf6ed580..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs +++ /dev/null @@ -1,111 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Xml; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringTorqueConverterDataProvider : AbstractEngineeringXMLComponentDataProvider, - ITorqueConverterEngineeringInputData - { - public XMLEngineeringTorqueConverterDataProvider(XMLEngineeringInputDataProvider jobInputData, - XmlDocument xmlDocument, - string xBasePath, string fsBasePath) - : base(jobInputData, xmlDocument, xBasePath, fsBasePath) {} - - public TableData TCData - { - get - { - if ( - ElementExists(Helper.Query(XMLNames.TorqueConverter_Characteristics, XMLNames.TorqueConverter_Characteristics_Entry))) { - return ReadTableData(AttributeMappings.TorqueConverterDataMapping, - Helper.Query(XMLNames.TorqueConverter_Characteristics, XMLNames.TorqueConverter_Characteristics_Entry)); - } - return ReadCSVResourceFile(XMLNames.TorqueConverter_Characteristics); - } - } - - public PerSecond ReferenceRPM - { - get { return GetDoubleElementValue(XMLNames.TorqueConverter_ReferenceRPM).RPMtoRad(); } - } - - public KilogramSquareMeter Inertia - { - get { return GetDoubleElementValue(XMLNames.TorqueConverter_Inertia).SI<KilogramSquareMeter>(); } - } - - - public TableData ShiftPolygon - { - get - { - if (ElementExists(Helper.Query(XMLNames.TorqueConverter_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry))) { - return ReadTableData(AttributeMappings.ShiftPolygonMapping, - Helper.Query(XMLNames.TorqueConverter_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry)); - } - if ( - ElementExists(Helper.Query(XMLNames.TorqueConverter_ShiftPolygon, ExtCsvResourceTag))) { - return ReadCSVResourceFile(XMLNames.TorqueConverter_ShiftPolygon); - } - return null; - } - } - - public PerSecond MaxInputSpeed - { - get - { - return ElementExists(Helper.Query("MaxInputSpeed")) - ? GetDoubleElementValue("MaxInputSpeed").RPMtoRad() - : 5000.RPMtoRad(); - } - } - - public MeterPerSquareSecond CLUpshiftMinAcceleration - { - get { return InputData.XMLEngineeringJobData.CLUpshiftMinAcceleration; } - } - - public MeterPerSquareSecond CCUpshiftMinAcceleration - { - get - { - return InputData.XMLEngineeringJobData.CCUpshiftMinAcceleration; - } - } - } -} \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs deleted file mode 100644 index 24d044a6ad..0000000000 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs +++ /dev/null @@ -1,435 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Schema; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.Impl; -using TUGraz.VectoCore.Utils; -using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; - -namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering -{ - public class XMLEngineeringVehicleDataProvider : AbstractEngineeringXMLComponentDataProvider, - IVehicleEngineeringInputData, IPTOTransmissionInputData, IVehicleComponentsEngineering, IAxlesEngineeringInputData - { - protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData; - protected internal XMLEngineeringAxlegearDataProvider AxlegearData; - - - public XMLEngineeringVehicleDataProvider(XMLEngineeringInputDataProvider jobProvider, - XmlDocument vehicleDocument, string xmlBasePath, string fsBasePath) - : base(jobProvider, vehicleDocument, xmlBasePath, fsBasePath) - { - AxlegearData = GetAxleGearInputData(jobProvider.VerifyXml); - AngledriveInputData = GetAngularGearInputData(); - EngineInputData = GetEngineInputData(jobProvider.VerifyXml); - RetarderInputData = GetRetarderInputData(jobProvider.VerifyXml); - XMLEngineeringAuxiliaryData = GetAuxiliaryData(jobProvider.VerifyXml); - GearboxInputData = GetGearboxData(jobProvider.VerifyXml); - TorqueConverterInputData = GearboxInputData.TorqueConverter; - PTOTransmissionInputData = GetPTOData(); - AirdragInputData = GetAirdragInputData(jobProvider.VerifyXml); - } - - public string GetVehicleID - { - get { return GetAttributeValue("", XMLNames.Component_ID_Attr); } - } - - public string Identifier { get { return GetVehicleID; } } - - public bool ExemptedVehicle { get { return false; } } - - public string VIN - { - get { return GetElementValue(XMLNames.Vehicle_VIN); } - } - - public LegislativeClass LegislativeClass - { - get { return GetElementValue(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); } - } - - public VehicleCategory VehicleCategory - { - get { return GetElementValue(XMLNames.Vehicle_VehicleCategory).ParseEnum<VehicleCategory>(); } - } - - public Kilogram CurbMassChassis - { - get { return GetDoubleElementValue(XMLNames.Vehicle_CurbMassChassis).SI<Kilogram>(); } - } - - public Kilogram CurbMassExtra - { - get { return GetDoubleElementValue(XMLNames.Vehicle_CurbMassExtra).SI<Kilogram>(); } - } - - public Kilogram GrossVehicleMassRating - { - get { return GetDoubleElementValue(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); } - } - - public IList<ITorqueLimitInputData> TorqueLimits - { - get { - var retVal = new List<ITorqueLimitInputData>(); - var limits = - Navigator.Select(Helper.Query(VehiclePath, XMLNames.Vehicle_TorqueLimits, XMLNames.Vehicle_TorqueLimits_Entry), - Manager); - while (limits.MoveNext()) { - retVal.Add(new TorqueLimitInputData() { - Gear = limits.Current.GetAttribute(XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr, "").ToInt(), - MaxTorque = - limits.Current.GetAttribute(XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr, "").ToDouble().SI<NewtonMeter>() - }); - } - return retVal; - } - } - - public Kilogram Loading - { - get { return GetDoubleElementValue(XMLNames.Vehicle_Loading).SI<Kilogram>(); } - } - - public Meter DynamicTyreRadius - { - get { - var queryPath = Helper.Query(XMLNames.Vehicle_Components, - XMLNames.Component_AxleWheels, - XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - Helper.QueryConstraint(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle), - Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_AxleType), - AxleType.VehicleDriven.ToString(), ""), // query - XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius - ); - return (GetDoubleElementValue(queryPath) / 1000).SI<Meter>(); - } - } - - public Meter Height - { - get { - if (ElementExists(Helper.Query("VehicleHeight"))) { - return GetDoubleElementValue("VehicleHeight").SI<Meter>(); - } - return null; - } - } - - IVehicleComponentsEngineering IVehicleEngineeringInputData.Components - { - get { return this; } - } - - IAdvancedDriverAssistantSystemsEngineering IVehicleEngineeringInputData.ADAS - { - get { return null; } - } - - - public AxleConfiguration AxleConfiguration - { - get { return AxleConfigurationHelper.Parse(GetElementValue(XMLNames.Vehicle_AxleConfiguration)); } - } - - public IList<IAxleEngineeringInputData> AxlesEngineering - { - get { return AxleEngineeringInput().Cast<IAxleEngineeringInputData>().ToList(); } - } - - public string ManufacturerAddress - { - get { return "N.A."; } - } - - public PerSecond EngineIdleSpeed - { - get { return null; } - } - - - private IEnumerable<AxleInputData> AxleEngineeringInput() - { - - var axlePath = Helper.Query( - XMLNames.Vehicle_Components, - XMLNames.Component_AxleWheels, - XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - XMLNames.AxleWheels_Axles_Axle); - var axles = - Navigator.Select(Helper.Query(XBasePath, axlePath), Manager); - - var retVal = new AxleInputData[axles.Count]; - - while (axles.MoveNext()) { - var axleNumber = axles.Current.GetAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "").ToInt(); - if (axleNumber < 1 || axleNumber > retVal.Length) { - throw new VectoException("Axle #{0} exceeds axle count", axleNumber); - } - if (retVal[axleNumber - 1] != null) { - throw new VectoException("Axle #{0} defined multiple times!", axleNumber); - } - - var dimension = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_Dimension), Manager); - var rollResistance = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_RRCISO), Manager); - var tyreTestLoad = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_FzISO), Manager); - var weightShare = axles.Current.SelectSingleNode( - Helper.Query(XMLNames.AxleWheels_Axles_Axle_WeightShare), Manager); - var inertia = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_Inertia), Manager); - var axleType = axles.Current.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_AxleType), Manager); - var twinTyres = axles.Current.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_TwinTyres), Manager); - var steered = axles.Current.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_Steered), Manager); - - retVal[axleNumber - 1] = new AxleInputData { - AxleType = axleType == null ? AxleType.VehicleNonDriven : axleType.Value.ParseEnum<AxleType>(), - TwinTyres = twinTyres != null && XmlConvert.ToBoolean(twinTyres.Value), - Steered = steered != null && XmlConvert.ToBoolean(steered.Value), - AxleWeightShare = weightShare == null ? 0 : weightShare.ValueAsDouble, - Tyre = new TyreInputData() { - TyreTestLoad = tyreTestLoad == null ? null : tyreTestLoad.Value.ToDouble().SI<Newton>(), - RollResistanceCoefficient = rollResistance == null ? double.NaN : rollResistance.Value.ToDouble(), - Dimension = dimension == null ? null : dimension.Value, - Inertia = inertia == null ? null : inertia.ValueAsDouble.SI<KilogramSquareMeter>(), - } - }; - } - - return retVal; - - } - - public double RetarderRatio - { - get { return GetDoubleElementValue(XMLNames.Vehicle_RetarderRatio); } - } - - public RetarderType RetarderType - { - get { return GetElementValue(XMLNames.Vehicle_RetarderType).ParseEnum<RetarderType>(); } - } - - public AngledriveType AngledriveType - { - get { return GetElementValue(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); } - } - - public IAirdragEngineeringInputData AirdragInputData { get; private set; } - - - public IGearboxEngineeringInputData GearboxInputData { get; private set; } - - public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; } - - public IAxleGearInputData AxleGearInputData - { - get { return AxlegearData; } - } - - public IAngledriveInputData AngledriveInputData { get; private set; } - - public IEngineEngineeringInputData EngineInputData { get; private set; } - - IAuxiliariesEngineeringInputData IVehicleComponentsEngineering.AuxiliaryInputData - { - get { return XMLEngineeringAuxiliaryData; } - } - - public IAuxiliariesEngineeringInputData AuxiliaryInputData - { - get { return XMLEngineeringAuxiliaryData; } - } - - public IRetarderInputData RetarderInputData { get; private set; } - - public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; } - public IAxlesEngineeringInputData AxleWheels { get { return this; } } - public bool VocationalVehicle { get { return false; } } - public bool SleeperCab { get { return true; } } - public TankSystem? TankSystem { get; } - public IAdvancedDriverAssistantSystemDeclarationInputData ADAS { get { return null; } } - public bool ZeroEmissionVehicle { get { return false; } } - public bool HybridElectricHDV { get { return false; } } - public bool DualFuelVehicle { get { return false; } } - public Watt MaxNetPower1 { get { return null; } } - public Watt MaxNetPower2 { get { return null; } } - public IVehicleComponentsDeclaration Components { get { return null; } } - - #region "FactoryMethods" - - private IAirdragEngineeringInputData GetAirdragInputData(bool verifyXml) - { - return CreateComponentInput(XMLNames.Component_AirDrag, verifyXml, - (a, b, c, d) => new XMLEngineeringAirdragDataProvider(a, b, c, d)); - } - - private XMLEngineeringAxlegearDataProvider GetAxleGearInputData(bool verifyXml) - { - return CreateComponentInput(XMLNames.Component_Axlegear, verifyXml, - (a, b, c, d) => new XMLEngineeringAxlegearDataProvider(a, b, c, d)); - } - - private XMLEngineeringEngineDataProvider GetEngineInputData(bool verifyXml) - { - return CreateComponentInput(XMLNames.Component_Engine, verifyXml, - (a, b, c, d) => new XMLEngineeringEngineDataProvider(a, b, c, d)); - } - - private XMLEngineeringRetarderDataProvider GetRetarderInputData(bool verifyXml) - { - if (!RetarderType.IsDedicatedComponent()) { - return new XMLEngineeringRetarderDataProvider(InputData, XMLDocument, - Helper.Query(XBasePath, XMLNames.Vehicle_Components, XMLNames.Component_Retarder, XMLNames.ComponentDataWrapper), - FSBasePath); - } - - return CreateComponentInput(XMLNames.Component_Retarder, verifyXml, - (a, b, c, d) => new XMLEngineeringRetarderDataProvider(a, b, c, d)); - } - - private XMLEngineeringGearboxDataProvider GetGearboxData(bool verifyXml) - { - return CreateComponentInput(XMLNames.Component_Gearbox, verifyXml, - (a, b, c, d) => new XMLEngineeringGearboxDataProvider(a, b, c, d)); - } - - private XMLEngineeringAuxiliaryDataProvider GetAuxiliaryData(bool verifyXml) - { - return CreateComponentInput(XMLNames.Component_Auxiliaries, verifyXml, - (a, b, c, d) => new XMLEngineeringAuxiliaryDataProvider(a, b, c, d)); - } - - - private T CreateComponentInput<T>(string componentName, bool verifyXml, - Func<XMLEngineeringInputDataProvider, XmlDocument, string, string, T> creator) - { - if (ElementExists(Helper.Query(XMLNames.Vehicle_Components, componentName))) { - return creator(InputData, XMLDocument, - Helper.Query(XBasePath, XMLNames.Vehicle_Components, componentName, XMLNames.ComponentDataWrapper), FSBasePath); - } - string componentPath = Helper.Query(XMLNames.Vehicle_Components, - Helper.QueryConstraint(XMLNames.ExternalResource, string.Format("@component='{0}' and @type='xml'", componentName), - null, "")); - if (!ElementExists(componentPath)) { - throw new VectoException("Component {0} not found!", componentName); - } - var componentNode = - Navigator.SelectSingleNode(Helper.Query(XBasePath, componentPath), Manager); - if (componentNode != null) { - try { - var componentFile = componentNode.GetAttribute(XMLNames.ExtResource_File_Attr, ""); - var componentDocument = new XmlDocument(); - componentDocument.Load(XmlReader.Create(Path.Combine(FSBasePath, componentFile))); - if (verifyXml) { - new XMLValidator(componentDocument, null, XMLEngineeringInputDataProvider.ValidationCallBack).ValidateXML(XmlDocumentType - .EngineeringJobData); - } - return creator(InputData, componentDocument, - Helper.QueryAbs(Helper.NSPrefix(XMLNames.VectoComponentEngineering, Constants.XML.RootNSPrefix), componentName, - XMLNames.ComponentDataWrapper), - Path.GetDirectoryName(Path.Combine(Path.GetFullPath(FSBasePath), componentFile))); - } catch (XmlSchemaValidationException validationException) { - throw new VectoException("Validation of XML-file for component {0} failed", validationException, componentName); - } - } - throw new VectoException("Component {0} not found!", componentName); - } - - #endregion - - public XMLEngineeringAngledriveDataProvider GetAngularGearInputData() - { - return new XMLEngineeringAngledriveDataProvider(InputData, XMLDocument, - Helper.Query(XBasePath, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive, XMLNames.ComponentDataWrapper) - , FSBasePath); - } - - #region "PTO" - - public IPTOTransmissionInputData GetPTOData() - { - return this; - } - - public string PTOTransmissionType - { - get { return GetElementValue(XMLNames.Vehicle_PTOType); } - } - - public TableData PTOLossMap - { - get { - if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOIdleLossMap, XMLNames.Vehicle_PTOIdleLossMap_Entry))) { - return ReadTableData(AttributeMappings.PTOLossMap, - Helper.Query(XMLNames.Vehicle_PTOIdleLossMap, XMLNames.Vehicle_PTOIdleLossMap_Entry)); - } - if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOIdleLossMap, ExtCsvResourceTag))) { - return ReadCSVResourceFile(XMLNames.Vehicle_PTOIdleLossMap); - } - return null; - } - } - - public TableData PTOCycle - { - get { - if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOCycle, XMLNames.Vehicle_PTOCycle_Entry))) { - return ReadTableData(AttributeMappings.PTOCycleMap, - Helper.Query(XMLNames.Vehicle_PTOCycle, XMLNames.Vehicle_PTOCycle_Entry)); - } - if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOCycle, ExtCsvResourceTag))) { - return ReadCSVResourceFile(XMLNames.Vehicle_PTOCycle); - } - return null; - } - } - - #endregion - - - - } -} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs new file mode 100644 index 0000000000..f203504ac7 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs @@ -0,0 +1,22 @@ +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; + +namespace TUGraz.VectoCore.InputData.FileIO.XML +{ + public class XMLInputDataNinjectModule : AbstractNinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IXMLInputDataReader>().To<XMLInputDataFactory>(); + + LoadModule<XMLDeclarationReaderInjectModule>(); + + LoadModule<XMLEngineeringReaderInjectModule>(); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index 8a2bc00275..e98ba61c51 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -69,6 +69,16 @@ namespace TUGraz.VectoCore.InputData.Impl public MeterPerSecond UnderSpeed { get; internal set; } } + public class DriverAccelerationInputData : IDriverAccelerationData + { + #region Implementation of IDriverAccelerationData + + public TableData AccelerationCurve { get; internal set; } + + #endregion + } + + public class TransmissionInputData : ITransmissionInputData { public int Gear { get; internal set; } @@ -84,6 +94,7 @@ namespace TUGraz.VectoCore.InputData.Impl public PerSecond MaxInputSpeed { get; internal set; } public TableData ShiftPolygon { get; internal set; } + public DataSource DataSource { get; internal set; } } public class AxleInputData : IAxleEngineeringInputData @@ -103,6 +114,8 @@ namespace TUGraz.VectoCore.InputData.Impl public double AxleWeightShare { get; internal set; } + + public DataSource DataSource { get; internal set; } } public class TyreInputData : ITyreEngineeringInputData @@ -134,6 +147,8 @@ namespace TUGraz.VectoCore.InputData.Impl public Newton TyreTestLoad { get; internal set; } public KilogramSquareMeter Inertia { get; internal set; } + + public Meter DynamicTyreRadius { get; } } public class AuxiliaryDataInputData : IAuxiliaryEngineeringInputData, IAuxiliaryDeclarationInputData @@ -161,6 +176,8 @@ namespace TUGraz.VectoCore.InputData.Impl public TableData DemandMap { get; internal set; } public Watt ConstantPowerDemand { get; internal set; } + + public DataSource DataSource { get; internal set; } } public class TorqueLimitInputData : ITorqueLimitInputData diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index ea66535900..7c659e0b18 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -158,7 +158,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return retVal; } - internal GearboxData CreateGearboxData(IGearboxEngineeringInputData gearbox, CombustionEngineData engineData, + internal GearboxData CreateGearboxData(IGearboxEngineeringInputData gearbox, CombustionEngineData engineData, IGearshiftEngineeringInputData gearshiftData, double axlegearRatio, Meter dynamicTyreRadius, VehicleCategory vehicleCategory) { if (gearbox.SavedInDeclarationMode) { @@ -172,7 +172,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter throw new VectoSimulationException("At least two Gear-Entries must be defined in Gearbox!"); } - SetEngineeringData(gearbox, retVal); + SetEngineeringData(gearbox, gearshiftData, retVal); var gearDifferenceRatio = gearbox.Type.AutomaticTransmission() && gearbox.Gears.Count > 2 ? gearbox.Gears[0].Ratio / gearbox.Gears[1].Ratio @@ -211,7 +211,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter retVal.PowershiftShiftTime = gearbox.PowershiftShiftTime; retVal.TorqueConverterData = TorqueConverterDataReader.Create(gearbox.TorqueConverter.TCData, gearbox.TorqueConverter.ReferenceRPM, gearbox.TorqueConverter.MaxInputSpeed, ExecutionMode.Engineering, ratio, - gearbox.TorqueConverter.CLUpshiftMinAcceleration, gearbox.TorqueConverter.CCUpshiftMinAcceleration); + gearshiftData.CLUpshiftMinAcceleration, gearshiftData.CCUpshiftMinAcceleration); } @@ -242,18 +242,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter } } - private static void SetEngineeringData(IGearboxEngineeringInputData gearbox, GearboxData retVal) + private static void SetEngineeringData(IGearboxEngineeringInputData gearbox, IGearshiftEngineeringInputData gearshiftData, GearboxData retVal) { retVal.Inertia = gearbox.Type.ManualTransmission() ? gearbox.Inertia : 0.SI<KilogramSquareMeter>(); retVal.TractionInterruption = gearbox.TractionInterruption; - retVal.TorqueReserve = gearbox.TorqueReserve; - retVal.StartTorqueReserve = gearbox.StartTorqueReserve; - retVal.ShiftTime = gearbox.MinTimeBetweenGearshift; - retVal.StartSpeed = gearbox.StartSpeed; - retVal.StartAcceleration = gearbox.StartAcceleration; - retVal.DownshiftAfterUpshiftDelay = gearbox.DownshiftAfterUpshiftDelay; - retVal.UpshiftAfterDownshiftDelay = gearbox.UpshiftAfterDownshiftDelay; - retVal.UpshiftMinAcceleration = gearbox.UpshiftMinAcceleration; + retVal.TorqueReserve = gearshiftData.TorqueReserve; + retVal.StartTorqueReserve = gearshiftData.StartTorqueReserve; + retVal.ShiftTime = gearshiftData.MinTimeBetweenGearshift; + retVal.StartSpeed = gearshiftData.StartSpeed; + retVal.StartAcceleration = gearshiftData.StartAcceleration; + retVal.DownshiftAfterUpshiftDelay = gearshiftData.DownshiftAfterUpshiftDelay; + retVal.UpshiftAfterDownshiftDelay = gearshiftData.UpshiftAfterDownshiftDelay; + retVal.UpshiftMinAcceleration = gearshiftData.UpshiftMinAcceleration; } public AxleGearData CreateAxleGearData(IAxleGearInputData data) @@ -322,7 +322,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter AccelerationCurveData accelerationData = null; if (driver.AccelerationCurve != null) { - accelerationData = AccelerationCurveReader.Create(driver.AccelerationCurve); + accelerationData = AccelerationCurveReader.Create(driver.AccelerationCurve.AccelerationCurve); } if (driver.Lookahead == null) { diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs index 8948c9d6f1..ef6788abbb 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs @@ -68,8 +68,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var tempVehicle = dao.CreateVehicleData(vehicle); var axlegearData = dao.CreateAxleGearData(vehicle.Components.AxleGearInputData); - var gearboxData = dao.CreateGearboxData(vehicle.Components.GearboxInputData, engineData, axlegearData.AxleGear.Ratio, - tempVehicle.DynamicTyreRadius,tempVehicle.VehicleCategory); + var gearboxData = dao.CreateGearboxData( + vehicle.Components.GearboxInputData, engineData, InputDataProvider.DriverInputData.GearshiftInputData, + axlegearData.AxleGear.Ratio, tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory); var crossWindRequired = vehicle.Components.AirdragInputData.CrossWindCorrectionMode == CrossWindCorrectionMode.VAirBetaLookupTable; var angledriveData = dao.CreateAngledriveData(vehicle.Components.AngledriveInputData); diff --git a/VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs new file mode 100644 index 0000000000..f7e4e5083c --- /dev/null +++ b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using TUGraz.VectoCore.InputData; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.Models.Simulation +{ + public interface ISimulatorFactory + { + bool WriteModalResults { get; set; } + bool ModalResults1Hz { get; set; } + bool ActualModalData { get; set; } + + bool Validate { get; set; } + SummaryDataContainer SumData { get; set; } + int JobNumber { get; set; } + IVectoRunDataFactory DataReader { get; } + + /// <summary> + /// Creates powertrain and initializes it with the component's data. + /// </summary> + /// <returns>new VectoRun Instance</returns> + IEnumerable<IVectoRun> SimulationRuns(); + } +} diff --git a/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs new file mode 100644 index 0000000000..c0021767a3 --- /dev/null +++ b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs @@ -0,0 +1,13 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.Models.Simulation +{ + public interface ISimulatorFactoryFactory + { + ISimulatorFactory Factory( + ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer, + IDeclarationReport declarationReport = null, IVTPReport vtpReport = null, bool validate = true); + } +} diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs index 0479003a44..661f32487d 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs @@ -85,7 +85,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl /// Adds the runs from the factory to the job container. /// </summary> /// <returns>A List of Run-Identifiers (unique), int</returns> - public List<int> AddRuns(SimulatorFactory factory) + public List<int> AddRuns(ISimulatorFactory factory) { var runIDs = new List<int>(); diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index 9a27adae2d..be10e8d69c 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -49,7 +49,7 @@ using TUGraz.VectoCore.OutputData.XML; namespace TUGraz.VectoCore.Models.Simulation.Impl { - public class SimulatorFactory : LoggingObject + public class SimulatorFactory : LoggingObject, ISimulatorFactory { private static int _jobNumberCounter; @@ -124,7 +124,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public bool Validate { get; set; } - protected internal IVectoRunDataFactory DataReader { get; private set; } + public IVectoRunDataFactory DataReader { get; private set; } public SummaryDataContainer SumData { get; set; } diff --git a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs new file mode 100644 index 0000000000..1048415c73 --- /dev/null +++ b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs @@ -0,0 +1,86 @@ +using Ninject.Extensions.Factory; +using Ninject.Modules; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoHashing; + +namespace TUGraz.VectoCore.Models.Simulation +{ + public class SimulationFactoryNinjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<ISimulatorFactoryFactory>().ToFactory(); + + Bind<ISimulatorFactory>().To<SimulatorFactory>(); + + Bind<IDeclarationReport>().To<NullDeclarationReport>(); + Bind<IVTPReport>().To<NullVTPReport>(); + + //if (Kernel != null && !Kernel.HasModule(typeof(PowertrainBuilderInjectModule).FullName)) { + // Kernel.Load(new[] { new PowertrainBuilderInjectModule() }); + //} + } + + #endregion + } + + internal class NullDeclarationReport : IDeclarationReport + { + #region Implementation of IDeclarationReport + + public void InitializeReport(VectoRunData modelData) + { + + } + + public void PrepareResult(LoadingType loading, Mission mission, VectoRunData runData) + { + + } + + public void AddResult(LoadingType loadingType, Mission mission, VectoRunData runData, IModalDataContainer modData) + { + + } + + #endregion + } + + internal class NullVTPReport : IVTPReport + { + #region Implementation of IDeclarationReport + + public void InitializeReport(VectoRunData modelData) + { + + } + + public void PrepareResult(LoadingType loading, Mission mission, VectoRunData runData) + { + + } + + public void AddResult(LoadingType loadingType, Mission mission, VectoRunData runData, IModalDataContainer modData) + { + + } + + #endregion + + #region Implementation of IVTPReport + + public IVectoHash InputDataHash { set { } } + + public IManufacturerReport ManufacturerRecord { set { } } + + public IVectoHash ManufacturerRecordHash { set { } } + + #endregion + } +} diff --git a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs index 74b41cf4da..8c463e10e8 100644 --- a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs +++ b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs @@ -1,29 +1,38 @@ using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; +using TUGraz.VectoCore.Models.Simulation; +using TUGraz.VectoCore.OutputData.XML; namespace TUGraz.VectoCore { - public class VectoNinjectModule : NinjectModule + public abstract class AbstractNinjectModule : NinjectModule + { + protected virtual void LoadModule<T>() where T : class, INinjectModule, new() + { + if (Kernel != null && !Kernel.HasModule(typeof(T).FullName)) { + Kernel.Load(new[] { new T() }); + } + + } + } + + public class VectoNinjectModule : AbstractNinjectModule { #region Overrides of NinjectModule public override void Load() { - LoadModule<XMLDeclarationReaderInjectModule>(); + LoadModule<XMLInputDataNinjectModule>(); - // load module engineering reader + LoadModule<XMLEngineeringWriterInjectModule>(); - // use ninject for simulator factory? + LoadModule<SimulationFactoryNinjectModule>(); } #endregion - protected virtual void LoadModule<T>() where T : class, INinjectModule, new() - { - if (Kernel != null && !Kernel.HasModule(typeof(T).FullName)) { - Kernel.Load(new[] { new T() }); - } - - } + } } diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs new file mode 100644 index 0000000000..32ad14bb97 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs @@ -0,0 +1,106 @@ +using System; +using System.Globalization; +using System.Linq; +using Ninject; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Factory +{ + public interface IEngineeringWriterFactory + { + IXMLEngineeringJobWriter CreateJobWriter(string version, IXMLEngineeringWriter writer, IEngineeringInputDataProvider inputData); + + IXMLEngineeringComponentWriter GetWriter<T>(T inputData, IXMLEngineeringWriter writer, DataSource source) where T : class; + + IXMLEngineeringComponentWriter GetWriter<T>(T inputData, IXMLEngineeringWriter writer) where T : class, IComponentInputData; + + //IXMLEngineeringComponentWriter GetWriter(IComponentInputData inputData, IXMLEngineeringWriter xmlEngineeringWriter); + + //IXMLEngineeringComponentWriter GetWriter(object inputData, IXMLEngineeringWriter xmlEngineeringWriter, DataSource source); + + //IXMLEngineeringComponentWriter CreateComponentsWriter(string version, IXMLEngineeringWriter writer); + } + + public class EngineeringWriterFactory : IEngineeringWriterFactory + { + [Inject] + public IKernel Kernel { protected get; set; } + + public IXMLEngineeringJobWriter CreateJobWriter( + string version, IXMLEngineeringWriter writer, IEngineeringInputDataProvider inputData) + { + var jobWriter = Kernel.Get<IXMLEngineeringJobWriter>(version); + jobWriter.Writer = writer; + jobWriter.InputData = inputData; + return jobWriter; + } + + public virtual IXMLEngineeringComponentWriter GetWriter<T>( + T inputData, IXMLEngineeringWriter writer, DataSource source) where T : class + { + return DoGetWriter(typeof(T), writer, source); + } + + public virtual IXMLEngineeringComponentWriter GetWriter<T>( + T inputData, IXMLEngineeringWriter writer) where T : class, IComponentInputData + { + return DoGetWriter(typeof(T), writer, inputData.DataSource); + } + + protected virtual IXMLEngineeringComponentWriter DoGetWriter(Type inputDataType, IXMLEngineeringWriter xmlEngineeringWriter, DataSource source) + { + Type writerType = null; + if (inputDataType.IsInterface) { + writerType = XMLWriterMapping.GetWriterType(inputDataType); + } else { + foreach (var type in inputDataType.GetInterfaces()) { + writerType = XMLWriterMapping.GetWriterType(type); + if (writerType != null) { + break; + } + } + } + + if (writerType == null) { + throw new VectoException("no writer defined for {0}", inputDataType.FullName); + } + + try { + var version = source.SourceVersion; + if (!source.SourceType.IsXMLFormat()) { + var bindings = Kernel.GetBindings(writerType).ToArray(); + if (bindings.Any()) { + version = bindings.MaxBy(b => b.Metadata.Name.ToDouble()).Metadata.Name; + } + } + return GetEngineeringWriter(inputDataType, version, writerType, xmlEngineeringWriter); + } catch (Exception) { + var bindings = Kernel.GetBindings(writerType).ToArray(); + if (bindings.Any()) { + var mostRecent = bindings.MaxBy(b => { + double retVal; + var success = double.TryParse(b.Metadata.Name, NumberStyles.Float, CultureInfo.InvariantCulture, out retVal); + return success ? retVal : -1; + }).Metadata.Name; + return GetEngineeringWriter(inputDataType, mostRecent, writerType, xmlEngineeringWriter); + } + + } + throw new VectoException("No binding found for {0} ({2}) version {1}", inputDataType.FullName, source.SourceVersion, writerType.FullName); + } + + private IXMLEngineeringComponentWriter GetEngineeringWriter(Type inputDataType, string version, Type writerType, IXMLEngineeringWriter xmlEngineeringWriter) + { + var retVal = Kernel.Get(writerType, version) as IXMLEngineeringComponentWriter; + if (retVal == null) { + throw new VectoException("Writer for type {0} is not an IXMLEngineeringWriter!", inputDataType.FullName); + } + + retVal.Writer = xmlEngineeringWriter; + return retVal; + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs new file mode 100644 index 0000000000..7f07c6f78b --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs @@ -0,0 +1,10 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.OutputData.XML.Factory +{ + public interface IEngineeringWriterInjectFactory + { + IXMLEngineeringJobWriter CreateJobWriter(string version, IXMLEngineeringWriter writer, IEngineeringInputDataProvider inputData); + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs new file mode 100644 index 0000000000..a623481442 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs @@ -0,0 +1,65 @@ +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces { + public interface IXMLEngineeringComponentWriter + { + IXMLEngineeringWriter Writer { set; } + + XAttribute GetXMLTypeAttribute(); + + object[] WriteXML(IComponentInputData inputData); + + object[] WriteXML(IDriverModelData inputData); + + object[] WriteXML(IEngineeringInputDataProvider inputData); + + object[] WriteXML(ITransmissionInputData inputData, int gearNumber); + + object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius); + object[] WriteXML(IAuxiliaryEngineeringInputData inputData); + + object[] WriteXML(IAdvancedDriverAssistantSystemsEngineering inputData); + } + + + public interface IXMLEngineeringDriverDataWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLLookaheadDataWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLOverspeedDataWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLAccelerationDataWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLGearshiftDataWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLVehicleDataWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringGearWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringTorqueconverterWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringAxlegearWriter :IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringRetarderWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringAirdragWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringAxlesWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringAxleWriter : IXMLEngineeringComponentWriter { } + + public interface IXmlEngineeringTyreWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringAngledriveWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLAuxiliariesWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLAuxiliaryWriter : IXMLEngineeringComponentWriter { } + + public interface IXMLEngineeringADASWriter : IXMLEngineeringComponentWriter { } + + + +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs new file mode 100644 index 0000000000..e48fdabd82 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs @@ -0,0 +1,4 @@ +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces +{ + public interface IXMLEngineeringEngineWriter : IXMLEngineeringComponentWriter { } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs new file mode 100644 index 0000000000..ac5b7ce71e --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs @@ -0,0 +1,13 @@ +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; + +namespace TUGraz.VectoCore.OutputData.XML +{ + public interface IXMLEngineeringJobWriter + { + IEngineeringInputDataProvider InputData { set; } + IXMLEngineeringWriter Writer { set; } + + object[] WriteXML(); + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs new file mode 100644 index 0000000000..9c42a332ad --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs @@ -0,0 +1,29 @@ +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces { + public interface IXMLEngineeringWriter + { + XNamespace RegisterNamespace(string namespaceUri); + + string GetNSPrefix(string xmlns); + + XDocument Write(IEngineeringInputDataProvider inputData); + + XDocument Write(IInputDataProvider inputData); + + XDocument WriteComponent<T>(T componentInputData) where T : class, IComponentInputData; + + WriterConfiguration Configuration { get; set; } + + string GetFilename<T>(T componentData, string suffix = null) where T:IComponentInputData; + + string RemoveInvalidFileCharacters(string filename); + } + + public class WriterConfiguration + { + public bool SingleFile { get; set; } + public string BasePath { get; set; } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs new file mode 100644 index 0000000000..80e3336928 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs @@ -0,0 +1,26 @@ +using Ninject.Modules; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.OutputData.XML.Engineering.Writer; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.NinjectModules +{ + public class XMLEngineeringWriterTestOverrides : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + // testing derived xml data types + + Bind<IXMLEngineeringAxleWriter>().To<XMLEngineeringAxleWriterV10TEST>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxleWriterV10TEST.NAMESPACE_URI)); + + Bind<IXMLEngineeringEngineWriter>().To<XMLEngineeringEngineWriterV10TEST>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineWriterV10TEST.NAMESPACE_URI)); + + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs new file mode 100644 index 0000000000..f368c38b46 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs @@ -0,0 +1,86 @@ +using Ninject.Modules; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.OutputData.XML.Engineering.Writer; +using TUGraz.VectoCore.OutputData.XML.Writer; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.NinjectModules +{ + public class XMLEngineeringWriterV10InjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IXMLEngineeringJobWriter>().To<XMLEngineeringJobWriterV10>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringJobWriterV10.NAMESPACE_URI)); + + Bind<IXMLVehicleDataWriter>().To<XMLEngineeringVehicleDataWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringComponentWriter>().To<XMLEngineeringComponentsWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringComponentsWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringComponentsWriter>().To<XMLEngineeringComponentsWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringComponentsWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringEngineWriter>().To<XMLEngineeringEngineWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringGearboxWriter>().To<XMLEngineeringGearboxWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearboxWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringGearWriter>().To<XMLEngineeringGearDataWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringRetarderWriter>().To<XMLEngineeringRetarderWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringRetarderWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringAxlegearWriter>().To<XMLEngineeringAxlegearWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlegearWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringAngledriveWriter>().To<XMLEngineeringAngledriveWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAngledriveWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringAxlesWriter>().To<XMLEngineeringAxlesWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlesWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringAxleWriter>().To<XMLEngineeringAxleWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxleWriterV10.NAMESPACE_URI)); + + Bind<IXmlEngineeringTyreWriter>().To<XMLEngineeringTyreWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTyreWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringTorqueconverterWriter>().To<XMLEngineeringTorqueconverterWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTorqueconverterWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringAirdragWriter>().To<XMLEngineeringAirdragWriterV10>() + .Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAirdragWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringDriverDataWriter>().To<XMLEngineeringDriverDataWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLLookaheadDataWriter>().To<XMLEngineeringLookaheadDataWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringLookaheadDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLOverspeedDataWriter>().To<XMLEngineeringOverspeedDataWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringOverspeedDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLAccelerationDataWriter>().To<XMLAccelerationDataWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLAccelerationDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLGearshiftDataWriter>().To<XMLShiftParmeterDataWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLShiftParmeterDataWriterV10.NAMESPACE_URI)); + + Bind<IXMLAuxiliariesWriter>().To<XMLEngineeringAuxiliariesWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliariesWriterV10.NAMESPACE_URI)); + + Bind<IXMLAuxiliaryWriter>().To<XMLEngineeringAuxiliaryWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliaryWriterV10.NAMESPACE_URI)); + + Bind<IXMLEngineeringADASWriter>().To<XMLEngineeringADASWriterV10>().Named( + XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringADASWriterV10.NAMESPACE_URI)); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs new file mode 100644 index 0000000000..f4edfd7400 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Linq; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + public abstract class AbstractXMLWriter + { + public string XMLDataType { get; } + + protected AbstractXMLWriter(string xmlType) + { + XMLDataType = xmlType; + } + + protected XElement[] GetDefaultComponentElements(IComponentInputData data) + { + var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + return new[] { + new XElement(tns + XMLNames.Component_Manufacturer, string.IsNullOrWhiteSpace(data.Manufacturer) ? "N.A." : data.Manufacturer), + new XElement(tns + XMLNames.Component_Model, string.IsNullOrWhiteSpace(data.Model) ? "N.A." : data.Model), + new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)), + new XElement(tns + XMLNames.Component_AppVersion, "VECTO " + VectoSimulationCore.VersionNumber), + }; + } + + protected XElement[] GetDefaultComponentElements(IVehicleEngineeringInputData data) + { + var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + return new[] { + new XElement(tns + XMLNames.Component_Manufacturer, data.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, data.ManufacturerAddress), + new XElement(tns + XMLNames.Component_Model, data.Model), + new XElement(tns + XMLNames.Vehicle_VIN, data.VIN), + new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)), + }; + } + + protected object[] EmbedDataTable( + DataTable table, Dictionary<string, string> mapping, string tagName = "Entry", + Dictionary<string, uint> precision = null) + { + var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + + return (from DataRow row in table.Rows + select + new XElement( + tns + tagName, + table.Columns.Cast<DataColumn>() + .Where(c => mapping.ContainsKey(c.ColumnName)) + .Select( + c => { + var p = precision != null && precision.ContainsKey(c.ColumnName) ? precision[c.ColumnName] : 2; + return new XAttribute(mapping[c.ColumnName], row.Field<string>(c).ToDouble().ToXMLFormat(p)); + }))) + .Cast<object>().ToArray(); + } + + protected object[] ExtCSVResource(DataTable data, string filename) + { + var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + VectoCSVFile.Write(filename, data); + return new object[] { + new XElement( + tns + XMLNames.ExternalResource, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + new XAttribute(XMLNames.ExtResource_File_Attr, filename)) + }; + } + + protected virtual XElement ExtComponent(XDocument document, string component, string filename) + { + var writer = new XmlTextWriter(filename, Encoding.UTF8) { + Formatting = Formatting.Indented + }; + document.WriteTo(writer); + writer.Flush(); + writer.Close(); + var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + var retVal = new XElement( + tns + XMLNames.ExternalResource, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_XML), + new XAttribute(XMLNames.ExtResource_Component_Attr, component), + new XAttribute(XMLNames.ExtResource_File_Attr, filename)); + return retVal; + } + + public virtual IXMLEngineeringWriter Writer { protected get; set; } + + public virtual object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius) + { + return null; + } + + public virtual object[] WriteXML(ITransmissionInputData inputData, int i) + { + return null; + } + + public virtual object[] WriteXML(IDriverModelData inputData) + { + return null; + } + + public virtual object[] WriteXML(IComponentInputData inputData) + { + return null; + } + + + public virtual object[] WriteXML(IEngineeringInputDataProvider inputData) + { + return null; + } + + public virtual object[] WriteXML(IAuxiliaryEngineeringInputData inputData) + { + return null; + } + + public abstract XNamespace ComponentDataNamespace { get; } + + public virtual XAttribute GetXMLTypeAttribute() + { + var xsns = Writer.RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE); + return new XAttribute( + xsns + "type", string.Format("{0}:{1}", Writer.GetNSPrefix(ComponentDataNamespace.NamespaceName), XMLDataType)); + } + + public virtual object[] WriteXML(IAdvancedDriverAssistantSystemsEngineering inputData) + { + return null; + } + } + + + public abstract class AbstractComponentWriter<T> : AbstractXMLWriter where T : class, IComponentInputData + { + protected AbstractComponentWriter(string xmlType) : base(xmlType) { } + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IComponentInputData inputData) + { + var componentData = inputData as T; + if (Writer == null) { + throw new VectoException("no main writer set!"); + } + + if (componentData == null) { + throw new VectoException("input Data is not of type IEngineEngineeringInputData"); + } + + return DoWriteXML(componentData); + } + + #endregion + + protected abstract object[] DoWriteXML(T inputData); + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs new file mode 100644 index 0000000000..111392a037 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs @@ -0,0 +1,64 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLAccelerationDataWriterV10 : AbstractXMLWriter, IXMLAccelerationDataWriter + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + private XNamespace _componentDataNamespace; + public XMLAccelerationDataWriterV10() : base("DriverAccelerationCurveEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IDriverModelData inputData) + { + var acc = inputData as IDriverAccelerationData; + + if (acc == null) { + return new object[] { }; + } + + if (acc.AccelerationCurve.SourceType == DataSourceType.Embedded && + acc.AccelerationCurve.Source.StartsWith(DeclarationData.DeclarationDataResourcePrefix)) { + + var filename = acc.AccelerationCurve.Source.Replace(DeclarationData.DeclarationDataResourcePrefix + ".VACC.", "") + .Replace(Constants.FileExtensions.DriverAccelerationCurve, ""); + var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + return new object[] { + new XElement( + tns + XMLNames.ExternalResource, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + new XAttribute(XMLNames.ExtResource_File_Attr, filename)) + }; + } + + return new object[] { + Writer.Configuration.SingleFile + ? EmbedDataTable(acc.AccelerationCurve, AttributeMappings.DriverAccelerationCurveMapping) + : ExtCSVResource( + acc.AccelerationCurve, + Path.GetFileName(acc.AccelerationCurve.Source ?? "Driver.vacc")) + }; + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs new file mode 100644 index 0000000000..9bfeda37e5 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs @@ -0,0 +1,74 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringLookaheadDataWriterV10 : AbstractXMLWriter, IXMLLookaheadDataWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringLookaheadDataWriterV10() : base("LookAheadCoastingEngineeringType") { } + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IDriverModelData inputData) + { + var lookahead = inputData as ILookaheadCoastingInputData; + var ns = ComponentDataNamespace; + if (lookahead == null) { + return new object[] { }; + } + + return new object[] { + new XElement(ns + XMLNames.DriverModel_LookAheadCoasting_Enabled, lookahead.Enabled), + new XElement(ns + XMLNames.DriverModel_LookAheadCoasting_MinSpeed, lookahead.MinSpeed.AsKmph), + new XElement(ns + XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor, lookahead.LookaheadDistanceFactor), + new XElement( + ns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset, + lookahead.CoastingDecisionFactorOffset), + new XElement( + ns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling, + lookahead.CoastingDecisionFactorScaling), + lookahead.CoastingDecisionFactorTargetSpeedLookup == null + ? null + : new XElement( + ns + XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, + Writer.Configuration.SingleFile + ? EmbedDataTable( + lookahead.CoastingDecisionFactorTargetSpeedLookup, + AttributeMappings.CoastingDFTargetSpeedLookupMapping) + : ExtCSVResource( + lookahead.CoastingDecisionFactorTargetSpeedLookup, + Path.Combine( + Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("Driver_LAC_TargetspeedLookup.csv")))), + lookahead.CoastingDecisionFactorVelocityDropLookup == null + ? null + : new XElement( + ns + XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, + Writer.Configuration.SingleFile + ? EmbedDataTable( + lookahead.CoastingDecisionFactorVelocityDropLookup, + AttributeMappings.CoastingDFVelocityDropLookupMapping) + : ExtCSVResource( + lookahead.CoastingDecisionFactorVelocityDropLookup, + Path.Combine( + Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("Driver_LAC_VelocityDropLookup.csv")))) + }; + } + + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs new file mode 100644 index 0000000000..d6a09011d9 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs @@ -0,0 +1,53 @@ +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringOverspeedDataWriterV10 : AbstractXMLWriter, IXMLOverspeedDataWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringOverspeedDataWriterV10() : base("OverspeedEngineeringType") { } + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IDriverModelData inputData) + { + var overspeed = inputData as IOverSpeedEcoRollEngineeringInputData; + var ns = ComponentDataNamespace; + if (overspeed == null) { + return new object[] { }; + } + + if (overspeed.Mode != DriverMode.Off) { + return new object[] { + new XElement(ns + XMLNames.DriverModel_Overspeed_Mode, overspeed.Mode), + new XElement(ns + XMLNames.DriverModel_Overspeed_MinSpeed, overspeed.MinSpeed.AsKmph), + new XElement(ns + XMLNames.DriverModel_Overspeed_AllowedOverspeed, overspeed.OverSpeed.AsKmph), + new XElement(ns + XMLNames.DriverModel_Overspeed_AllowedUnderspeed, overspeed.UnderSpeed.AsKmph) + }; + } + + return new object[] { + new XElement(ns + XMLNames.DriverModel_Overspeed_Mode, overspeed.Mode), + }; + } + + #endregion + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs new file mode 100644 index 0000000000..029c2e38d4 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs @@ -0,0 +1,58 @@ +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLShiftParmeterDataWriterV10 : AbstractXMLWriter, IXMLGearshiftDataWriter + { + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + private XNamespace _componentDataNamespace; + public XMLShiftParmeterDataWriterV10() : base("ShiftStrategyParametersEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IDriverModelData inputData) + { + var gearshift = inputData as IGearshiftEngineeringInputData; + var tns = ComponentDataNamespace; + if (gearshift == null) { + return new object[] { }; + } + + return new object[] { + new XElement( + tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration, + gearshift.UpshiftMinAcceleration.Value()), + new XElement( + tns + XMLNames.DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay, + gearshift.DownshiftAfterUpshiftDelay.Value()), + new XElement( + tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay, + gearshift.UpshiftAfterDownshiftDelay.Value()), + new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve, gearshift.TorqueReserve), + new XElement( + tns + XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift, + gearshift.MinTimeBetweenGearshift.Value()), + new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed, gearshift.StartSpeed.Value()), + new XElement( + tns + XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration, gearshift.StartAcceleration.Value()), + new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve, gearshift.StartTorqueReserve) + }; + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs new file mode 100644 index 0000000000..406041579b --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs @@ -0,0 +1,35 @@ +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer { + internal class XMLEngineeringADASWriterV10 : AbstractXMLWriter, + IXMLEngineeringADASWriter + { + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringADASWriterV10() : base("AdvancedDriverAssistEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override object[] WriteXML(IAdvancedDriverAssistantSystemsEngineering inputData) + { + var adas = inputData as IAdvancedDriverAssistantSystemsEngineering; + if (adas == null) { + return null; + } + // todo: write different ADAS options + return null; + } + + #endregion + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace { get { return Writer.RegisterNamespace(NAMESPACE_URI); } } + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs new file mode 100644 index 0000000000..73b91d6fd5 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs @@ -0,0 +1,69 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringAirdragWriterV10 : AbstractComponentWriter<IAirdragEngineeringInputData>, + IXMLEngineeringAirdragWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + public XMLEngineeringAirdragWriterV10() : base("AirDragDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Overrides of AbstractComponentWriter<IAirdragEngineeringInputData> + + protected override object[] DoWriteXML(IAirdragEngineeringInputData data) + { + var tns = ComponentDataNamespace; + var id = string.Format("Airdrag-{0}", data.Model); + return new object[] { + new XAttribute(XMLNames.Component_ID_Attr, id), + GetXMLTypeAttribute(), + GetDefaultComponentElements(data), + new XElement(tns + XMLNames.Vehicle_CrossWindCorrectionMode, data.CrossWindCorrectionMode.ToXMLFormat()), + new XElement(tns + XMLNames.Vehicle_AirDragArea, data.AirDragArea.Value().ToXMLFormat(2)), + GetCrossWindCorrectionData(data) + }; + } + + #endregion + + protected virtual XElement GetCrossWindCorrectionData(IAirdragEngineeringInputData airdrag) + { + if (airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.NoCorrection || + airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.DeclarationModeCorrection) { + return null; + } + + var correctionMap = new XElement(ComponentDataNamespace + XMLNames.Vehicle_CrosswindCorrectionData); + + if (Writer.Configuration.SingleFile) { + correctionMap.Add(EmbedDataTable(airdrag.CrosswindCorrectionMap, AttributeMappings.CrossWindCorrectionMapping)); + } else { + var ext = airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.SpeedDependentCorrectionFactor + ? "vcdv" + : "vcdb"; + correctionMap.Add(ExtCSVResource(airdrag.CrosswindCorrectionMap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("CrossWindCorrection." + ext)))); + } + + return correctionMap; + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs new file mode 100644 index 0000000000..5700382ddc --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs @@ -0,0 +1,61 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringAngledriveWriterV10 : AbstractComponentWriter<IAngledriveInputData>, + IXMLEngineeringAngledriveWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAngledriveWriterV10() : base("AngledriveDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Overrides of AbstractComponentWriter<IAxleGearInputData> + + protected override object[] DoWriteXML(IAngledriveInputData data) + { + var tns = ComponentDataNamespace; + var typeId = string.Format("ANGLDRV-{0:0.000}", data.Ratio); + return new object[] { + GetXMLTypeAttribute(), + new XAttribute(XMLNames.Component_ID_Attr, typeId), + + GetDefaultComponentElements(data), + new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)), + data.LossMap == null + ? new XElement( + tns + XMLNames.Axlegear_TorqueLossMap, + new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency)) + : new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap)) + }; + } + + #endregion + + protected virtual object[] GetTransmissionLossMap(TableData lossmap) + { + if (Writer.Configuration.SingleFile) { + return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping); + } + + return ExtCSVResource(lossmap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(lossmap.Source)))); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs new file mode 100644 index 0000000000..af88ecd735 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs @@ -0,0 +1,22 @@ +using System.Xml.Linq; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer { + internal class XMLEngineeringAuxiliariesWriterV10 : AbstractXMLWriter, IXMLAuxiliariesWriter + { + private XNamespace _componentDataNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAuxiliariesWriterV10() : base("AuxiliariesDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs new file mode 100644 index 0000000000..eb0ead0d91 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs @@ -0,0 +1,22 @@ +using System.Xml.Linq; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer { + internal class XMLEngineeringAuxiliaryWriterV10 : AbstractXMLWriter, IXMLAuxiliaryWriter + { + private XNamespace _componentDataNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAuxiliaryWriterV10() : base("AuxiliaryEntryEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs new file mode 100644 index 0000000000..960fb8571c --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs @@ -0,0 +1,113 @@ +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringAxleWriterV10 : AbstractXMLWriter, IXMLEngineeringAxleWriter + { + protected XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + public XMLEngineeringAxleWriterV10() : base("AxleDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #region Overrides of AbstractXMLWriter + + public override object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius) + { + var tns = ComponentDataNamespace; + return new object[] { + new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, idx), + new XElement( + tns + XMLNames.AxleWheels_Axles_Axle_AxleType, + idx == 2 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, idx == 1), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_WeightShare, axle.AxleWeightShare), + CreateTyre(axle.Tyre, idx) + }; + } + + protected virtual XElement CreateTyre(ITyreEngineeringInputData tyre, int idx) + { + var component = XMLNames.AxleWheels_Axles_Axle_Tyre; + if (Writer.Configuration.SingleFile) { + var tns = ComponentDataNamespace; + var tyreWriter = Factory.GetWriter(tyre, Writer); + return new XElement( + tns + component, + new XElement( + tns + XMLNames.ComponentDataWrapper, + tyreWriter.WriteXML(tyre))); + } + + var document = Writer.WriteComponent(tyre); + return ExtComponent(document, component, Writer.GetFilename(tyre, tyre.Dimension ?? idx.ToString())); + } + + #endregion + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + #endregion + } + + + internal class XMLEngineeringAxleWriterV10TEST : XMLEngineeringAxleWriterV10 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST; + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + public override object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius) + { + var tns = ComponentDataNamespace; + return new object[] { + new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, idx), + new XElement(tns + "WeightShare", axle.AxleWeightShare), + new XElement(tns + "TwinTires", axle.TwinTyres), + CreateTyre(axle.Tyre, idx) + }; + } + + protected override XElement CreateTyre(ITyreEngineeringInputData tyre, int idx) + { + var component = "Tire"; + if (Writer.Configuration.SingleFile) { + var tns = ComponentDataNamespace; + var v10 = Writer.RegisterNamespace(XMLEngineeringAxleWriterV10.NAMESPACE_URI); + var tyreWriter = Factory.GetWriter(tyre, Writer); + return new XElement( + tns + component, + new XElement( + v10 + XMLNames.ComponentDataWrapper, + tyreWriter.WriteXML(tyre))); + } + + var document = Writer.WriteComponent(tyre); + return ExtComponent(document, component, Writer.GetFilename(tyre, tyre.Dimension ?? idx.ToString())); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs new file mode 100644 index 0000000000..acc83a1332 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs @@ -0,0 +1,62 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringAxlegearWriterV10 : AbstractComponentWriter<IAxleGearInputData>, + IXMLEngineeringAxlegearWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringAxlegearWriterV10() : base("AxlegearDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Overrides of AbstractComponentWriter<IAxleGearInputData> + + protected override object[] DoWriteXML(IAxleGearInputData data) + { + var tns = ComponentDataNamespace; + var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio); + return new object[] { + GetXMLTypeAttribute(), + new XAttribute(XMLNames.Component_ID_Attr, typeId), + GetDefaultComponentElements(data), + new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)), + data.LossMap == null + ? new XElement( + tns + XMLNames.Axlegear_TorqueLossMap, + new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency)) + : new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap)) + }; + } + + #endregion + + protected virtual object[] GetTransmissionLossMap(TableData lossmap) + { + if (Writer.Configuration.SingleFile) { + return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping); + } + + return ExtCSVResource( + lossmap, + Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(lossmap.Source)))); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs new file mode 100644 index 0000000000..cb1df233e6 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringAxlesWriterV10 : AbstractXMLWriter, IXMLEngineeringAxlesWriter + { + private XNamespace _componentDataNamespace; + private object[] _axles; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + public XMLEngineeringAxlesWriterV10() : base("AxleComponentEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + #region Overrides of AbstractXMLWriter + + public override object[] WriteXML(IComponentInputData vehicle) + { + return _axles ?? (_axles = CreateAxles(vehicle)); + } + + private object[] CreateAxles(IComponentInputData inputData) + { + var vehicle = inputData as IVehicleEngineeringInputData; + if (vehicle == null) { + return null; + } + var retVal = new List<object>(); + var tns = ComponentDataNamespace; + var idx = 1; + foreach (var axle in vehicle.Components.AxleWheels.AxlesEngineering) { + var writer = Factory.GetWriter(axle, Writer, axle.DataSource); + retVal.Add( + new XElement( + tns + XMLNames.AxleWheels_Axles_Axle, + writer.GetXMLTypeAttribute(), + writer.WriteXML(axle, idx++, vehicle.DynamicTyreRadius) + )); + } + + return new object[] { new XElement(tns + XMLNames.AxleWheels_Axles, retVal.ToArray()) }; + } + + #endregion + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs new file mode 100644 index 0000000000..271868d89b --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs @@ -0,0 +1,122 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + public interface IXMLEngineeringComponentsWriter : IXMLEngineeringComponentWriter { } + + public class XMLEngineeringComponentsWriterV10 : AbstractComponentWriter<IVehicleEngineeringInputData>, + IXMLEngineeringComponentsWriter + { + private XNamespace _componentDataNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + + public XMLEngineeringComponentsWriterV10() : base("VehicleComponentsType") { } + + #region Overrides of AbstractComponentWriter<IVehicleEngineeringInputData> + + protected override object[] DoWriteXML(IVehicleEngineeringInputData inputData) + { + var retVal = new List<object>() { + GetXMLTypeAttribute(), + CreateComponent(inputData.Components.EngineInputData, XMLNames.Component_Engine), + CreateComponent(inputData.Components.GearboxInputData, XMLNames.Component_Gearbox), + }; + var singleFile = Writer.Configuration.SingleFile; + Writer.Configuration.SingleFile = true; + + if (inputData.Components.AngledriveInputData.Type == AngledriveType.SeparateAngledrive) { + retVal.Add(CreateComponent(inputData.Components.AngledriveInputData, XMLNames.Component_Angledrive)); + } + + if (inputData.Components.RetarderInputData.Type.IsDedicatedComponent()) { + retVal.Add( + CreateComponent(inputData.Components.RetarderInputData, XMLNames.Component_Retarder) + ); + } + + Writer.Configuration.SingleFile = singleFile; + retVal.AddRange(new object[] { + CreateComponent(inputData.Components.AxleGearInputData, XMLNames.Component_Axlegear), + CreateAxles(inputData), + CreateAuxiliaries(inputData), + CreateComponent(inputData.Components.AirdragInputData, XMLNames.Component_AirDrag) + }); + return retVal.ToArray(); + } + + protected virtual XElement CreateAuxiliaries(IVehicleEngineeringInputData inputData) + { + var v10 = ComponentDataNamespace; + var auxData = inputData.Components.AuxiliaryInputData; + var componentWriter = Factory.GetWriter( + auxData, Writer, inputData.DataSource); + return new XElement( + v10 + XMLNames.Component_Auxiliaries, + new XElement( + v10 + XMLNames.ComponentDataWrapper, + componentWriter.GetXMLTypeAttribute(), + auxData.Auxiliaries.Select(a => Factory.GetWriter(a, Writer, a.DataSource).WriteXML(a)).ToArray() + ) + ); + } + + protected virtual XElement CreateAxles(IVehicleEngineeringInputData inputData) + { + var v10 = ComponentDataNamespace; + var componentWriter = Factory.GetWriter( + inputData.Components.AxleWheels, Writer, inputData.Components.AxleWheels.DataSource); + return new XElement( + v10 + XMLNames.Component_AxleWheels, + new XElement( + v10 + XMLNames.ComponentDataWrapper, + componentWriter.GetXMLTypeAttribute(), + componentWriter.WriteXML(inputData) + ) + ); + } + + + protected virtual XElement CreateComponent<T>(T componentData, string component) where T : class, IComponentInputData + { + if (Writer.Configuration.SingleFile) { + var v10 = ComponentDataNamespace; + var componentWriter = Factory.GetWriter(componentData, Writer); + return new XElement( + v10 + component, + new XElement( + v10 + XMLNames.ComponentDataWrapper, + componentWriter.WriteXML(componentData) + ) + ); + } + + var document = Writer.WriteComponent(componentData); + return ExtComponent(document, component, Writer.GetFilename(componentData)); + } + + #endregion + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs new file mode 100644 index 0000000000..f13cb97f16 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs @@ -0,0 +1,67 @@ +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringDriverDataWriterV10 : AbstractXMLWriter, IXMLEngineeringDriverDataWriter + { + private XNamespace _componentDataNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + public XMLEngineeringDriverDataWriterV10() : base("DriverModelEngineeringType") { } + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IEngineeringInputDataProvider inputData) + { + var driverData = inputData.DriverInputData; + var v10 = ComponentDataNamespace; + + var lacWriter = Factory.GetWriter(driverData.Lookahead, Writer, inputData.DataSource); + var overspeedWriter = Factory.GetWriter(driverData.OverSpeedEcoRoll, Writer, inputData.DataSource); + var accWriter = Factory.GetWriter(driverData.AccelerationCurve, Writer, inputData.DataSource); + var gearshiftWriter = Factory.GetWriter(driverData.GearshiftInputData, Writer, inputData.DataSource); + return new object[] { + new XElement( + v10 + XMLNames.DriverModel_LookAheadCoasting, + lacWriter.GetXMLTypeAttribute(), + lacWriter.WriteXML(driverData.Lookahead) + ), + new XElement( + v10 + XMLNames.DriverModel_Overspeed, + overspeedWriter.GetXMLTypeAttribute(), + overspeedWriter.WriteXML(driverData.OverSpeedEcoRoll) + ), + new XElement( + v10 + XMLNames.DriverModel_DriverAccelerationCurve, + accWriter.GetXMLTypeAttribute(), + accWriter.WriteXML(driverData.AccelerationCurve) + ), + new XElement( + v10 + XMLNames.DriverModel_ShiftStrategyParameters, + gearshiftWriter.GetXMLTypeAttribute(), + gearshiftWriter.WriteXML(driverData.GearshiftInputData) + ) + }; + } + + #endregion + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs new file mode 100644 index 0000000000..29b1036355 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs @@ -0,0 +1,102 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringEngineWriterV10 : AbstractComponentWriter<IEngineEngineeringInputData>, + IXMLEngineeringEngineWriter + { + protected XNamespace _componentNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + + public XMLEngineeringEngineWriterV10() : base("EngineDataEngineeringType") { } + + #region Overrides of AbstractXMLEngineeringEngineWriter + + protected override object[] DoWriteXML(IEngineEngineeringInputData data) + { + var ns = ComponentDataNamespace; + return new object[] { + GetXMLTypeAttribute(), + GetDefaultComponentElements(data), + new XElement(ns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)), + new XElement(ns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)), + data.Inertia != null ? new XElement(ns + XMLNames.Engine_Inertia, data.Inertia.Value()) : null, + new XElement(ns + XMLNames.Engine_FCCorrection, data.WHTCEngineering.ToXMLFormat(4)), + new XElement(ns + XMLNames.Engine_FuelType, data.FuelType.ToXMLFormat()), + new XElement(ns + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(ns, data)), + new XElement(ns + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(ns, data)) + }; + } + + #endregion + + protected virtual object[] GetFullLoadDragCurve(XNamespace ns, IEngineEngineeringInputData data) + { + if (Writer.Configuration.SingleFile) { + return EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping); + } + + var filename = Path.Combine( + Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(string.Format("ENG_{0}.vfld", data.Model))); + return ExtCSVResource(data.FullLoadCurve, filename); + } + + protected virtual object[] GetFuelConsumptionMap(XNamespace ns, IEngineEngineeringInputData data) + { + if (Writer.Configuration.SingleFile) { + return EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping); + } + + var filename = Path.Combine( + Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(string.Format("ENG_{0}.vmap", data.Model))); + return ExtCSVResource(data.FuelConsumptionMap, filename); + } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentNamespace ?? (_componentNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } + + internal class XMLEngineeringEngineWriterV10TEST : XMLEngineeringEngineWriterV10 + { + public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST; + + protected override object[] DoWriteXML(IEngineEngineeringInputData data) + { + var v10 = Writer.RegisterNamespace(XMLEngineeringEngineWriterV10.NAMESPACE_URI); + var v11 = ComponentDataNamespace; + return new object[] { + GetXMLTypeAttribute(), + GetDefaultComponentElements(data), + new XElement(v10 + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)), + new XElement(v10 + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)), + data.Inertia != null ? new XElement(v10 + XMLNames.Engine_Inertia, data.Inertia.Value()) : null, + new XElement(v10 + XMLNames.Engine_FCCorrection, data.WHTCEngineering.ToXMLFormat(4)), + new XElement(v10 + XMLNames.Engine_FuelType, data.FuelType.ToXMLFormat()), + new XElement(v10 + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(v10, data)), + new XElement(v10 + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(v10, data)), + new XElement(v11 + XMLNames.Engine_RatedPower, data.RatedPowerDeclared?.Value().ToXMLFormat(0) ?? "xxx kW"), + new XElement(v11 + XMLNames.Engine_RatedSpeed, data.RatedSpeedDeclared?.AsRPM.ToXMLFormat(0) ?? "yyy rpm") + }; + } + + public override XNamespace ComponentDataNamespace + { + get { return _componentNamespace ?? (_componentNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs new file mode 100644 index 0000000000..183bc4e82e --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs @@ -0,0 +1,80 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringGearDataWriterV10 : AbstractXMLWriter, IXMLEngineeringGearWriter + { + private XNamespace _componentDataNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringGearDataWriterV10() : base("GearEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(ITransmissionInputData gearData, int i) + { + var tns = ComponentDataNamespace; + var gear = new XElement( + tns + XMLNames.Gearbox_Gears_Gear, + new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i), + GetXMLTypeAttribute(), + new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)), + gearData.MaxTorque != null + ? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value()) + : null, + gearData.MaxInputSpeed != null + ? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, gearData.MaxInputSpeed.AsRPM) + : null); + + if (gearData.LossMap != null) { + gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, GetTransmissionLossMap(tns, gearData.LossMap))); + } else { + gear.Add( + new XElement( + tns + XMLNames.Gearbox_Gear_TorqueLossMap, + new XElement(tns + XMLNames.Gearbox_Gear_Efficiency, gearData.Efficiency))); + } + if (gearData.ShiftPolygon != null) { + gear.Add( + new XElement(tns + XMLNames.Gearbox_Gears_Gear_ShiftPolygon, CreateShiftPolygon(tns, gearData.ShiftPolygon))); + } + return new object[] { gear }; + } + + #endregion + + private object[] GetTransmissionLossMap(XNamespace tns, TableData lossmap) + { + if (Writer.Configuration.SingleFile) { + return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping); + } + + return ExtCSVResource(lossmap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(lossmap.Source)))); + } + + private object[] CreateShiftPolygon(XNamespace tns, TableData shiftPolygon) + { + if (Writer.Configuration.SingleFile) { + return EmbedDataTable(shiftPolygon, AttributeMappings.ShiftPolygonMapping); + } + + return ExtCSVResource(shiftPolygon, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(shiftPolygon.Source)))); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs new file mode 100644 index 0000000000..2595000945 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs @@ -0,0 +1,66 @@ +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + public interface IXMLEngineeringGearboxWriter : IXMLEngineeringComponentWriter { } + + internal class XMLEngineeringGearboxWriterV10 : AbstractComponentWriter<IGearboxEngineeringInputData>, + IXMLEngineeringGearboxWriter + { + private XNamespace _componentNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + public XMLEngineeringGearboxWriterV10() : base("GearboxDataEngineeringType") { } + + #region Overrides of AbstractComponentWriter<IGearboxEngineeringInputData> + + protected override object[] DoWriteXML(IGearboxEngineeringInputData data) + { + var tns = Writer.RegisterNamespace(NAMESPACE_URI); + var gears = new XElement(tns + XMLNames.Gearbox_Gears); + var i = 1; + + foreach (var gearData in data.Gears) { + var gearWriter = Factory.GetWriter(gearData, Writer, gearData.DataSource); + var gear = gearWriter.WriteXML(gearData, i++); + + gears.Add(gear); + } + + return new object[] { + GetXMLTypeAttribute(), + new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", data.Model)), + + GetDefaultComponentElements(data), + new XElement(tns + XMLNames.Gearbox_TransmissionType, data.Type.ToXMLFormat()), + new XElement(tns + XMLNames.Gearbox_Inertia, data.Inertia.Value()), + new XElement(tns + XMLNames.Gearbox_TractionInterruption, data.TractionInterruption.Value()), gears + }; + } + + #endregion + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentNamespace ?? (_componentNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs new file mode 100644 index 0000000000..fd92a31b6c --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs @@ -0,0 +1,128 @@ +using System.Collections.Generic; +using System.IO; +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Writer; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Writer +{ + internal class XMLEngineeringJobWriterV10 : AbstractXMLWriter, IXMLEngineeringJobWriter + { + private XNamespace _componentDataNamespace; + + public IEngineeringInputDataProvider InputData { protected get; set; } + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringJobWriterV10() : base("VectoJobEngineeringType") { } + + + public virtual object[] WriteXML() + { + if (InputData.JobInputData.EngineOnlyMode) { + return WriteEngineOnlyXML(); + } + + return WriteFullPowertrainXML(); + } + + protected virtual object[] WriteFullPowertrainXML() + { + var v10 = ComponentDataNamespace; + + var driverDataWriter = Factory.GetWriter( + InputData.DriverInputData, Writer, InputData.JobInputData.Vehicle.DataSource); + + return new object[] { + new XElement(v10 + XMLNames.VectoJob_EngineOnlyMode, InputData.JobInputData.EngineOnlyMode), + CreateVehicle(InputData.JobInputData.Vehicle), + new XElement( + v10 + XMLNames.Component_DriverModel, + driverDataWriter.GetXMLTypeAttribute(), + driverDataWriter.WriteXML(InputData)), + CreateMissions(v10, InputData.JobInputData.Cycles) + }; + } + + protected virtual object[] WriteEngineOnlyXML() + { + var v10 = ComponentDataNamespace; + return new object[] { + new XElement(v10 + XMLNames.VectoJob_EngineOnlyMode, InputData.JobInputData.EngineOnlyMode), + new XElement( + v10 + XMLNames.Component_Engine, + new XElement(v10 + XMLNames.ComponentDataWrapper, + Factory.GetWriter(InputData.JobInputData.EngineOnly, Writer).WriteXML(InputData.JobInputData.EngineOnly) + ) + ), + CreateMissions(v10, InputData.JobInputData.Cycles) + }; + } + + + + protected virtual XElement CreateVehicle(IVehicleEngineeringInputData vehicle) + { + if (Writer.Configuration.SingleFile) { + var v10 = ComponentDataNamespace; + var vehicleDataWriter = Factory.GetWriter(vehicle, Writer); + return new XElement( + v10 + XMLNames.Component_Vehicle, + vehicleDataWriter.WriteXML(vehicle) + ); + } + + var document = Writer.WriteComponent(vehicle); + return ExtComponent(document , XMLNames.Component_Vehicle, Writer.GetFilename(vehicle)); + } + + + protected virtual XElement CreateMissions(XNamespace tns, IEnumerable<ICycleData> data) + { + var retVal = new XElement(tns + XMLNames.VectoJob_MissionCycles); + foreach (var cycle in data) { + var filename = cycle.CycleData.Source; + if (filename == null) { + continue; + } + + if (cycle.CycleData.SourceType == DataSourceType.Embedded && + filename.StartsWith(DeclarationData.DeclarationDataResourcePrefix)) { + filename = filename.Replace(DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles.", "") + .Replace(Constants.FileExtensions.CycleFile, ""); + } else { + VectoCSVFile.Write(Path.Combine(Writer.Configuration.BasePath, Path.GetFileName(filename)), cycle.CycleData); + } + retVal.Add( + new XElement( + tns + XMLNames.Missions_Cycle, + new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), + new XAttribute(XMLNames.ExtResource_File_Attr, Path.GetFileName(filename)) + ) + ); + } + + return retVal; + } + + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs new file mode 100644 index 0000000000..9ef1fb70ba --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs @@ -0,0 +1,52 @@ +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringRetarderWriterV10 : AbstractComponentWriter<IRetarderInputData>, + IXMLEngineeringRetarderWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + public XMLEngineeringRetarderWriterV10() : base("RetarderDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Overrides of AbstractComponentWriter<IRetarderInputData> + + protected override object[] DoWriteXML(IRetarderInputData data) + { + var tns = ComponentDataNamespace; + var retarder = new object[] { + GetXMLTypeAttribute(), + new XAttribute(XMLNames.Component_ID_Attr, "RET-none"), + GetDefaultComponentElements(data), + new XElement( + tns + XMLNames.Retarder_RetarderLossMap, + Writer.Configuration.SingleFile + ? EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping) + : ExtCSVResource( + data.LossMap, + Path.Combine( + Writer.Configuration.BasePath, + Writer.RemoveInvalidFileCharacters(string.Format("RET_{0}.vrlm", data.Model))))) + }; + return retarder; + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs new file mode 100644 index 0000000000..d839bd1c08 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.IO; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringTorqueconverterWriterV10 : AbstractComponentWriter<ITorqueConverterEngineeringInputData>, + IXMLEngineeringTorqueconverterWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + public XMLEngineeringTorqueconverterWriterV10() : base("TorqueConverterEngineeringDataType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Overrides of AbstractComponentWriter<ITorqueConverterEngineeringInputData> + + protected override object[] DoWriteXML(ITorqueConverterEngineeringInputData data) + { + var tns = ComponentDataNamespace; + return new object[] { + GetXMLTypeAttribute(), + new XAttribute(XMLNames.Component_ID_Attr, string.Format("TC-{0}", data.Model)), + GetDefaultComponentElements(data), + new XElement(tns + XMLNames.TorqueConverter_ReferenceRPM, data.ReferenceRPM.AsRPM.ToXMLFormat()), + new XElement( + tns + XMLNames.TorqueConverter_Characteristics, + Writer.Configuration.SingleFile + ? EmbedDataTable( + data.TCData, AttributeMappings.TorqueConverterDataMapping, + precision: new Dictionary<string, uint>() { + { TorqueConverterDataReader.Fields.SpeedRatio, 4 } + }) + : ExtCSVResource( + data.TCData, + Path.Combine( + Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(data.TCData.Source))))), + new XElement(tns + XMLNames.TorqueConverter_Inertia, data.Inertia.Value()) + }; + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs new file mode 100644 index 0000000000..c249573424 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + internal class XMLEngineeringTyreWriterV10 : AbstractComponentWriter<ITyreEngineeringInputData>, + IXmlEngineeringTyreWriter + { + private XNamespace _componentDataNamespace; + + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + public XMLEngineeringTyreWriterV10() : base("TyreDataEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Overrides of AbstractComponentWriter<ITyreEngineeringInputData> + + protected override object[] DoWriteXML(ITyreEngineeringInputData inputData) + { + var tns = ComponentDataNamespace; + + //var retVal = new list<object> { + var tyre = new List<object> { + GetXMLTypeAttribute(), + GetDefaultComponentElements(inputData) + + }; + + if (string.IsNullOrWhiteSpace(inputData.Dimension)) { + tyre.Add(new XElement( + tns + XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius, inputData.DynamicTyreRadius.Value() * 1000)); + tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Inertia, inputData.Inertia.Value())); + } else { + tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, inputData.Dimension)); + } + tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, inputData.RollResistanceCoefficient.ToXMLFormat(4))); + tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, inputData.TyreTestLoad.Value().ToXMLFormat(0))); + + return tyre.ToArray(); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs new file mode 100644 index 0000000000..bf18416897 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs @@ -0,0 +1,119 @@ +using System.IO; +using System.Linq; +using System.Xml.Linq; +using Ninject; +using TUGraz.IVT.VectoXML; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer +{ + public class XMLEngineeringVehicleDataWriterV10 : AbstractXMLWriter, IXMLVehicleDataWriter + { + private XNamespace _componentDataNamespace; + public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10; + + [Inject] + public IEngineeringWriterFactory Factory { protected get; set; } + + public XMLEngineeringVehicleDataWriterV10() : base("VehicleEngineeringType") { } + + #region Overrides of AbstractXMLWriter + + public override XNamespace ComponentDataNamespace + { + get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); } + } + + #endregion + + #region Implementation of IXMLEngineeringComponentWriter + + public override object[] WriteXML(IComponentInputData inputData) + { + var vehicle = inputData as IVehicleEngineeringInputData; + var ns = ComponentDataNamespace; + + if (vehicle == null) { + return null; + } + var pto = vehicle.Components.PTOTransmissionInputData; + + var componentsWriter = Factory.GetWriter(vehicle.Components, Writer, vehicle.DataSource); + var retVal = new object[] { + GetXMLTypeAttribute(), + GetDefaultComponentElements(vehicle), + vehicle.VehicleCategory != VehicleCategory.Unknown ? new XElement(ns + XMLNames.Vehicle_VehicleCategory, vehicle.VehicleCategory.ToXMLFormat()) : null, + new XElement(ns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()), + new XElement(ns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.Value().ToXMLFormat(0)), + new XElement(ns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value().ToXMLFormat(0)), + + //new XElement(tns + XMLNames.Vehicle_AirDragArea, airdrag.AirDragArea.Value()), + new XElement(ns + XMLNames.Vehicle_RetarderType, vehicle.Components.RetarderInputData.Type.ToXMLFormat()), + vehicle.Components.RetarderInputData.Type.IsDedicatedComponent() + ? new XElement(ns + XMLNames.Vehicle_RetarderRatio, vehicle.Components.RetarderInputData.Ratio.ToXMLFormat(3)) + : null, + new XElement(ns + XMLNames.Vehicle_AngledriveType, vehicle.Components.AngledriveInputData.Type.ToXMLFormat()), + new XElement(ns + XMLNames.Vehicle_PTOType, pto.PTOTransmissionType), + GetPTOData(ns, pto), + CreateTorqueLimits(ns, vehicle), + new XElement(ns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()), + new XElement(ns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()), + new XElement( + ns + XMLNames.Vehicle_Components, + componentsWriter.WriteXML(vehicle) + ), + vehicle.ADAS == null ? null : + new XElement(ns + XMLNames.Vehicle_AdvancedDriverAssist, + Factory.GetWriter(vehicle.ADAS, Writer, vehicle.ADAS.DataSource).WriteXML(vehicle) + ), + }; + return retVal; + } + + #endregion + + protected virtual object[] GetPTOData(XNamespace tns, IPTOTransmissionInputData pto) + { + if (pto.PTOTransmissionType == "None") { + return null; + } + + var ptoLossMap = new XElement(tns + XMLNames.Vehicle_PTOIdleLossMap); + ptoLossMap.Add( + Writer.Configuration.SingleFile + ? EmbedDataTable(pto.PTOLossMap, AttributeMappings.PTOLossMap) + : ExtCSVResource(pto.PTOLossMap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("PTO_LossMap.vptol")))); + var ptoCycle = new XElement(tns + XMLNames.Vehicle_PTOCycle); + ptoCycle.Add( + Writer.Configuration.SingleFile + ? EmbedDataTable(pto.PTOCycle, AttributeMappings.PTOCycleMap) + : ExtCSVResource(pto.PTOCycle, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("PTO_cycle.vptoc")))); + + return new object[] { ptoLossMap, ptoCycle }; + } + + protected virtual XElement CreateTorqueLimits(XNamespace tns, IVehicleDeclarationInputData vehicle) + { + return vehicle.TorqueLimits.Count == 0 + ? null + : new XElement( + tns + XMLNames.Vehicle_TorqueLimits, + vehicle.TorqueLimits + .OrderBy(x => x.Gear) + .Select( + entry => new XElement( + tns + XMLNames.Vehicle_TorqueLimits_Entry, + new XAttribute(XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr, entry.Gear), + new XAttribute(XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr, entry.MaxTorque.ToXMLFormat(0)) + ) + ) + ); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs new file mode 100644 index 0000000000..0e618246a9 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs @@ -0,0 +1,176 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Xml.Linq; +using Ninject; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering +{ + internal class XMLEngineeringWriter : IXMLEngineeringWriter + { + protected readonly Dictionary<string, string> NamespaceLocationMap = new Dictionary<string, string>() { + { XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10, XMLDefinitions.SCHEMA_BASE_LOCATION + "VectoEngineeringInput.1.0.xsd" }, + { XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10, XMLDefinitions.SCHEMA_BASE_LOCATION + "VectoEngineeringDefinitions.1.0.xsd"}, + { XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST, XMLDefinitions.SCHEMA_BASE_LOCATION + "VectoEngineeringDefinitionsTEST.1.1.xsd"}, + }; + + protected Dictionary<string, XNamespace> _namespaces = new Dictionary<string, XNamespace>(); + + + + [Inject] + public IEngineeringWriterFactory WriterFactory { protected get; set; } + + public XMLEngineeringWriter() + { + RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE); + RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + _namespaces.Add("", XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + + Configuration = new WriterConfiguration { SingleFile = true, BasePath = "" }; + } + + public XDocument Write(IInputDataProvider inputData) + { + return Write(inputData as IEngineeringInputDataProvider); + } + + public XDocument Write(IEngineeringInputDataProvider inputData) + { + var version = "1.0"; + var jobWriter = WriterFactory.CreateJobWriter(version, this, inputData); + + var retVal = new XDocument(); + var v10 = RegisterNamespace(XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10); + + var jobXML = jobWriter.WriteXML(); + retVal.Add( + new XElement( + v10 + XMLNames.VectoInputEngineering, + GetNamespaceAttributes(), + GetSchemaLocations(), + jobXML + ) + ); + return retVal; + } + + public XDocument WriteComponent<T>(T componentInputData) where T : class, IComponentInputData + { + var retVal = new XDocument(); + + var v10Inp = RegisterNamespace(XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10); + var v10Def = RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10); + var xsns = RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE); + var writer = WriterFactory.GetWriter(componentInputData, this); + + // wrap every component except the vehicle in a Data element + var componentXML = writer?.WriteXML(componentInputData); + if (typeof(T) != typeof(IVehicleEngineeringInputData)) { + componentXML = new object[] {new XElement( + v10Def + XMLNames.ComponentDataWrapper, + componentXML)}; + } + retVal.Add( + new XElement( + v10Inp + XMLNames.VectoComponentEngineering, + new XAttribute( + xsns + "type", string.Format("{0}:VectoComponentEngineeringType", GetNSPrefix(v10Def.NamespaceName))), + GetNamespaceAttributes(), + GetSchemaLocations(), + new XElement( + v10Def + XMLWriterMapping.GetXMLTag(typeof(T)), + componentXML ) + ) + ); + return retVal; + } + + private XAttribute GetSchemaLocations() + { + var xsns = RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE); + + return new XAttribute( + xsns + "schemaLocation", + string.Join(" ", NamespaceLocationMap.Where(x => _namespaces.ContainsKey(x.Key)).Select(x => $"{x.Key} {x.Value}"))); + } + + public WriterConfiguration Configuration { get; set; } + + public string GetFilename<T>(T componentData, string suffix = null) where T : IComponentInputData + { + var formatString = XMLWriterMapping.GetFilenameTemplate(typeof(T)); + + return + Path.Combine( + Configuration.BasePath, + RemoveInvalidFileCharacters( + string.Format( + formatString, componentData.Manufacturer ?? "N.A.", componentData.Model ?? "N.A.", + suffix != null ? "_" + suffix : null))); + } + + + public XNamespace RegisterNamespace(string namespaceUri) + { + if (_namespaces.ContainsKey(namespaceUri)) { + return _namespaces[namespaceUri]; + } + + var ns = XNamespace.Get(namespaceUri); + _namespaces.Add(namespaceUri, ns); + return ns; + } + + #region Implementation of IXMLEngineeringWriter + + #endregion + + protected virtual object[] GetNamespaceAttributes() + { + return _namespaces + .Select(x => new XAttribute(x.Key == "" ? "xmlns" : XNamespace.Xmlns + GetNSPrefix(x.Key), x.Value)).Cast<object>() + .ToArray(); + } + + public string GetNSPrefix(string xmlns) + { + if (xmlns == XMLDefinitions.XML_SCHEMA_NAMESPACE) { + return "xsi"; + } + if (xmlns == XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10) { + return "tns"; + } + + if (xmlns.StartsWith("urn:tugraz:ivt:VectoAPI")) { + var parts = xmlns.Split(':'); + return parts.Last(); + } + + throw new VectoException("unknown namespace!"); + } + + public string GetComponentFilename(IComponentInputData component) + { + string formatString = null; + component.Switch() + .Case<IEngineEngineeringInputData>(c => formatString = "ENG_{0}.xml"); + + return RemoveInvalidFileCharacters(string.Format(formatString ?? "{0}", component.Model)); + } + + public string RemoveInvalidFileCharacters(string filename) + { + string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); + Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch))); + return r.Replace(filename, ""); + } + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs new file mode 100644 index 0000000000..5cc8a54dce --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs @@ -0,0 +1,36 @@ +using Ninject.Extensions.Factory; +using Ninject.Modules; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; +using TUGraz.VectoCore.OutputData.XML.Engineering; +using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.OutputData.XML.Engineering.Writer; +using TUGraz.VectoCore.OutputData.XML.Factory; +using TUGraz.VectoCore.OutputData.XML.NinjectModules; +using TUGraz.VectoCore.OutputData.XML.Writer; +using TUGraz.VectoCore.Utils; +using TUGraz.VectoCore.Utils.Ninject; + +namespace TUGraz.VectoCore.OutputData.XML +{ + public class XMLEngineeringWriterInjectModule : NinjectModule + { + #region Overrides of NinjectModule + + public override void Load() + { + Bind<IEngineeringWriterInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider()); + + Bind<IEngineeringWriterFactory>().To<EngineeringWriterFactory>(); + + Bind<IXMLEngineeringWriter>().To<XMLEngineeringWriter>(); + + + Kernel?.Load(new [] { + new XMLEngineeringWriterV10InjectModule() + }); + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs new file mode 100644 index 0000000000..0ef3c95af5 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; +using TUGraz.VectoCore.OutputData.XML.Engineering.Writer; + +namespace TUGraz.VectoCore.OutputData.XML.Engineering { + internal static class XMLWriterMapping + { + static Dictionary<Type, Entry> mapping = new Dictionary<Type, Entry>() { + + { + typeof(IEngineEngineeringInputData), + new Entry { + WriterType = typeof(IXMLEngineeringEngineWriter), + XMLTag = XMLNames.Component_Engine, + FilenameTemplate = "Engine-{0}_{1}{2}.xml" + } + }, { + typeof(IVehicleEngineeringInputData), + new Entry { + WriterType = typeof(IXMLVehicleDataWriter), + XMLTag = XMLNames.Component_Vehicle, + FilenameTemplate = "Vehicle-{0}_{1}{2}.xml" + } + }, { + typeof(IVehicleComponentsEngineering), + new Entry { + WriterType = typeof(IXMLEngineeringComponentWriter), + } + }, { + typeof(IGearboxEngineeringInputData), + new Entry { + WriterType = typeof(IXMLEngineeringGearboxWriter), + XMLTag = XMLNames.Component_Gearbox, + FilenameTemplate = "Gearbox-{0}_{1}{2}.xml" + } + }, { + typeof(ITransmissionInputData), + new Entry { WriterType = typeof(IXMLEngineeringGearWriter) } + }, { + typeof(IDriverEngineeringInputData), + new Entry { + WriterType = typeof(IXMLEngineeringDriverDataWriter), + } + }, { + typeof(IRetarderInputData), + new Entry { + WriterType = typeof(IXMLEngineeringRetarderWriter), + XMLTag = XMLNames.Component_Retarder, + FilenameTemplate = "Retarder-{0}_{1}{2}.xml" + } + }, { + typeof(IAxleGearInputData), + new Entry { + WriterType = typeof(IXMLEngineeringAxlegearWriter), + XMLTag = XMLNames.Component_Axlegear, + FilenameTemplate = "Axlegear-{0}_{1}{2}.xml" + } + }, { + typeof(IAxlesEngineeringInputData), + new Entry { + WriterType = typeof(IXMLEngineeringAxlesWriter), + XMLTag = XMLNames.Component_AxleWheels, + } + }, { + typeof(IAxleEngineeringInputData), + new Entry { WriterType = typeof(IXMLEngineeringAxleWriter) } + }, { + typeof(ITyreEngineeringInputData), + new Entry { + WriterType = typeof(IXmlEngineeringTyreWriter), + XMLTag = XMLNames.AxleWheels_Axles_Axle_Tyre, + FilenameTemplate = "Tyre-{0}_{1}{2}.xml" + } + }, { + typeof(ITorqueConverterEngineeringInputData), + new Entry { + WriterType = typeof(IXMLEngineeringTorqueconverterWriter), + XMLTag = XMLNames.Component_TorqueConverter, + FilenameTemplate = "TorqueConverter-{0}_{1}{2}.xml" + } + }, { + typeof(IAirdragEngineeringInputData), + new Entry { + WriterType = typeof(IXMLEngineeringAirdragWriter), + XMLTag = XMLNames.Component_AirDrag, + FilenameTemplate = "Airdrag-{0}_{1}{2}.xml" + } + }, { + typeof(IAngledriveInputData), + new Entry { + WriterType = typeof(IXMLEngineeringAngledriveWriter), + XMLTag = XMLNames.Component_Angledrive, + FilenameTemplate = "Angledrive{0}_{1}{2}.xml" + } + }, { + typeof(ILookaheadCoastingInputData), + new Entry { WriterType = typeof(IXMLLookaheadDataWriter) } + }, { + typeof(IOverSpeedEcoRollEngineeringInputData), + new Entry { WriterType = typeof(IXMLOverspeedDataWriter) } + }, { + typeof(IDriverAccelerationData), + new Entry { WriterType = typeof(IXMLAccelerationDataWriter) } + }, { + typeof(IGearshiftEngineeringInputData), + new Entry { WriterType = typeof(IXMLGearshiftDataWriter) } + }, { + typeof(IAuxiliariesEngineeringInputData), + new Entry { WriterType = typeof(IXMLAuxiliariesWriter) } + }, { + typeof(IAuxiliaryEngineeringInputData), + new Entry { WriterType = typeof(IXMLAuxiliaryWriter)} + }, { + typeof(IAdvancedDriverAssistantSystemsEngineering), new Entry() {WriterType = typeof(IXMLEngineeringADASWriter), XMLTag = XMLNames.Vehicle_AdvancedDriverAssist} + } + + }; + + public class Entry + { + public Type WriterType { get; set; } + + public string XMLTag { get; set; } + + public string FilenameTemplate { get; set; } + } + + public static Type GetWriterType(Type inputType) + { + return mapping.ContainsKey(inputType) ? mapping[inputType].WriterType : null; + } + + public static string GetXMLTag(Type inputType) + { + return mapping.ContainsKey(inputType) ? mapping[inputType].XMLTag : null; + } + + public static string GetFilenameTemplate(Type inputType) + { + return mapping.ContainsKey(inputType) ? mapping[inputType].FilenameTemplate : "{0}_{1}.xml"; + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs deleted file mode 100644 index abfc5edfcd..0000000000 --- a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs +++ /dev/null @@ -1,602 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.Collections.Generic; -using System.Data; -using System.IO; -using System.Text.RegularExpressions; -using System.Xml; -using System.Xml.Linq; -using TUGraz.IVT.VectoXML; -using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.Reader.ComponentData; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.OutputData.XML -{ - public class XMLEngineeringWriter : AbstractXMLWriter - { - private readonly bool _singleFile; - private readonly XNamespace _declarationNamespace; - - - public XMLEngineeringWriter(string basePath, bool singleFile, string vendor) : base(basePath, vendor) - { - _singleFile = singleFile; - SchemaVersion = "0.7"; - tns = Constants.XML.VectoEngineeringDefinitionsNS; // "urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.6"; - rootNamespace = Constants.XML.VectoEngineeringInputNS; // "urn:tugraz:ivt:VectoAPI:EngineeringInput:v0.6"; - _declarationNamespace = Constants.XML.VectoDeclarationDefinitionsNS; - //"urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v0.6"; - } - - public XDocument GenerateVectoJob(IEngineeringInputDataProvider data) - { - var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - - var job = new XDocument(); - job.Add(new XElement(rootNamespace + XMLNames.VectoInputEngineering, - new XAttribute("schemaVersion", SchemaVersion), - new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), - new XAttribute(XNamespace.Xmlns + "tns", rootNamespace), - new XAttribute(XNamespace.Xmlns + "vdecdef", _declarationNamespace), - new XAttribute(xsi + "schemaLocation", - string.Format("{0} {1}VectoEngineeringInput.xsd", rootNamespace, SchemaLocationBaseUrl)), - data.JobInputData.EngineOnlyMode - ? CreateEngineOnly(data) - : CreateEngineeringJob(data)) - ); - return job; - } - - public XDocument GenerateVectoComponent(IGearboxEngineeringInputData gearbox, - ITorqueConverterEngineeringInputData torqueConverter) - { - return GenerateComponentDocument(CreateGearbox(gearbox, torqueConverter)); - } - - public XDocument GenerateVectoComponent(IAxleGearInputData data) - { - return GenerateComponentDocument(CreateAxlegear(data)); - } - - protected XDocument GenerateComponentDocument(XElement content) - { - var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - - var component = new XDocument(); - component.Add(new XElement(rootNamespace + XMLNames.VectoComponentEngineering, - new XAttribute("schemaVersion", SchemaVersion), - new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), - new XAttribute(XNamespace.Xmlns + "tns", rootNamespace), - new XAttribute(XNamespace.Xmlns + "vdecdef", _declarationNamespace), - new XAttribute(xsi + "schemaLocation", - string.Format("{0} {1}VectoEngineeringInput.xsd", rootNamespace, SchemaLocationBaseUrl)), - content) - ); - return component; - } - - protected XElement[] CreateEngineOnly(IEngineeringInputDataProvider data) - { - return new[] { - new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, true), - CreateEngine(data.JobInputData.EngineOnly, false), - CreateMissions(data.JobInputData.Cycles) - }; - } - - protected XElement[] CreateEngineeringJob(IEngineeringInputDataProvider data) - { - return new[] { - new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, false), - CreateVehicle(data), - CreateDriverModel(data), - CreateMissions(data.JobInputData.Cycles) - }; - } - - private XElement CreateMissions(IEnumerable<ICycleData> data) - { - var retVal = new XElement(tns + XMLNames.VectoJob_MissionCycles); - foreach (var cycle in data) { - var filename = cycle.CycleData.Source; - if (filename == null) { - continue; - } - VectoCSVFile.Write(Path.Combine(BasePath, Path.GetFileName(filename)), cycle.CycleData); - retVal.Add(new XElement(tns + XMLNames.Missions_Cycle, - new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - new XAttribute(XMLNames.ExtResource_File_Attr, Path.GetFileName(filename)) - ) - ); - } - return retVal; - } - - private XElement CreateDriverModel(IEngineeringInputDataProvider engineering) - { - var driver = engineering.DriverInputData; - var gbx = engineering.JobInputData.Vehicle.Components.GearboxInputData; - var lookahead = driver.Lookahead; - var overspeed = driver.OverSpeedEcoRoll; - - return new XElement(tns + XMLNames.Component_DriverModel, - new XElement(tns + XMLNames.DriverModel_LookAheadCoasting, - new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_Enabled, lookahead.Enabled), - new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_MinSpeed, lookahead.MinSpeed.AsKmph), - new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor, lookahead.LookaheadDistanceFactor), - new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset, - lookahead.CoastingDecisionFactorOffset), - new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling, - lookahead.CoastingDecisionFactorScaling), - lookahead.CoastingDecisionFactorTargetSpeedLookup == null - ? null - : new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, - _singleFile - ? EmbedDataTable(lookahead.CoastingDecisionFactorTargetSpeedLookup, - AttributeMappings.CoastingDFTargetSpeedLookupMapping) - : ExtCSVResource(lookahead.CoastingDecisionFactorTargetSpeedLookup, "Driver_LAC_TargetspeedLookup.csv")), - lookahead.CoastingDecisionFactorVelocityDropLookup == null - ? null - : new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, - _singleFile - ? EmbedDataTable(lookahead.CoastingDecisionFactorVelocityDropLookup, - AttributeMappings.CoastingDFVelocityDropLookupMapping) - : ExtCSVResource(lookahead.CoastingDecisionFactorVelocityDropLookup, "Driver_LAC_VelocityDropLookup.csv")) - ), - new XElement(tns + XMLNames.DriverModel_Overspeed, - new XElement(tns + XMLNames.DriverModel_Overspeed_Mode, driver.OverSpeedEcoRoll.Mode), - new XElement(tns + XMLNames.DriverModel_Overspeed_MinSpeed, overspeed.MinSpeed.AsKmph), - new XElement(tns + XMLNames.DriverModel_Overspeed_AllowedOverspeed, overspeed.OverSpeed.AsKmph), - new XElement(tns + XMLNames.DriverModel_Overspeed_AllowedUnderspeed, overspeed.UnderSpeed.AsKmph) - ), - driver.AccelerationCurve == null - ? null - : new XElement(tns + XMLNames.DriverModel_DriverAccelerationCurve, - _singleFile - ? EmbedDataTable(driver.AccelerationCurve, AttributeMappings.DriverAccelerationCurveMapping) - : ExtCSVResource(driver.AccelerationCurve, - Path.GetFileName(driver.AccelerationCurve.Source ?? "Driver.vacc")) - ), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters, - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration, - gbx.UpshiftMinAcceleration.Value()), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay, - gbx.DownshiftAfterUpshiftDelay.Value()), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay, - gbx.UpshiftAfterDownshiftDelay.Value()), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve, gbx.TorqueReserve), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift, - gbx.MinTimeBetweenGearshift.Value()), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed, gbx.StartSpeed.Value()), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration, gbx.StartAcceleration.Value()), - new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve, gbx.StartTorqueReserve)) - ); - } - - protected XElement CreateVehicle(IEngineeringInputDataProvider data) - { - var retarder = data.JobInputData.Vehicle.Components.RetarderInputData; - var gearbox = data.JobInputData.Vehicle.Components.GearboxInputData; - var vehicle = data.JobInputData.Vehicle; - var angledrive = data.JobInputData.Vehicle.Components.AngledriveInputData; - var pto = data.JobInputData.Vehicle.Components.PTOTransmissionInputData; - - return new XElement(tns + XMLNames.Component_Vehicle, - new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model), - GetDefaultComponentElements(vehicle.Model), - new XElement(tns + XMLNames.Vehicle_VehicleCategory, vehicle.VehicleCategory.ToXMLFormat()), - new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.Value().ToXMLFormat(0)), - new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value().ToXMLFormat(0)), - //new XElement(tns + XMLNames.Vehicle_AirDragArea, airdrag.AirDragArea.Value()), - new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()), - retarder.Type.IsDedicatedComponent() - ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3)) - : null, - new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type.ToXMLFormat()), - new XElement(tns + XMLNames.Vehicle_PTOType, pto.PTOTransmissionType), - GetPTOData(pto), - CreateTorqueLimits(vehicle), - new XElement(tns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()), - new XElement(tns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()), - new XElement(tns + XMLNames.Vehicle_Components, - CreateEngine(vehicle.Components.EngineInputData), - CreateGearbox(gearbox, gearbox.TorqueConverter), - angledrive.Type == AngledriveType.SeparateAngledrive ? CreateAngleDrive(angledrive) : null, - retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null, - CreateAxlegear(vehicle.Components.AxleGearInputData), - CreateAxleWheels(vehicle), - CreateAuxiliaries(vehicle.Components.AuxiliaryInputData, RemoveInvalidFileCharacters(vehicle.Model)), - CreateAirdrag(vehicle.Components.AirdragInputData) - ), - new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist, - new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop, - new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled, false)) - )); - } - - - private object[] GetPTOData(IPTOTransmissionInputData pto) - { - if (pto.PTOTransmissionType == "None") { - return null; - } - var ptoLossMap = new XElement(tns + XMLNames.Vehicle_PTOIdleLossMap); - ptoLossMap.Add(_singleFile - ? EmbedDataTable(pto.PTOLossMap, AttributeMappings.PTOLossMap) - : ExtCSVResource(pto.PTOLossMap, "PTO_LossMap.vptol")); - var ptoCycle = new XElement(tns + XMLNames.Vehicle_PTOCycle); - ptoCycle.Add(_singleFile - ? EmbedDataTable(pto.PTOCycle, AttributeMappings.PTOCycleMap) - : ExtCSVResource(pto.PTOCycle, "PTO_cycle.vptoc")); - - return new object[] { ptoLossMap, ptoCycle }; - } - - private XElement GetCrossWindCorrectionData(IAirdragEngineeringInputData airdrag) - { - if (airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.NoCorrection || - airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.DeclarationModeCorrection) { - return null; - } - - var correctionMap = new XElement(tns + XMLNames.Vehicle_CrosswindCorrectionData); - - if (_singleFile) { - correctionMap.Add(EmbedDataTable(airdrag.CrosswindCorrectionMap, AttributeMappings.CrossWindCorrectionMapping)); - } else { - var ext = airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.SpeedDependentCorrectionFactor - ? "vcdv" - : "vcdb"; - correctionMap.Add(ExtCSVResource(airdrag.CrosswindCorrectionMap, "CrossWindCorrection." + ext)); - } - - return correctionMap; - } - - private XElement CreateAngleDrive(IAngledriveInputData data) - { - var angledrive = new XElement(tns + XMLNames.Component_Angledrive, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, "ANGL-" + data.Model), - GetDefaultComponentElements(data.Model), - new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio.ToXMLFormat(3)), - data.LossMap == null - ? new XElement(tns + XMLNames.AngleDrive_TorqueLossMap, - new XElement(tns + XMLNames.AngleDrive_Efficiency, data.Efficiency)) - : new XElement(tns + XMLNames.AngleDrive_TorqueLossMap, GetTransmissionLossMap(data.LossMap)))); - //if (_singleFile) { - return angledrive; - //} - //return ExtComponent(XMLNames.Component_Angledrive, angledrive, - // string.Format("ANGL_{0}.xml", RemoveInvalidFileCharacters(data.ModelName))); - } - - private string RemoveInvalidFileCharacters(string filename) - { - string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); - Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch))); - return r.Replace(filename, ""); - } - - public XElement CreateAuxiliaries(IAuxiliariesEngineeringInputData data, string fileSuffix) - { - var auxList = new List<XElement>(); - foreach (var auxData in data.Auxiliaries) { - var entry = new XElement(tns + XMLNames.Auxiliaries_Auxiliary, - new XAttribute(XMLNames.Auxiliaries_Auxiliary_ID_Attr, auxData.ID)); - if (auxData.ConstantPowerDemand > 0) { - entry.Add(new XElement(tns + XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad, auxData.ConstantPowerDemand.Value())); - auxList.Add(entry); - continue; - } - if (_singleFile) { - entry.Add(new XElement(tns + XMLNames.Auxiliaries_Auxiliary_TransmissionRatioToEngine, auxData.TransmissionRatio), - new XElement(tns + XMLNames.Auxiliaries_Auxiliary_EfficiencyToEngine, auxData.EfficiencyToEngine), - new XElement(tns + XMLNames.Auxiliaries_Auxiliary_EfficiencyAuxSupply, auxData.EfficiencyToSupply), - new XElement(tns + XMLNames.Auxiliaries_Auxiliary_AuxMap, - EmbedDataTable(auxData.DemandMap, AttributeMappings.AuxMapMapping))); - } else { - entry.Add(ExtCSVResource(auxData.DemandMap, Path.GetFileName(auxData.DemandMap.Source))); - } - } - - var aux = new XElement(tns + XMLNames.Component_Auxiliaries, - new XElement(tns + XMLNames.ComponentDataWrapper, - //new XAttribute(XMLNames.Component_ID_Attr, "AUX-none"), - auxList)); - if (_singleFile) { - return aux; - } - return ExtComponent(XMLNames.Component_Auxiliaries, aux, string.Format("AUX_{0}.xml", fileSuffix)); - } - - public XElement CreateAxleWheels(IVehicleEngineeringInputData data) - { - var axleData = data.Components.AxleWheels.AxlesEngineering; - var numAxles = axleData.Count; - var axles = new List<XElement>(numAxles); - for (var i = 0; i < numAxles; i++) { - var axle = axleData[i]; - axles.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle, - new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, i + 1), - GetDefaultComponentElements(axle.Tyre.Dimension), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_AxleType, - i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, i == 0), - string.IsNullOrWhiteSpace(axle.Tyre.Dimension) - ? null - : new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Tyre.Dimension), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.Tyre.RollResistanceCoefficient), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.Tyre.TyreTestLoad.Value()), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_WeightShare, axle.AxleWeightShare), - new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Inertia, axle.Tyre.Inertia.Value()), - i == 1 - ? new XElement(tns + XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius, data.DynamicTyreRadius.Value() * 1000) - : null)); - } - - var axleWheels = new XElement(tns + XMLNames.Component_AxleWheels, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, string.Format("AXLWHL-{0}", data.AxleConfiguration.GetName())), - new XElement(tns + XMLNames.AxleWheels_Axles, axles))); - if (_singleFile) { - return axleWheels; - } - return ExtComponent(XMLNames.Component_AxleWheels, axleWheels, - String.Format("AXLWHL-{0}.xml", data.AxleConfiguration.GetName())); - } - - //private XElement CreateTyre(IAxleDeclarationInputData axle) - //{ - // var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_"); - // return new XElement(tns + "Tyre", - // new XAttribute(XMLNames.Component_CertificationNumber, id), - // new XElement(tns + XMLNames.ComponentDataWrapper, - // GetDefaultComponentElements(string.Format("TYRE-{0}", axle.Wheels), axle.Wheels), - // string.IsNullOrWhiteSpace(axle.Wheels) - // ? null - // : new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels), - // new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.RollResistanceCoefficient.ToXMLFormat(4)), - // new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value().ToXMLFormat(0)) - // ) - // ); - //} - - public XElement CreateAxlegear(IAxleGearInputData data) - { - var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio); - var axl = new XElement(tns + XMLNames.Component_Axlegear, - new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, typeId), - GetDefaultComponentElements("N.A."), - new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)), - data.LossMap == null - ? new XElement(tns + XMLNames.Axlegear_TorqueLossMap, - new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency)) - : new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap)))); - if (_singleFile) { - return axl; - } - return ExtComponent(XMLNames.Component_Axlegear, axl, string.Format("AXL_{0:0.00}.xml", data.Ratio)); - } - - - public XElement CreateRetarder(IRetarderInputData data) - { - var retarder = new XElement(tns + XMLNames.Component_Retarder, - new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, "RET-none"), - GetDefaultComponentElements(data.Model), - new XElement(tns + XMLNames.Retarder_RetarderLossMap, - _singleFile - ? EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping) - : ExtCSVResource(data.LossMap, string.Format("RET_{0}.vrlm", RemoveInvalidFileCharacters(data.Model)))))); - //if (_singleFile) { - return retarder; - //} - //return ExtComponent(XMLNames.Component_Retarder, retarder, - // string.Format("RET_{0}.xml", RemoveInvalidFileCharacters(data.ModelName))); - } - - protected XElement CreateGearbox(IGearboxEngineeringInputData data, ITorqueConverterEngineeringInputData tcData) - { - var gears = new XElement(tns + XMLNames.Gearbox_Gears); - var i = 1; - foreach (var gearData in data.Gears) { - var gear = new XElement(tns + XMLNames.Gearbox_Gears_Gear, - new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i++), - new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)), - gearData.MaxTorque != null - ? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value()) - : null, - gearData.MaxInputSpeed != null - ? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, gearData.MaxInputSpeed.AsRPM) - : null); - - if (gearData.LossMap != null) { - gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, GetTransmissionLossMap(gearData.LossMap))); - } else { - gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, - new XElement(tns + XMLNames.Gearbox_Gear_Efficiency, gearData.Efficiency))); - } - if (gearData.ShiftPolygon != null) { - gear.Add(new XElement(tns + XMLNames.Gearbox_Gears_Gear_ShiftPolygon, CreateShiftPolygon(gearData.ShiftPolygon))); - } - - gears.Add(gear); - } - var gbx = new XElement(tns + XMLNames.Component_Gearbox, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", data.Model)), - GetDefaultComponentElements(data.Model), - new XElement(tns + XMLNames.Gearbox_TransmissionType, data.Type.ToXMLFormat()), - new XElement(tns + XMLNames.Gearbox_Inertia, data.Inertia.Value()), - new XElement(tns + XMLNames.Gearbox_TractionInterruption, data.TractionInterruption.Value()), gears), - data.Type.AutomaticTransmission() ? CreateTorqueConverter(tcData) : null); - - if (_singleFile) { - return gbx; - } - return ExtComponent(XMLNames.Component_Gearbox, gbx, string.Format("GBX-{0}.xml", data.Model)); - } - - private XElement CreateTorqueConverter(ITorqueConverterEngineeringInputData torqueConverterData) - { - var tc = new XElement(tns + XMLNames.Component_TorqueConverter, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, string.Format("TC-{0}", torqueConverterData.Model)), - GetDefaultComponentElements(torqueConverterData.Model), - new XElement(tns + XMLNames.TorqueConverter_ReferenceRPM, torqueConverterData.ReferenceRPM.AsRPM.ToXMLFormat()), - new XElement(tns + XMLNames.TorqueConverter_Characteristics, - _singleFile - ? EmbedDataTable(torqueConverterData.TCData, AttributeMappings.TorqueConverterDataMapping, - precision: new Dictionary<string, uint>() { - { TorqueConverterDataReader.Fields.SpeedRatio, 4 } - }) - : ExtCSVResource(torqueConverterData.TCData, Path.GetFileName(torqueConverterData.TCData.Source))), - new XElement(tns + XMLNames.TorqueConverter_Inertia, torqueConverterData.Inertia.Value()))); - if (_singleFile) { - return tc; - } - return new XElement(tns + XMLNames.Component_TorqueConverter, - ExtComponent(XMLNames.Component_TorqueConverter, tc, "TorqueConverter.xml")); - } - - private object[] GetTransmissionLossMap(TableData lossmap) - { - if (_singleFile) { - return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping); - } - return ExtCSVResource(lossmap, Path.GetFileName(lossmap.Source)); - } - - private object[] CreateShiftPolygon(TableData shiftPolygon) - { - if (_singleFile) { - return EmbedDataTable(shiftPolygon, AttributeMappings.ShiftPolygonMapping); - } - return ExtCSVResource(shiftPolygon, Path.GetFileName(shiftPolygon.Source)); - } - - public XElement CreateEngine(IEngineEngineeringInputData data, bool allowSeparateFile = true) - { - var engine = new XElement(tns + XMLNames.Component_Engine, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, string.Format("ENG-{0}", data.Model)), - GetDefaultComponentElements(data.Model), - new XElement(tns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)), - new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)), - new XElement(tns + XMLNames.Engine_Inertia, data.Inertia.Value()), - new XElement(tns + XMLNames.Engine_WHTCEngineering, data.WHTCEngineering.ToXMLFormat(4)), - new XElement(tns + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(data)), - new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(data)))); - if (!allowSeparateFile || _singleFile) { - return engine; - } - return ExtComponent(XMLNames.Component_Engine, engine, string.Format("ENG-{0}.xml", data.Model)); - } - - private XElement CreateAirdrag(IAirdragEngineeringInputData data) - { - var id = string.Format("Airdrag-{0}", data.Model); - return new XElement(tns + XMLNames.Component_AirDrag, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XMLNames.Component_ID_Attr, id), - GetDefaultComponentElements("N.A."), - new XElement(tns + XMLNames.Vehicle_CrossWindCorrectionMode, data.CrossWindCorrectionMode.ToXMLFormat()), - new XElement(tns + XMLNames.Vehicle_AirDragArea, data.AirDragArea.Value().ToXMLFormat(2))), - GetCrossWindCorrectionData(data) - ); - } - - private XElement ExtComponent(string component, XElement componentXML, string filename) - { - GenerateComponentDocument(componentXML).Save(Path.Combine(BasePath, filename)); - - var retVal = new XElement(tns + XMLNames.ExternalResource, - new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_XML), - new XAttribute(XMLNames.ExtResource_Component_Attr, component), - new XAttribute(XMLNames.ExtResource_File_Attr, filename)); - return retVal; - } - - private object[] GetFullLoadDragCurve(IEngineEngineeringInputData data) - { - if (_singleFile) { - return EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping); - } - var filename = string.Format("ENG_{0}.vfld", data.Model); - return ExtCSVResource(data.FullLoadCurve, filename); - } - - private object[] GetFuelConsumptionMap(IEngineEngineeringInputData data) - { - if (_singleFile) { - return EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping); - } - - var filename = string.Format("ENG_{0}.vmap", data.Model); - return ExtCSVResource(data.FuelConsumptionMap, filename); - } - - - private object[] ExtCSVResource(DataTable data, string filename) - { - VectoCSVFile.Write(Path.Combine(BasePath, filename), data); - return new object[] { - new XElement(tns + XMLNames.ExternalResource, - new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - new XAttribute(XMLNames.ExtResource_File_Attr, filename)) - }; - } - - protected XElement[] GetDefaultComponentElements(string makeAndModel) - { - return new[] { - new XElement(tns + XMLNames.Component_Manufacturer, Vendor), - new XElement(tns + XMLNames.Component_Model, makeAndModel), - new XElement(tns + XMLNames.Component_Creator, Creator), - new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)), - new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"), - }; - } - } -} diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd index cfa978ec14..1eee48c0fe 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd @@ -6,6 +6,7 @@ This is a convienience file that imports the schema for declaration input (i.e., job data) and all supported declaration definitions --> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" schemaLocation="VectoInput.1.0.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" schemaLocation="VectoInput.2.0.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> </xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd deleted file mode 100644 index b068d76c2c..0000000000 --- a/VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> -<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:ParameterDefinitions" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:vengdef="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.6" xmlns:ns1="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.7" xmlns:ns2="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"> - <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.7" schemaLocation="VectoEngineeringDefinitions.0.7.xsd"/> - <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> - <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0" schemaLocation="VectoComponent.xsd"/> - <!-- <xs:include schemaLocation="VectoInput.xsd"/> - <xs:include schemaLocation="VectoEngineeringInput.xsd"/>--> -</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd new file mode 100644 index 0000000000..57072e026f --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:vc1.0="urn:tugraz:ivt:VectoAPI:EngineeringComponent:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringComponent:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/> + <xs:element name="VectoComponentEngineering" type="v1.0:AbstractVectoComponentEngineeringType"> + <xs:annotation> + <xs:documentation>Root Node Engineering Component Data</xs:documentation> + </xs:annotation> + </xs:element> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd new file mode 100644 index 0000000000..f58eb98331 --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> + <!-- + + This is a convienience file that imports the schema for declaration input (i.e., job data) and all supported declaration definitions + + --> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringComponent:v1.0" schemaLocation="VectoEngineeringComponent.1.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions" schemaLocation="VectoEngineeringDefinitions.xsd"/> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd new file mode 100644 index 0000000000..8b563a945b --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:ve1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/> + <xs:complexType name="EngineDataEngineeringType"> + <xs:complexContent> + <xs:extension base="ve1.0:EngineDataEngineeringType"> + <xs:sequence> + <xs:element name="RatedPower"/> + <xs:element name="RatedSpeed"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="AxleDataEngineeringType"> + <xs:complexContent> + <xs:extension base="ve1.0:AbstractAxleDataEngineeringType"> + <xs:sequence> + <xs:element name="WeightShare"> + <xs:simpleType> + <xs:restriction base="xs:double"> + <xs:minInclusive value="0"/> + <xs:maxInclusive value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="TwinTires" type="vdecdef:AxleTwinTyresType"/> + <xs:element name="Tire" type="ve1.0:TyreComponentEngineeringType"/> + </xs:sequence> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="TyreDataEngineeringType"> + <xs:complexContent> + <xs:extension base="ve1.0:TyreDataEngineeringType"> + <xs:sequence> + <xs:element name="ProfileDepth"> + <xs:simpleType> + <xs:restriction base="xs:double"> + <xs:minInclusive value="0"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd new file mode 100644 index 0000000000..e05d7abd16 --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:v1.0TEST="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions"> + <!-- + + This is a convienience file that imports all supported declaration definitions + + --> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" schemaLocation="VectoEngineeringDefinitions.1.0.TEST.xsd"/> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd index 519e95ea1b..e6bc4ace62 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd @@ -2,11 +2,6 @@ <!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> <xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:vengdef="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> <xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/> - <xs:element name="VectoComponentEngineering" type="vengdef:AbstractVectoComponentEngineeringType"> - <xs:annotation> - <xs:documentation>Root Node Engineering Component Data</xs:documentation> - </xs:annotation> - </xs:element> <xs:element name="VectoInputEngineering" type="vengdef:VectoJobEngineeringType"> <xs:annotation> <xs:documentation>Root Node Engineering Job</xs:documentation> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoInput.xsd b/VectoCore/VectoCore/Resources/XSD/VectoInput.xsd deleted file mode 100644 index bafee4d8c7..0000000000 --- a/VectoCore/VectoCore/Resources/XSD/VectoInput.xsd +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> -<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> - <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> - <xs:element name="VectoInputDeclaration" type="vdecdef:VectoDeclarationJobType"> - <xs:annotation> - <xs:documentation>Root Node Declaration Data</xs:documentation> - </xs:annotation> - </xs:element> -</xs:schema> diff --git a/VectoCore/VectoCore/Utils/XMLDefinitions.cs b/VectoCore/VectoCore/Utils/XMLDefinitions.cs index 3df538d0cb..d529e82c06 100644 --- a/VectoCore/VectoCore/Utils/XMLDefinitions.cs +++ b/VectoCore/VectoCore/Utils/XMLDefinitions.cs @@ -55,14 +55,14 @@ namespace TUGraz.VectoCore.Utils // mapping of document type + version => supported schema files (+version) //private static Dictionary<Tuple<XmlDocumentType, string>, IList<string>> schemaFilenames = new Dictionary<Tuple<XmlDocumentType, string>, IList<string>>(); - private static Dictionary<XmlDocumentType, Tuple<string, string[]>> schemaFilenames = new Dictionary<XmlDocumentType, Tuple<string, string[]>>() { - {XmlDocumentType.DeclarationJobData, Tuple.Create("VectoInput{0}.xsd", new [] {"1.0"}) }, - {XmlDocumentType.DeclarationComponentData, Tuple.Create("VectoComponent{0}.xsd", new [] {"1.0"}) }, - {XmlDocumentType.EngineeringJobData, Tuple.Create("VectoEngineeringInput{0}.xsd", new [] {"0.7"}) }, - {XmlDocumentType.EngineeringComponentData, Tuple.Create("VectoEngineeringInput{0}.xsd", new [] {"0.7"}) }, - {XmlDocumentType.ManufacturerReport, Tuple.Create("VectoOutputManufacturer{0}.xsd", new [] {"0.4", "0.5", "0.6", "0.7"}) }, - {XmlDocumentType.CustomerReport , Tuple.Create("VectoOutputCustomer{0}.xsd", new [] {"0.4", "0.5", "0.7"})}, - {XmlDocumentType.MonitoringReport , Tuple.Create("VectoMonitoring{0}.xsd", new [] {"0.7"})}, + private static Dictionary<XmlDocumentType, string> schemaFilenames = new Dictionary<XmlDocumentType, string>() { + {XmlDocumentType.DeclarationJobData, "VectoDeclarationJob.xsd"}, + {XmlDocumentType.DeclarationComponentData, "VectoComponent.xsd"}, + {XmlDocumentType.EngineeringJobData, "VectoEngineeringInput.xsd" }, + {XmlDocumentType.EngineeringComponentData, "VectoEngineeringComponent.xsd" }, + {XmlDocumentType.ManufacturerReport, "VectoOutputManufacturer{0}.xsd" }, + {XmlDocumentType.CustomerReport , "VectoOutputCustomer{0}.xsd"}, + {XmlDocumentType.MonitoringReport , "VectoMonitoring{0}.xsd"}, }; @@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.Utils throw new Exception(string.Format("Invalid argument {0} - only use single flags", type)); } var entry = schemaFilenames[type]; - return !entry.Item2.Contains(version) ? null : string.Format(entry.Item1, string.IsNullOrWhiteSpace(version) ? "" : "." + version); + return string.Format(entry, string.IsNullOrWhiteSpace(version) ? "" : "." + version); } } diff --git a/VectoCore/VectoCore/Utils/XMLHelper.cs b/VectoCore/VectoCore/Utils/XMLHelper.cs index a7c32df04f..150f6f49fb 100644 --- a/VectoCore/VectoCore/Utils/XMLHelper.cs +++ b/VectoCore/VectoCore/Utils/XMLHelper.cs @@ -31,6 +31,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Xml; using System.Xml.Linq; @@ -206,6 +207,52 @@ namespace TUGraz.VectoCore.Utils return table; } + public static TableData ReadEntriesOrResource(XmlNode baseNode, string basePath, string baseElement, string entryElement, Dictionary<string, string> mapping) + { + var entries = baseNode.SelectNodes( + QueryLocalName(baseElement, entryElement)); + if (entries != null && entries.Count > 0) { + return ReadTableData(mapping, entries); + } + + return ReadCSVResource(baseNode, baseElement, basePath); + } + + public static TableData ReadCSVResource(XmlNode baseNode, string xmlElement, string basePath) + { + var resourceNode = baseNode.SelectSingleNode( + XMLHelper.QueryLocalName(xmlElement) + ExtCSVResourceQuery); + var filename = string.Empty; + if (resourceNode != null) { + filename = resourceNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText; + if (filename == null) { + throw new VectoException("{0} No filename provided!", xmlElement); + } + + if (basePath == null) { + throw new VectoException("cannot read referenced file - job passed as stream!"); + } + + var fullFilename = Path.Combine(basePath, filename); + if (!File.Exists(fullFilename)) { + throw new VectoException("{1} file not found: {0}", filename, xmlElement); + } + + return VectoCSVFile.Read(fullFilename); + } + + return null;// new TableData(Path.Combine(basePath ?? "", filename), DataSourceType.Missing); + } + + private static string ExtCSVResourceQuery + { + get { + return string.Format( + "/*[local-name()='{0}' and @{1}='{2}']", XMLNames.ExternalResource, XMLNames.ExtResource_Type_Attr, + XMLNames.ExtResource_Type_Value_CSV); + } + } + private static IEnumerable<T> Shim<T>(XmlNodeList nodes) { foreach (var node in nodes) { diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs index 0e20748ac5..d8360e207a 100644 --- a/VectoCore/VectoCore/Utils/XMLValidator.cs +++ b/VectoCore/VectoCore/Utils/XMLValidator.cs @@ -78,6 +78,7 @@ namespace TUGraz.VectoCore.Utils } var version = XMLHelper.GetSchemaVersion(_doc.DocumentElement); + _doc.Schemas = GetXMLSchema(docType, version); _doc.Validate(ValidationCallBack); return _valid; diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 9648a93484..bb67b6da9d 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -183,31 +183,114 @@ <Compile Include="InputData\FileIO\XML\Declaration\Reader\Impl\XMLJobDataReader.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Reader\IXMLJobDataReader.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\Reader\IXMLPTOReader.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\Factory\IEngineeringInjectFactory.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractCommonComponentType.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractEngineeringXMLComponentDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractVehicleEngineeringType.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractXMLType.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLCyclesDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLDriverAcceleration.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAirdragDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAngledriveDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAuxiliariesDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAxlegearDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAxlesDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringDriverDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringDriverLookAhead.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringEngineDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringGearboxDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringGearshiftData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringInputDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringJobInputDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringOverspeed.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringRetarderDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringTorqueConverterDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringVehicleComponentsDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringVehicleDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLTyreEngineeringDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Factory\IEngineeringReaderInjectFactory.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAirdragData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAngledriveData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAuxiliairesData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAuxiliaryData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAxleEngineeringData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAxlegearData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAxlesData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLCyclesDataProvider.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLDriverAcceleration.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringDriverData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringGearshiftData.cs" /> <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringJobInputData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringVehicleComponentsData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringVehicleData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLGearboxData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLGearData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLLookaheadData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLOverspeedData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLRetarderData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLTorqueconverterData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLTyreData.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\IXMLComponentsReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\IXMLDriverDataReader.cs" /> <Compile Include="InputData\FileIO\XML\Engineering\IXMLEngineeringInputReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\IXMLJobDataReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\NinjectModules\XMLEngineeringReaderTestOverrides.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\NinjectModules\XMLEngineeringReaderV07InjectModule.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\NinjectModules\XMLEngineeringReaderV10InjectModule.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Reader\AbstractExternalResourceReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLComponentsEngineeringReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLDriverDataReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLEngineeringInputReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLJobDataReader.cs" /> + <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringReaderInjectModule.cs" /> <Compile Include="InputData\FileIO\XML\IXMLResource.cs" /> <Compile Include="InputData\FileIO\XML\XMLInputDataFactory.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\IXMLDeclarationInputDataReader.cs" /> <Compile Include="InputData\FileIO\XML\IXMLInputDataReader.cs" /> + <Compile Include="InputData\FileIO\XML\XMLInputDataNinjectModule.cs" /> + <Compile Include="Models\Simulation\ISimulatorFactory.cs" /> + <Compile Include="Models\Simulation\ISimulatorFactoryFactory.cs" /> + <Compile Include="Models\Simulation\SimulationFactoryNinjectModule.cs" /> + <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" /> + <Compile Include="OutputData\XML\Engineering\Factory\IEngineeringWriterInjectFactory.cs" /> + <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringComponentWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringEngineWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringJobWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\NinjectModules\XMLEngineeringWriterTestOverrides.cs" /> + <Compile Include="OutputData\XML\Engineering\NinjectModules\XMLEngineeringWriterV10InjectModule.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\AbstractComponentWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLAccelerationDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLEngineeringLookaheadDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLEngineeringOverspeedDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLShiftParmeterDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringADASWriterV10.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAirdragWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAngledriveWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAuxiliariesWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAuxiliaryWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAxlegearWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAxlesWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAxleWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringComponentsWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringDriverDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringEngineWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringGearboxWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringGearDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringJobWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringRetarderWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringTorqueconverterWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringTyreWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringVehicleDataWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriter.cs" /> + <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriterInjectModule.cs" /> + <Compile Include="OutputData\XML\Engineering\XMLWriterMapping.cs" /> <Compile Include="Utils\Ninject\UseFirstArgumentAsInstanceProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationReaderInjectModule.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationVehicleDataProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationInputDataProvider.cs" /> <Compile Include="InputData\FileIO\XMLReports\XMLManufacturerReportReader.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\AbstractEngineeringXMLComponentDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAirdragDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAngledriveDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAuxiliaryDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAxlegearDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringDriverDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringEngineDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringGearboxDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringInputDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringJobInputDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringRetarderDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringTorqueConverterDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringVehicleDataProvider.cs" /> <Compile Include="InputData\FileIO\JSON\JSONEngineData.cs" /> <Compile Include="InputData\FileIO\JSON\JSONGearboxData.cs" /> <Compile Include="InputData\FileIO\JSON\JSONInputData.cs" /> @@ -282,7 +365,6 @@ <Compile Include="OutputData\XML\XMLCustomerReport.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReport.cs" /> <Compile Include="OutputData\XML\XMLDeclarationWriter.cs" /> - <Compile Include="OutputData\XML\XMLEngineeringWriter.cs" /> <Compile Include="OutputData\XML\XMLManufacturerReport.cs" /> <Compile Include="Utils\DataIntegrityHelper.cs" /> <Compile Include="Utils\MeanShiftClustering.cs" /> @@ -497,10 +579,6 @@ <SubType>Designer</SubType> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoInput.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.xsd"> <SubType>Designer</SubType> </EmbeddedResource> @@ -584,6 +662,18 @@ <EmbeddedResource Include="Resources\XSD\VectoInput.2.0.xsd"> <SubType>Designer</SubType> </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VectoEngineeringDefinitions.1.0.TEST.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VectoEngineeringComponent.1.0.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VectoEngineeringComponent.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VTPReport.0.1.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> <None Include="Utils\VectoVersionCore.tt"> <Generator>TextTemplatingFileGenerator</Generator> <LastGenOutput>VectoVersionCore.cs</LastGenOutput> diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs index b6f91ba080..4e2a9c7767 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs @@ -172,7 +172,8 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio); } var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, - MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1, + MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), + (IGearshiftEngineeringInputData)inputProvider, 2.1, 0.5.SI<Meter>(), VehicleCategory.RigidTruck); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); @@ -196,7 +197,8 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio); } var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, - MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1, + MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), + (IGearshiftEngineeringInputData)inputProvider, 2.1, 0.5.SI<Meter>(), VehicleCategory.RigidTruck); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); @@ -222,7 +224,8 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio); } var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, - MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1, + MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), + (IGearshiftEngineeringInputData)inputProvider, 2.1, 0.5.SI<Meter>(), VehicleCategory.RigidTruck); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); @@ -247,7 +250,8 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio); } var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, - MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1, + MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), + (IGearshiftEngineeringInputData)inputProvider, 2.1, 0.5.SI<Meter>(), VehicleCategory.RigidTruck); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); @@ -274,7 +278,8 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio); } var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, - MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1, + MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), + (IGearshiftEngineeringInputData)inputProvider, 2.1, 0.5.SI<Meter>(), VehicleCategory.InterurbanBus); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); @@ -301,7 +306,8 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio); } var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, - MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1, + MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), + (IGearshiftEngineeringInputData)inputProvider, 2.1, 0.5.SI<Meter>(), VehicleCategory.InterurbanBus); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); diff --git a/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs index f2e7bd9ba6..287a5b112c 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs @@ -107,20 +107,20 @@ namespace TUGraz.VectoCore.Tests.FileIO var inputProvider = input as IEngineeringInputDataProvider; Assert.NotNull(inputProvider); - var vehicleInputData = inputProvider.JobInputData.Vehicle; + var components = inputProvider.JobInputData.Vehicle.Components; var writer = JSONFileWriter.Instance; VECTO_Global.Cfg = new VECTO.Configuration() { DeclMode = true }; - writer.SaveGearbox(vehicleInputData.Components.GearboxInputData, vehicleInputData.Components.AxleGearInputData, outFile); + writer.SaveGearbox(components.GearboxInputData, components.AxleGearInputData, (IGearshiftEngineeringInputData)components.GearboxInputData, outFile); var savedData = JSONInputDataFactory.ReadComponentData(outFile); var savedInprovider = savedData as IEngineeringInputDataProvider; Assert.NotNull(savedInprovider); - AssertHelper.PublicPropertiesEqual(typeof(IGearboxDeclarationInputData), vehicleInputData.Components.GearboxInputData, savedInprovider.JobInputData.Vehicle.Components.GearboxInputData, + AssertHelper.PublicPropertiesEqual(typeof(IGearboxDeclarationInputData), components.GearboxInputData, savedInprovider.JobInputData.Vehicle.Components.GearboxInputData, new[] { "Source" }); - AssertHelper.PublicPropertiesEqual(typeof(IAxleDeclarationInputData), vehicleInputData.Components.AxleGearInputData, savedInprovider.JobInputData.Vehicle.Components.AxleGearInputData, + AssertHelper.PublicPropertiesEqual(typeof(IAxleDeclarationInputData), components.AxleGearInputData, savedInprovider.JobInputData.Vehicle.Components.AxleGearInputData, new[] { "Source" }); } diff --git a/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml new file mode 100644 index 0000000000..cbaaedb721 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputEngineering xmlns="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:ve1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0 file:///E:/QUAM/Workspace/VECTO_quam/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd"> + <EngineOnlyMode>false</EngineOnlyMode> + <Vehicle xsi:type="ve1.0:VehicleEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <ManufacturerAddress/> + <Model>Generic Truck</Model> + <VIN>N.A.</VIN> + <Date>2018-06-14T14:00:00Z</Date> + <AxleConfiguration>4x2</AxleConfiguration> + <CurbMassChassis>6500</CurbMassChassis> + <GrossVehicleMass>14000</GrossVehicleMass> + <RetarderType>None</RetarderType> + <AngledriveType>None</AngledriveType> + <PTOType>None</PTOType> + <CurbMassExtra>0</CurbMassExtra> + <Loading>0</Loading> + <AdvancedDriverAssist xsi:type="ve1.0:AdvancedDriverAssistEngineeringType"> + <EngineStartStop xsi:type="ve1.0:EngineStartStopEngineeringType"> + <Enabled>false</Enabled> + </EngineStartStop> + </AdvancedDriverAssist> + <Components xsi:type="ve1.0:VehicleComponentsType"> + <Engine> + <Data xsi:type="ve1.0:EngineDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Eninge</Model> + <Date>2018-06-14T14:00:00Z</Date> + <Displacement>12750</Displacement> + <IdlingSpeed>600</IdlingSpeed> + <FCCorrection>1.0000</FCCorrection> + <FuelType>Diesel CI</FuelType> + <FuelConsumptionMap> + <Entry engineSpeed="550.00" torque="-200.00" fuelConsumption="0.00"/> + <Entry engineSpeed="550.00" torque="1500.00" fuelConsumption="200.00"/> + <Entry engineSpeed="2500.00" torque="-200.00" fuelConsumption="0.00"/> + <Entry engineSpeed="2500.00" torque="1500.00" fuelConsumption="200.00"/> + </FuelConsumptionMap> + <FullLoadAndDragCurve> + <Entry engineSpeed="550.00" maxTorque="1450.00" dragTorque="-150.00"/> + <Entry engineSpeed="2500.00" maxTorque="1450.00" dragTorque="-150.00"/> + </FullLoadAndDragCurve> + </Data> + </Engine> + <Gearbox> + <Data xsi:type="ve1.0:GearboxDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Gearbox</Model> + <Date>2018-06-14T14:00:00Z</Date> + <TransmissionType>AMT</TransmissionType> + <Inertia>0.0</Inertia> + <TractionInterruption>1.0</TractionInterruption> + <Gears> + <Gear xsi:type="ve1.0:GearEngineeringType" number="1"> + <Ratio>1.000</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/> + </TorqueLossMap> + </Gear> + </Gears> + </Data> + </Gearbox> + <Axlegear> + <Data xsi:type="ve1.0:AxlegearDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Axlegear</Model> + <Date>2018-06-14T14:00:00Z</Date> + <Ratio>1.000</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/> + </TorqueLossMap> + </Data> + </Axlegear> + <AxleWheels> + <Data xsi:type="ve1.0:AxleComponentEngineeringType"> + <Axles> + <Axle xsi:type="ve1.0:AxleDataEngineeringType" axleNumber="1"> + <AxleType>VehicleNonDriven</AxleType> + <TwinTyres>false</TwinTyres> + <Steered>true</Steered> + <WeightShare>0.4</WeightShare> + <Tyre> + <Data xsi:type="ve1.0:TyreDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Tyre</Model> + <Date>2018-06-14T14:00:00Z</Date> + <Dimension>245/70 R17.5</Dimension> + <RRCISO>0.0055</RRCISO> + <FzISO>33500</FzISO> + </Data> + </Tyre> + </Axle> + <Axle xsi:type="ve1.0:AxleDataEngineeringType" axleNumber="2"> + <AxleType>VehicleDriven</AxleType> + <TwinTyres>true</TwinTyres> + <Steered>false</Steered> + <WeightShare>0.6</WeightShare> + <Tyre> + <Data xsi:type="ve1.0:TyreDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Tyre</Model> + <Date>2018-06-14T14:00:00Z</Date> + <DynamicTyreRadius>452</DynamicTyreRadius> + <Inertia>16.3</Inertia> + <RRCISO>0.0055</RRCISO> + <FzISO>33500</FzISO> + </Data> + </Tyre> + </Axle> + </Axles> + </Data> + </AxleWheels> + <Auxiliaries> + <Data xsi:type="ve1.0:AuxiliariesDataEngineeringType"/> + </Auxiliaries> + <AirDrag> + <Data xsi:type="ve1.0:AirDragDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Model</Model> + <Date>2018-06-14T14:00:00Z</Date> + <CrossWindCorrectionMode>Declaration Mode Correction</CrossWindCorrectionMode> + <CdxA>4.51</CdxA> + </Data> + </AirDrag> + </Components> + </Vehicle> + <DriverModel xsi:type="ve1.0:DriverModelEngineeringType"> + <LookAheadCoasting xsi:type="ve1.0:LookAheadCoastingEngineeringType"> + <Enabled>false</Enabled> + </LookAheadCoasting> + <Overspeed xsi:type="ve1.0:OverspeedEngineeringType"> + <Mode>Off</Mode> + </Overspeed> + </DriverModel> + <MissionCycles> + <Cycle type="csv" file="Construction"/> + </MissionCycles> +</tns:VectoInputEngineering> diff --git a/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml new file mode 100644 index 0000000000..5fff878916 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputEngineering schemaVersion="1.0" xmlns="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:ve1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:ve1.0TEST="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0 file:///E:/QUAM/Workspace/VECTO_quam/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST file:///E:/QUAM/Workspace/VECTO_quam/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd"> + <EngineOnlyMode>false</EngineOnlyMode> + <Vehicle xsi:type="ve1.0:VehicleEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <ManufacturerAddress/> + <Model>Generic Truck</Model> + <VIN>N.A.</VIN> + <Date>2018-06-14T14:00:00Z</Date> + <AxleConfiguration>4x2</AxleConfiguration> + <CurbMassChassis>6500</CurbMassChassis> + <GrossVehicleMass>14000</GrossVehicleMass> + <RetarderType>None</RetarderType> + <AngledriveType>None</AngledriveType> + <PTOType>None</PTOType> + <CurbMassExtra>0</CurbMassExtra> + <Loading>0</Loading> + <AdvancedDriverAssist xsi:type="ve1.0:AdvancedDriverAssistEngineeringType"> + <EngineStartStop xsi:type="ve1.0:EngineStartStopEngineeringType"> + <Enabled>false</Enabled> + </EngineStartStop> + </AdvancedDriverAssist> + <Components xsi:type="VehicleComponentsType"> + <Engine> + <Data xsi:type="ve1.0TEST:EngineDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Eninge</Model> + <Date>2018-06-14T14:00:00Z</Date> + <Displacement>12750</Displacement> + <IdlingSpeed>600</IdlingSpeed> + <FCCorrection>1.0000</FCCorrection> + <FuelType>Diesel CI</FuelType> + <FuelConsumptionMap> + <Entry engineSpeed="550.00" torque="-200.00" fuelConsumption="0.00"/> + <Entry engineSpeed="550.00" torque="1500.00" fuelConsumption="200.00"/> + <Entry engineSpeed="2500.00" torque="-200.00" fuelConsumption="0.00"/> + <Entry engineSpeed="2500.00" torque="1500.00" fuelConsumption="200.00"/> + </FuelConsumptionMap> + <FullLoadAndDragCurve> + <Entry engineSpeed="550.00" maxTorque="1450.00" dragTorque="-150.00"/> + <Entry engineSpeed="2500.00" maxTorque="1450.00" dragTorque="-150.00"/> + </FullLoadAndDragCurve> + <ve1.0TEST:RatedPower>220kW</ve1.0TEST:RatedPower> + <ve1.0TEST:RatedSpeed>2200rpm</ve1.0TEST:RatedSpeed> + </Data> + </Engine> + <Gearbox> + <Data xsi:type="ve1.0:GearboxDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Gearbox</Model> + <Date>2018-06-14T14:00:00Z</Date> + <TransmissionType>AMT</TransmissionType> + <Inertia>0.0</Inertia> + <TractionInterruption>1.0</TractionInterruption> + <Gears> + <Gear number="1" xsi:type="GearEngineeringType"> + <Ratio>1.000</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/> + </TorqueLossMap> + </Gear> + </Gears> + </Data> + </Gearbox> + <Axlegear> + <Data xsi:type="ve1.0:AxlegearDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Axlegear</Model> + <Date>2018-06-14T14:00:00Z</Date> + <Ratio>1.000</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/> + <Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/> + </TorqueLossMap> + </Data> + </Axlegear> + <AxleWheels> + <Data xsi:type="ve1.0:AxleComponentEngineeringType"> + <Axles> + <Axle xsi:type="ve1.0TEST:AxleDataEngineeringType" axleNumber="1"> + <ve1.0TEST:WeightShare>0.4</ve1.0TEST:WeightShare> + <ve1.0TEST:TwinTires>false</ve1.0TEST:TwinTires> + <ve1.0TEST:Tire> + <Data xsi:type="ve1.0:TyreDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Tyre</Model> + <Date>2018-06-14T14:00:00Z</Date> + <Dimension>245/70 R17.5</Dimension> + <RRCISO>0.0055</RRCISO> + <FzISO>33500</FzISO> + </Data> + </ve1.0TEST:Tire> + </Axle> + <Axle xsi:type="ve1.0:AxleDataEngineeringType" axleNumber="2"> + <AxleType>VehicleDriven</AxleType> + <TwinTyres>true</TwinTyres> + <Steered>false</Steered> + <WeightShare>0.6</WeightShare> + <Tyre> + <Data xsi:type="ve1.0TEST:TyreDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Tyre</Model> + <Date>2018-06-14T14:00:00Z</Date> + <DynamicTyreRadius>452</DynamicTyreRadius> + <Inertia>16.3</Inertia> + <RRCISO>0.0055</RRCISO> + <FzISO>33500</FzISO> + <ve1.0TEST:ProfileDepth>10</ve1.0TEST:ProfileDepth> + </Data> + </Tyre> + </Axle> + </Axles> + </Data> + </AxleWheels> + <Auxiliaries> + <Data xsi:type="ve1.0:AuxiliariesDataEngineeringType"/> + </Auxiliaries> + <AirDrag> + <Data xsi:type="ve1.0:AirDragDataEngineeringType"> + <Manufacturer>Generic Manufacturer</Manufacturer> + <Model>Generic Model</Model> + <Date>2018-06-14T14:00:00Z</Date> + <CrossWindCorrectionMode>Declaration Mode Correction</CrossWindCorrectionMode> + <CdxA>4.51</CdxA> + </Data> + </AirDrag> + </Components> + </Vehicle> + <DriverModel xsi:type="ve1.0:DriverModelEngineeringType"> + <LookAheadCoasting xsi:type="ve1.0:LookAheadCoastingEngineeringType"> + <Enabled>false</Enabled> + </LookAheadCoasting> + <Overspeed xsi:type="ve1.0:OverspeedEngineeringType"> + <Mode>Off</Mode> + </Overspeed> + </DriverModel> + <MissionCycles> + <Cycle type="csv" file="LongHaul"/> + </MissionCycles> +</tns:VectoInputEngineering> diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs index 3ecd6a4ed5..7d22f05116 100644 --- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs +++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs @@ -61,7 +61,8 @@ namespace TUGraz.VectoCore.Tests.Utils } else { var dao = new EngineeringDataAdapter(); var engineData = dao.CreateEngineData(engineInput, gearboxInput, new List<ITorqueLimitInputData>()); - return dao.CreateGearboxData(gearboxInput, engineData, ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(), + return dao.CreateGearboxData(gearboxInput, engineData, (IGearshiftEngineeringInputData)gearboxInput, + ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(), VehicleCategory.RigidTruck); } } diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 74dbc81805..595e8dc3c1 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -2828,6 +2828,12 @@ <Content Include="TestData\Jobs\Tractor_4x2_vehicle-class-5_Generic vehicle.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\EngineeringJob\SampleJobEngineering1.0.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="TestData\XML\EngineeringJob\SampleJobEngineering1.1.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\Tractor_4x2_vehicle-class-5_5_t_0.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs index 4e2e25bf50..506c0b258c 100644 --- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs @@ -1,7 +1,7 @@ /* * This file is part of VECTO. * -* Copyright © 2012-2019 European Union +* Copyright © 2012-2017 European Union * * Developed by Graz University of Technology, * Institute of Internal Combustion Engines and Thermodynamics, @@ -31,6 +31,7 @@ using System.IO; using System.Linq; +using Ninject; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -44,6 +45,9 @@ using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; using NUnit.Framework; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.Models.Simulation; + namespace TUGraz.VectoCore.Tests.XML { @@ -52,10 +56,16 @@ namespace TUGraz.VectoCore.Tests.XML { public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample_ref.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] @@ -63,14 +73,14 @@ namespace TUGraz.VectoCore.Tests.XML { AssertHelper.Exception<VectoException>(() => { var reader = File.OpenRead(EngineeringSampleFile); - var foo = new XMLEngineeringInputDataProvider(reader, true); + var foo = xmlInputReader.CreateEngineering(reader, true); }); } [TestCase] public void TestXMLInputEngReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var engineDataProvider = inputDataProvider.JobInputData.Vehicle.Components.EngineInputData; @@ -92,7 +102,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual("560", fcMapTable.Rows[0][0]); var fcMap = FuelConsumptionMapReader.Create(fcMapTable); - Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), + Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value()); var fldTable = engineDataProvider.FullLoadCurve; @@ -106,7 +116,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMLInputGbxReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData; Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); @@ -136,7 +146,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMLInputGbxTCReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var tcInputDataProvider = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.TorqueConverter; @@ -154,7 +164,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMLInputAngledriveReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var angledriveInputData = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData; Assert.AreEqual("Generic Angledrive", angledriveInputData.Model); @@ -171,7 +181,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMLInputAxlGReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData; Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); @@ -188,7 +198,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMLInputRetarderReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.Components.RetarderInputData; Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); @@ -206,8 +216,8 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMLInputAxleWheelsReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; var axles = vehicleDataProvider.Components.AxleWheels.AxlesEngineering; @@ -222,13 +232,13 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(31300, tyre.TyreTestLoad.Value()); //AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; }); - Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value()); + Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value(), 1e-6); } [TestCase] public void TestXMLInputAuxiliariesReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var auxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData; var aux = auxDataProvider.Auxiliaries; @@ -251,7 +261,7 @@ namespace TUGraz.VectoCore.Tests.XML { //var reader = XmlReader.Create(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var adas = inputDataProvider.DriverInputData; @@ -261,9 +271,9 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestVehicleInputReferencedFile() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); @@ -278,7 +288,6 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.Components.RetarderInputData.Ratio); } - [Category("LongRunning")] [TestCase] public void TestXMLPowertrainGenerationReferencedFile() { @@ -286,9 +295,9 @@ namespace TUGraz.VectoCore.Tests.XML var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml"); var sumData = new SummaryDataContainer(sumWriter); var jobContainer = new JobContainer(sumData); - var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var dataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); - var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter); + var runsFactory = _kernel.Get<ISimulatorFactoryFactory>().Factory(ExecutionMode.Engineering, dataProvider, fileWriter); runsFactory.WriteModalResults = true; jobContainer.AddRuns(runsFactory); @@ -300,7 +309,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMEngineering_DriverModelLACExt() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var driverDataProvider = inputDataProvider.DriverInputData; @@ -314,7 +323,7 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestXMEngineering_PTO() { - var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true); var ptoData = inputDataProvider.JobInputData.Vehicle.Components.PTOTransmissionInputData; diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs index c1687e57ba..a3008cc19d 100644 --- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs @@ -1,7 +1,7 @@ /* * This file is part of VECTO. * -* Copyright © 2012-2019 European Union +* Copyright © 2012-2017 European Union * * Developed by Graz University of Technology, * Institute of Internal Combustion Engines and Thermodynamics, @@ -33,6 +33,7 @@ using System.IO; using System.Linq; using System.Xml; using System.Xml.Linq; +using Ninject; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; @@ -50,6 +51,9 @@ using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; using NUnit.Framework; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules; +using TUGraz.VectoCore.Models.Simulation; namespace TUGraz.VectoCore.Tests.XML { @@ -60,10 +64,19 @@ namespace TUGraz.VectoCore.Tests.XML public const string EngineeringSampleFileFull = "TestData/XML/XMLReaderEngineering/engineering_job-sample_FULL.xml"; + public const string EngineeringSampleFile_10_Full = "TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml"; + public const string EngineeringSampleFile_10TestExtensions_Full = "TestData/XML/EngineeringJob/SampleJobEngineering1.1.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] @@ -71,7 +84,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var engineDataProvider = inputDataProvider.JobInputData.Vehicle.Components.EngineInputData; @@ -93,7 +106,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual("560.00", fcMapTable.Rows[0][0]); var fcMap = FuelConsumptionMapReader.Create(fcMapTable); - Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), + Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value()); var fldTable = engineDataProvider.FullLoadCurve; @@ -109,7 +122,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData; Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model); @@ -138,7 +151,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData; Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model); @@ -160,15 +173,12 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - + - var axleglosses = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + var axleglosses = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear, - XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager); + XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap)); //accData.DeleteSelf(); axleglosses.ReplaceSelf( new XElement(XMLNames.Axlegear_TorqueLossMap, new XElement(XMLNames.Axlegear_Efficiency, "0.9123")).ToString()); @@ -180,7 +190,7 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); var axleGear = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData; Assert.AreEqual(0.9123, axleGear.Efficiency); @@ -191,7 +201,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.Components.RetarderInputData; Assert.AreEqual("Generic Retarder", retarderDataProvider.Model); @@ -211,8 +221,8 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; var axles = vehicleDataProvider.Components.AxleWheels.AxlesEngineering; @@ -227,7 +237,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(31300, tyre.TyreTestLoad.Value()); //AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; }); - Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value()); + Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value(), 1e-6); } [TestCase] @@ -238,19 +248,16 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var firstAxle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + + var firstAxle = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_AxleWheels, XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) - ), manager); + XMLNames.AxleWheels_Axles) + + string.Format("/*[@{0}={1}]", XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "1") + ); firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); firstAxle.SetTypedValue(2); @@ -261,9 +268,9 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Components.AxleWheels.AxlesEngineering; }); } @@ -276,19 +283,17 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); + - var firstAxle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + var firstAxle = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_AxleWheels, XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) - ), manager); + XMLNames.AxleWheels_Axles) + + string.Format("/*[@{0}={1}]", XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "1") + ); firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); firstAxle.SetTypedValue(0); @@ -300,8 +305,8 @@ namespace TUGraz.VectoCore.Tests.XML AssertHelper.Exception<VectoException>( () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var axles = inputDataProvider.VehicleInputData.Components.AxleWheels.AxlesEngineering; + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); + var axles = inputDataProvider.JobInputData.Vehicle.Components.AxleWheels.AxlesEngineering; }); } @@ -313,19 +318,16 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - var firstAxle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + + var firstAxle = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_AxleWheels, XMLNames.ComponentDataWrapper, - XMLNames.AxleWheels_Axles, - helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty) - ), manager); + XMLNames.AxleWheels_Axles) + + string.Format("/*[@{0}={1}]", XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "1") + ); firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty); firstAxle.SetTypedValue(3); @@ -338,8 +340,8 @@ namespace TUGraz.VectoCore.Tests.XML AssertHelper.Exception<VectoException>( () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var axles = inputDataProvider.VehicleInputData.Components.AxleWheels.AxlesEngineering; + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); + var axles = inputDataProvider.JobInputData.Vehicle.Components.AxleWheels.AxlesEngineering; }); } @@ -348,7 +350,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var auxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData; var aux = auxDataProvider.Auxiliaries; @@ -369,7 +371,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var adas = inputDataProvider.DriverInputData; @@ -379,11 +381,9 @@ namespace TUGraz.VectoCore.Tests.XML [TestCase] public void TestVehicleInputSingleFile() { - var reader = File.OpenRead(EngineeringSampleFile); + var inputDataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile, true); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); - - var vehicleDataProvider = inputDataProvider.VehicleInputData; + var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle; Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory); Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration); @@ -403,7 +403,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFile); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var driverDataProvider = inputDataProvider.DriverInputData; @@ -417,7 +417,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6); Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6); - var driverAcc = driverDataProvider.AccelerationCurve; + var driverAcc = driverDataProvider.AccelerationCurve.AccelerationCurve; Assert.AreEqual(2, driverAcc.Rows.Count); Assert.AreEqual("100", driverAcc.Rows[1][0]); Assert.AreEqual("1", driverAcc.Rows[1][1]); @@ -426,7 +426,8 @@ namespace TUGraz.VectoCore.Tests.XML var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData; - var shiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData; + var shiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData; + var gearboxData = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData; Assert.AreEqual(DeclarationData.Gearbox.UpshiftMinAcceleration.Value(), shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6); @@ -442,10 +443,10 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(DeclarationData.Gearbox.StartAcceleration.Value(), shiftStrategy.StartAcceleration.Value(), 1e-6); Assert.AreEqual(DeclarationData.Gearbox.TorqueReserveStart, shiftStrategy.StartTorqueReserve, 1e-6); - AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, shiftStrategy.PowershiftShiftTime); - - var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.TorqueConverter; + AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, gearboxData.PowershiftShiftTime); + var tcShiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData; + AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CCUpshiftMinAcceleration, tcShiftStrategy.CCUpshiftMinAcceleration); AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CLUpshiftMinAcceleration, @@ -460,15 +461,11 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var accData = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + + var accData = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_DriverModel, - XMLNames.DriverModel_DriverAccelerationCurve), manager); + XMLNames.DriverModel_DriverAccelerationCurve)); accData.DeleteSelf(); //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); @@ -478,17 +475,16 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); var driverDataProvider = inputDataProvider.DriverInputData; - var driverAcc = driverDataProvider.AccelerationCurve; + var driverAcc = driverDataProvider.AccelerationCurve.AccelerationCurve; Assert.AreEqual("TUGraz.VectoCore.Resources.Declaration.VACC.Truck.vacc", driverAcc.Source); Assert.AreEqual(5, driverAcc.Rows.Count); } - [Category("LongRunning")] [TestCase] public void TestXMLPowertrainGenerationSingleFile() { @@ -496,9 +492,9 @@ namespace TUGraz.VectoCore.Tests.XML var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml"); var sumData = new SummaryDataContainer(sumWriter); var jobContainer = new JobContainer(sumData); - var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true); + var dataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile, true); - var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter); + var runsFactory = _kernel.Get<ISimulatorFactoryFactory>().Factory(ExecutionMode.Engineering, dataProvider, fileWriter); runsFactory.WriteModalResults = true; jobContainer.AddRuns(runsFactory); @@ -511,7 +507,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFileFull); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var tcDataProvider = inputDataProvider.JobInputData.Vehicle.Components.TorqueConverterInputData; @@ -534,7 +530,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFileFull); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var angledriveDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData; @@ -549,7 +545,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFileFull); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var driverDataProvider = inputDataProvider.DriverInputData; @@ -570,13 +566,14 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6); Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6); - var driverAcc = driverDataProvider.AccelerationCurve; + var driverAcc = driverDataProvider.AccelerationCurve.AccelerationCurve; Assert.AreEqual(2, driverAcc.Rows.Count); Assert.AreEqual("100", driverAcc.Rows[1][0]); Assert.AreEqual("1", driverAcc.Rows[1][1]); Assert.AreEqual("-1", driverAcc.Rows[1][2]); - var shiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData; + var shiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData; + var gearboxData = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData; Assert.AreEqual(0.133, shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6); Assert.AreEqual(12, shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6); @@ -588,10 +585,10 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(0.211, shiftStrategy.StartAcceleration.Value(), 1e-6); Assert.AreEqual(0.212, shiftStrategy.StartTorqueReserve, 1e-6); - Assert.AreEqual(0.811, shiftStrategy.PowershiftShiftTime.Value(), 1e-6); - - var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.TorqueConverter; + Assert.AreEqual(0.811, gearboxData.PowershiftShiftTime.Value(), 1e-6); + var tcShiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData; + Assert.AreEqual(0.134, tcShiftStrategy.CCUpshiftMinAcceleration.Value(), 1e-6); Assert.AreEqual(0.133, tcShiftStrategy.CLUpshiftMinAcceleration.Value(), 1e-6); } @@ -601,7 +598,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFileFull); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var airdragData = inputDataProvider.JobInputData.Vehicle.Components.AirdragInputData; Assert.AreEqual(CrossWindCorrectionMode.SpeedDependentCorrectionFactor, airdragData.CrossWindCorrectionMode); @@ -615,7 +612,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFileFull); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var ptoData = inputDataProvider.JobInputData.Vehicle.Components.PTOTransmissionInputData; @@ -636,7 +633,7 @@ namespace TUGraz.VectoCore.Tests.XML { var reader = File.OpenRead(EngineeringSampleFileFull); - var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true); + var inputDataProvider = XMLInputReader.CreateEngineering(reader, true); var angledriveInputData = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData; Assert.AreEqual("Generic Angledrive", angledriveInputData.Model); @@ -658,15 +655,12 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - + - var angledrivelosses = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + var angledrivelosses = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive, - XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap), manager); + XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap)); //accData.DeleteSelf(); angledrivelosses.ReplaceSelf( new XElement(XMLNames.AngleDrive_TorqueLossMap, new XElement(XMLNames.AngleDrive_Efficiency, "0.9124")).ToString()); @@ -678,7 +672,7 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); var angledrive = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData; Assert.AreEqual(0.9124, angledrive.Efficiency); @@ -692,15 +686,11 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var aux = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + + var aux = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries, - XMLNames.ComponentDataWrapper), manager); + XMLNames.ComponentDataWrapper)); //accData.DeleteSelf(); //angledrivelosses.ReplaceSelf(new XElement(XMLNames.AngleDrive_Efficiency, "0.9124").ToString()); aux.InnerXml = @@ -714,7 +704,7 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); var auxInput = inputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData.Auxiliaries; @@ -731,35 +721,33 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); + - var retarderType = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + var retarderType = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, - XMLNames.Vehicle_RetarderType), manager); + XMLNames.Vehicle_RetarderType)); retarderType.SetValue("None"); - var retarder = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + var retarder = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, - XMLNames.Component_Retarder), manager); + XMLNames.Component_Retarder)); retarder.DeleteSelf(); //modify cycle & remove AUX to make simulation valid - var cycle = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.VectoJob_MissionCycles), manager); + var cycle = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, + XMLNames.VectoJob_MissionCycles)); cycle.InnerXml = new XElement(XMLNames.Missions_Cycle, new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), new XAttribute(XMLNames.ExtResource_File_Attr, "LongHaul")).ToString(); - var aux = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + var aux = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries, - XMLNames.ComponentDataWrapper), manager); + XMLNames.ComponentDataWrapper)); aux.InnerXml = ""; //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); @@ -769,9 +757,9 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); - var factory = new SimulatorFactory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy")); + var factory = _kernel.Get<ISimulatorFactoryFactory>().Factory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy")); var jobContainer = new JobContainer(null); jobContainer.AddRuns(factory); jobContainer.Execute(); @@ -785,18 +773,12 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var engine = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine), manager); - //accData.DeleteSelf(); + + var engine = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, + XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine)); engine.DeleteSelf(); - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); var stream = new MemoryStream(); var writer = new StreamWriter(stream); writer.Write(nav.OuterXml); @@ -804,7 +786,7 @@ namespace TUGraz.VectoCore.Tests.XML stream.Seek(0, SeekOrigin.Begin); AssertHelper.Exception<VectoException>( - () => { var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); }); + () => { var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); }); } @@ -816,14 +798,10 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var cycles = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.VectoJob_MissionCycles), manager); + + var cycles = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, + XMLNames.VectoJob_MissionCycles)); //accData.DeleteSelf(); cycles.InnerXml = new XElement(XMLNames.Missions_Cycle, @@ -839,7 +817,7 @@ namespace TUGraz.VectoCore.Tests.XML AssertHelper.Exception<VectoException>( () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); var cyclesList = inputDataProvider.JobInputData.Cycles; }); } @@ -852,14 +830,10 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var driverAcceleration = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), - XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve), manager); + + var driverAcceleration = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, + XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve)); //accData.DeleteSelf(); driverAcceleration.InnerXml = new XElement(XMLNames.ExternalResource, @@ -873,11 +847,10 @@ namespace TUGraz.VectoCore.Tests.XML writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); - var cyclesList = inputDataProvider.DriverInputData.AccelerationCurve; - }); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); + var accelerationCurve = inputDataProvider.DriverInputData.AccelerationCurve; + //Assert.AreEqual(DataSourceType.Missing, accelerationCurve.AccelerationCurve.SourceType); + Assert.IsNull(accelerationCurve.AccelerationCurve); } [TestCase] @@ -888,34 +861,59 @@ namespace TUGraz.VectoCore.Tests.XML var doc = new XmlDocument(); doc.Load(reader); var nav = doc.CreateNavigator(); - var manager = new XmlNamespaceManager(nav.NameTable); - var helper = new XPathHelper(ExecutionMode.Engineering); - helper.AddNamespaces(manager); - - - var axlegearLossMap = nav.SelectSingleNode(helper.QueryAbs( - helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix), + + var axlegearLossMap = nav.SelectSingleNode(XMLHelper.QueryLocalName( + XMLNames.VectoInputEngineering, XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear, - XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager); - //accData.DeleteSelf(); + XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap)); axlegearLossMap.InnerXml = ""; - //InnerXml = - //new XElement(XMLNames.ExternalResource, - // new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV), - // new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString(); - //var modified = XmlReader.Create(new StringReader(nav.OuterXml)); var stream = new MemoryStream(); var writer = new StreamWriter(stream); writer.Write(nav.OuterXml); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); - AssertHelper.Exception<VectoException>( - () => { - var inputDataProvider = new XMLEngineeringInputDataProvider(stream, false); - var lossmap = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData.LossMap; - }, "Failed to read TorqueLossMap resource"); + var inputDataProvider = XMLInputReader.CreateEngineering(stream, false); + var lossmap = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData.LossMap; + + Assert.IsNull(lossmap); + + var eff = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData.Efficiency; + Assert.IsNaN(eff); + } + + + [TestCase] + public void TestXMLInputEngineeringVersion1_0() + { + var inputDataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile_10_Full, true); + + Assert.NotNull(inputDataProvider); + + Assert.AreEqual("Generic Eninge", inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.Model); + Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.WHTCEngineering, 1e-6); + + } + + + [TestCase] + public void TestXMLInputEngineeringVersion1_0TestExtensions() + { + // load overrides of test xml types + if (!_kernel.HasModule(typeof(XMLEngineeringReaderTestOverrides).FullName)) { + _kernel.Load(new XMLEngineeringReaderTestOverrides()); + } + + var inputDataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile_10TestExtensions_Full, true); + + Assert.NotNull(inputDataProvider); + + Assert.AreEqual("Generic Eninge", inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.Model); + Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.WHTCEngineering, 1e-6); + + Assert.AreEqual(2200, inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.RatedSpeedDeclared.AsRPM, 1e-6); + } } } diff --git a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs index 4215790500..21fad5b89f 100644 --- a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs @@ -39,6 +39,8 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Engineering; using TUGraz.VectoCore.OutputData.XML; using NUnit.Framework; using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.OutputData.XML.Engineering; +using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; namespace TUGraz.VectoCore.Tests.XML { @@ -79,12 +81,11 @@ namespace TUGraz.VectoCore.Tests.XML } var inputData = JSONInputDataFactory.ReadJsonJob(EngineOnlyJob); - var job = - new XMLEngineeringWriter(".", true, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData); + var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData); job.Save(outFile); //var reader = XmlReader.Create(outFile); - var xml = new XMLEngineeringInputDataProvider(outFile, true); + var xml = xmlInputReader.CreateEngineering(outFile, true); Assert.IsNotNull(xml); Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData.JobName); @@ -97,14 +98,13 @@ namespace TUGraz.VectoCore.Tests.XML var outFile = "EngineeringJobSingleFile.xml"; var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJob); - var job = - new XMLEngineeringWriter(".", true, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData); + var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData); job.Save(outFile); - var xml = new XMLEngineeringInputDataProvider(outFile, true); + var xml = xmlInputReader.CreateEngineering(outFile, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); + Assert.AreEqual("N.A. N/A", xml.JobInputData.JobName); } [Category("LongRunning")] @@ -114,14 +114,13 @@ namespace TUGraz.VectoCore.Tests.XML var outFile = "EngineeringJobSingleFileFull.xml"; var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJobFull); - var job = - new XMLEngineeringWriter(".", true, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData); + var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData); job.Save(outFile); - var xml = new XMLEngineeringInputDataProvider(outFile, true); + var xml = xmlInputReader.CreateEngineering(outFile, true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); + Assert.AreEqual("N.A. N/A", xml.JobInputData.JobName); } [Category("LongRunning")] @@ -133,14 +132,13 @@ namespace TUGraz.VectoCore.Tests.XML Directory.CreateDirectory(outDir); var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJobFull); - var job = - new XMLEngineeringWriter(outDir, false, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData); + var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData); job.Save(Path.Combine(outDir, outFile)); - var xml = new XMLEngineeringInputDataProvider(Path.Combine(outDir, outFile), true); + var xml = xmlInputReader.CreateEngineering(Path.Combine(outDir, outFile), true); Assert.IsNotNull(xml); - Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName); + Assert.AreEqual("N.A. N/A", xml.JobInputData.JobName); } [Category("LongRunning")] @@ -149,9 +147,7 @@ namespace TUGraz.VectoCore.Tests.XML { var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJob); Directory.CreateDirectory("Engineering_MultipleFiles"); - var job = - new XMLEngineeringWriter("Engineering_MultipleFiles", false, "TU Graz, IVT").GenerateVectoJob( - (IEngineeringInputDataProvider)inputData); + var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData); job.Save("Engineering_MultipleFiles/EngineeringJobMultipleFiles.xml"); //var xml = new XMLEngineeringInputDataProvider(outFile, true); diff --git a/VectoCore/VectoXML.spp b/VectoCore/VectoXML.spp index 17b6a96aea..d36050dd06 100644 --- a/VectoCore/VectoXML.spp +++ b/VectoCore/VectoXML.spp @@ -33,34 +33,45 @@ <Folder FolderName="XQuery Files" ExtStr="xq;xql;xquery;xqu"/> <Folder FolderName="HTML Files" ExtStr="html;htm;xhtml;asp"/> <Folder FolderName="DTD/Schemas" ExtStr="dtd;dcd;xdr;biz;xsd"> - <File FilePath="VectoCore\Resources\XSD\ParameterDocumentation.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoComponent.1.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoComponent.2.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationComponent.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.6.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.8.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.1.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.1.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.2.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoDeclarationJob.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.6.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.7.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.1.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.1.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoInput.1.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoInput.2.0.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoMonitoring.0.7.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.4.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.5.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.7.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.5.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\VTPReport.0.1.xsd" HomeFolder="Yes"/> - <File FilePath="VectoCore\Resources\XSD\xmldsig-core-schema.xsd" HomeFolder="Yes"/> + <Folder FolderName="Declaration"> + <File FilePath="VectoCore\Resources\XSD\VectoComponent.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoComponent.2.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationComponent.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.6.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.8.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.1.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.2.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoDeclarationJob.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoInput.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoInput.2.0.xsd" HomeFolder="Yes"/> + </Folder> + <Folder FolderName="Common"> + <File FilePath="VectoCore\Resources\XSD\ParameterDocumentation.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\xmldsig-core-schema.xsd" HomeFolder="Yes"/> + </Folder> + <Folder FolderName="Engineering"> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringComponent.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.6.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.7.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.1.0.TEST.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.xsd" HomeFolder="Yes"/> + </Folder> + <Folder FolderName="Reports"> + <File FilePath="VectoCore\Resources\XSD\VectoMonitoring.0.7.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.4.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.5.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.7.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.5.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VTPReport.0.1.xsd" HomeFolder="Yes"/> + </Folder> </Folder> <Folder FolderName="Entities" ExtStr="ent"/> </Project> -- GitLab