From 455f9f9bcffff70629166863d84dc9ed8e976a4d Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 13 May 2019 11:14:01 +0200 Subject: [PATCH] refactoring: use enum instead of two booleans for ecoroll combination --- .../InputData/DeclarationInputData.cs | 61 ++++++++++++++++++- .../FileIO/JSON/JSONComponentInputData.cs | 9 +-- .../XMLDeclarationADASDataProvider.cs | 13 ++-- .../XMLDeclarationVehicleDataProvider.cs | 9 +-- .../DeclarationDataAdapter.cs | 3 +- .../Models/Declaration/ADASCombinations.cs | 22 +++---- .../Models/Declaration/DeclarationData.cs | 3 +- .../SimulationComponent/Data/VehicleData.cs | 3 +- .../OutputData/XML/XMLCustomerReport.cs | 4 +- .../OutputData/XML/XMLManufacturerReport.cs | 4 +- .../Models/Declaration/DeclarationDataTest.cs | 4 +- .../XML/XMLDeclarationInputTest.cs | 4 +- 12 files changed, 89 insertions(+), 50 deletions(-) diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index ac9c2e42ec..c32b74e64f 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Net.NetworkInformation; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -199,9 +200,7 @@ namespace TUGraz.VectoCommon.InputData { bool EngineStopStart { get; } - bool EcoRollWitoutEngineStop { get; } - - bool EcoRollWithEngineStop { get; } + EcoRollType EcoRoll { get; } PredictiveCruiseControlType PredictiveCruiseControl { get; } } @@ -231,8 +230,64 @@ namespace TUGraz.VectoCommon.InputData { return pcc.ToString().Replace(Prefix, "").Replace(SeparatorEnum, SeparatorXML); } + + public static string GetName(this PredictiveCruiseControlType pcc) + { + return pcc.ToString().Replace(Prefix, Prefix.Replace(SeparatorEnum, " ")).Replace(SeparatorEnum, "&"); + } + } + + public enum EcoRollType + { + None, + WithoutEngineStop, + WithEngineStop } + public static class EcorollTypeHelper + { + public static EcoRollType Get(bool ecoRollWithoutEngineStop, bool ecoRollWithEngineStop) + { + if (ecoRollWithEngineStop && ecoRollWithoutEngineStop) { + throw new VectoException("invalid combination or EcoRoll"); + } + + if (ecoRollWithoutEngineStop) { + return EcoRollType.WithoutEngineStop; + } + + if (ecoRollWithEngineStop) { + return EcoRollType.WithEngineStop; + } + + return EcoRollType.None; + } + + public static EcoRollType Parse(string ecoRoll) + { + return ecoRoll.ParseEnum<EcoRollType>(); + } + + public static bool WithoutEngineStop(this EcoRollType ecoRoll) + { + return ecoRoll == EcoRollType.WithoutEngineStop; + } + + public static bool WithEngineStop(this EcoRollType ecoRoll) + { + return ecoRoll == EcoRollType.WithEngineStop; + } + + public static string GetName(this EcoRollType ecoRoll) + { + switch (ecoRoll) { + case EcoRollType.None: return "None"; + case EcoRollType.WithoutEngineStop: return "without engine stop"; + case EcoRollType.WithEngineStop: return "with engine stop"; + default: throw new ArgumentOutOfRangeException(nameof(ecoRoll), ecoRoll, null); + } + } + } public enum TankSystem { diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index e2e4e9563f..4da2a5e537 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -404,14 +404,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return DeclarationData.Vehicle.ADAS.EngineStopStartDefault; } } - public bool EcoRollWitoutEngineStop + public EcoRollType EcoRoll { - get { return DeclarationData.Vehicle.ADAS.EcoRollWitoutEngineStop; } - } - - public bool EcoRollWithEngineStop - { - get { return DeclarationData.Vehicle.ADAS.EcoRollWithEngineStop; } + get { return DeclarationData.Vehicle.ADAS.EcoRoll; } } public PredictiveCruiseControlType PredictiveCruiseControl diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs index e0fa06b48b..d3079bbbe9 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs @@ -41,14 +41,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EngineStopStart)); } } - public virtual bool EcoRollWitoutEngineStop + public virtual EcoRollType EcoRoll { - get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop)); } - } - - public virtual bool EcoRollWithEngineStop - { - get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart)); } + get { + return EcorollTypeHelper.Get( + XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop)), + XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart))); + } } public virtual PredictiveCruiseControlType PredictiveCruiseControl diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index e1e7b46966..6db977c721 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -365,14 +365,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return false; } } - public bool EcoRollWitoutEngineStop + public EcoRollType EcoRoll { - get { return false; } - } - - public bool EcoRollWithEngineStop - { - get { return false; } + get { return EcoRollType.None; } } public PredictiveCruiseControlType PredictiveCruiseControl diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 66a932a5ff..098b5d1e51 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -160,8 +160,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { return new VehicleData.ADASData { EngineStopStart = adas.EngineStopStart, - EcoRollWithoutEngineStop = adas.EcoRollWitoutEngineStop, - EcoRollWithEngineStop = adas.EcoRollWithEngineStop, + EcoRoll = adas.EcoRoll, PredictiveCruiseControl = adas.PredictiveCruiseControl }; } diff --git a/VectoCore/VectoCore/Models/Declaration/ADASCombinations.cs b/VectoCore/VectoCore/Models/Declaration/ADASCombinations.cs index 6e4d470510..f76826c7cd 100644 --- a/VectoCore/VectoCore/Models/Declaration/ADASCombinations.cs +++ b/VectoCore/VectoCore/Models/Declaration/ADASCombinations.cs @@ -45,21 +45,21 @@ namespace TUGraz.VectoCore.Models.Declaration { public string ID; } - public sealed class ADASCombinations : LookupData<bool, bool, bool, PredictiveCruiseControlType, ADASCombination> + public sealed class ADASCombinations : LookupData<bool, EcoRollType, PredictiveCruiseControlType, ADASCombination> { private readonly List<Entry> _combinations = new List<Entry>(); #region Overrides of LookupData - public override ADASCombination Lookup(bool enginestopstart, bool ecorollwithoutenginestop, bool ecorollwithenginestop, PredictiveCruiseControlType pcc) + public override ADASCombination Lookup(bool enginestopstart, EcoRollType ecoRoll, PredictiveCruiseControlType pcc) { try { var entry = _combinations.First( - x => x.EngineStopStart == enginestopstart && x.EcoRollWithoutEngineStop == ecorollwithoutenginestop && - x.EcorollWithEngineStop == ecorollwithenginestop && x.PCCType == pcc); + x => x.EngineStopStart == enginestopstart && x.EcoRoll == ecoRoll && + x.PCCType == pcc); return new ADASCombination {ID = entry.ADASCombination}; } catch (Exception ) { - throw new VectoException(string.Format(ErrorMessage, enginestopstart, ecorollwithoutenginestop, ecorollwithenginestop, pcc)); + throw new VectoException(string.Format(ErrorMessage, enginestopstart, ecoRoll, pcc)); } } @@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.Models.Declaration { get { return - "ADAS Combination Lookup Error: No entry found for engine stop/start: {0}, eco roll w/o engine stop: {1}, eco roll w engine stop: {2}, PCC: {3}"; + "ADAS Combination Lookup Error: No entry found for engine stop/start: {0}, eco roll: {1}, PCC: {2}"; } } @@ -81,8 +81,7 @@ namespace TUGraz.VectoCore.Models.Declaration foreach (DataRow row in table.Rows) { _combinations.Add(new Entry() { EngineStopStart = row.ParseBoolean("enginestopstart"), - EcoRollWithoutEngineStop = row.ParseBoolean("ecorollwithoutenginestop"), - EcorollWithEngineStop = row.ParseBoolean("ecorollwithenginestop"), + EcoRoll = EcorollTypeHelper.Get(row.ParseBoolean("ecorollwithoutenginestop"), row.ParseBoolean("ecorollwithenginestop")), PCCType = PredictiveCruiseControlTypeHelper.Parse(row.Field<string>("predictivecruisecontrol")), ADASCombination = row.Field<string>("adascombination") }); @@ -94,8 +93,7 @@ namespace TUGraz.VectoCore.Models.Declaration public struct Entry { public bool EngineStopStart; - public bool EcoRollWithoutEngineStop; - public bool EcorollWithEngineStop; + public EcoRollType EcoRoll; public PredictiveCruiseControlType PCCType; public string ADASCombination; @@ -104,13 +102,13 @@ namespace TUGraz.VectoCore.Models.Declaration public ADASCombination Lookup(IAdvancedDriverAssistantSystemDeclarationInputData adas) { return Lookup( - adas.EngineStopStart, adas.EcoRollWitoutEngineStop, adas.EcoRollWithEngineStop, adas.PredictiveCruiseControl); + adas.EngineStopStart, adas.EcoRoll, adas.PredictiveCruiseControl); } internal ADASCombination Lookup(VehicleData.ADASData adas) { return Lookup( - adas.EngineStopStart, adas.EcoRollWithoutEngineStop, adas.EcoRollWithEngineStop, adas.PredictiveCruiseControl); + adas.EngineStopStart, adas.EcoRoll, adas.PredictiveCruiseControl); } } } diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index d6780113b2..31010b77dc 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -543,8 +543,7 @@ namespace TUGraz.VectoCore.Models.Declaration public static class ADAS { public const PredictiveCruiseControlType PredictiveCruiseControlDefault = PredictiveCruiseControlType.None; - public const bool EcoRollWithEngineStop = false; - public const bool EcoRollWitoutEngineStop = false; + public const EcoRollType EcoRoll = EcoRollType.None; public const bool EngineStopStartDefault = false; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs index 4bdc942f18..65bcb06ab1 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs @@ -219,8 +219,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public class ADASData { public bool EngineStopStart { get; internal set; } - public bool EcoRollWithoutEngineStop { get; internal set; } - public bool EcoRollWithEngineStop { get; internal set; } + public EcoRollType EcoRoll { get; internal set; } public PredictiveCruiseControlType PredictiveCruiseControl { get; internal set; } } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs index d3cc68d1c3..b2b00935e6 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs @@ -120,8 +120,8 @@ namespace TUGraz.VectoCore.OutputData.XML { return new XElement(tns + XMLNames.Vehicle_ADAS, new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRollWithoutEngineStop), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRollWithEngineStop), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()), new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None) ); } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs index 1f7f252fdb..59cad7f46a 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs @@ -112,8 +112,8 @@ namespace TUGraz.VectoCore.OutputData.XML { return new XElement(tns + XMLNames.Vehicle_ADAS, new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRollWithoutEngineStop), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRollWithEngineStop), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()), new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None) ); } diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 0d46021d6b..e9eb84f86f 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -1996,7 +1996,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration bool engineStopStart, bool ecoRollWOEngineStop, bool ecoRollWEngineStop, PredictiveCruiseControlType pcc, string expectedADASGroup) { - var adas = DeclarationData.ADASCombinations.Lookup(engineStopStart, ecoRollWOEngineStop, ecoRollWEngineStop, pcc); + var adas = DeclarationData.ADASCombinations.Lookup(engineStopStart, EcorollTypeHelper.Get(ecoRollWOEngineStop, ecoRollWEngineStop), pcc); Assert.AreEqual(adas.ID, expectedADASGroup); } @@ -2006,7 +2006,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration bool engineStopStart, bool ecoRollWOEngineStop, bool ecoRollWEngineStop, PredictiveCruiseControlType pcc) { AssertHelper.Exception<VectoException>(() => { - DeclarationData.ADASCombinations.Lookup(engineStopStart, ecoRollWOEngineStop, ecoRollWEngineStop, pcc); + DeclarationData.ADASCombinations.Lookup(engineStopStart, EcorollTypeHelper.Get(ecoRollWOEngineStop, ecoRollWEngineStop), pcc); }); } diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs index 5e28657872..1cf052de56 100644 --- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs @@ -1008,8 +1008,8 @@ namespace TUGraz.VectoCore.Tests.XML Assert.IsFalse(vehicle.ExemptedVehicle); Assert.AreEqual(engineStopStart, adas.EngineStopStart); - Assert.AreEqual(ecoRollWith, adas.EcoRollWithEngineStop); - Assert.AreEqual(ecoRollWithout, adas.EcoRollWitoutEngineStop); + Assert.AreEqual(ecoRollWith, adas.EcoRoll.WithEngineStop()); + Assert.AreEqual(ecoRollWithout, adas.EcoRoll.WithoutEngineStop()); Assert.AreEqual(pcc, adas.PredictiveCruiseControl); } -- GitLab