diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index ac9c2e42eca64c3aaad5a68de8accfa88cdd8b66..c32b74e64f87ebf3f0dda956950ecda317d2f756 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 e2e4e9563f4faecfecbd5d7fbc7b4bfd4d186a49..4da2a5e537f85dc1fc3ca0a9ed98d0b1fbc232e5 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 e0fa06b48bd56f4a6d4d90695e471386b61cabfd..d3079bbbe9b8fe31255af8608c9237b7467a9c4f 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 e1e7b469663f6b14f6b4fc271f3718f82d8470ce..6db977c721951a882b9e3bc74d7553f69f85a625 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 66a932a5ff1d9a8c9de7efcd39b061ce23a1260a..098b5d1e511a1c205ee0f9f451b71860c4147928 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 6e4d47051083a968cfd807a9cb7878983eef96d6..f76826c7cde3426b14dcb39febd95a0db92bb44c 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 d6780113b21702921046a34ff32318c4523e2044..31010b77dc19219c5b8d7ce36a54d3b0d442940b 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 4bdc942f181a239ed5327332cb84ea6e1d4873eb..65bcb06ab18aca87d9f66ddd7dab1ccefcfb83b0 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 d3cc68d1c3783157c394e0e803b8b49ab2d37a29..b2b00935e63b03369da9ac2139a051fc2b2cf3b3 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 1f7f252fdb249bf90ccacd06f2e782154964dc69..59cad7f46a28d1e64b1270abceef73cd20a52e35 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 0d46021d6bacd47fdbfe781968f69fa1d40cea52..e9eb84f86ff0a413b8875a406b3b906d77af638c 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 5e286578728b92e120dbf80ca50230219c300e27..1cf052de5679c0b9fdaf389b9a614a694cb40de6 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); }