From e0d4d4fa52ddc87c440b8cf91aaaf2759a2ed462 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 22 Mar 2017 17:20:52 +0100 Subject: [PATCH] use only one container class for storing information required during validation --- VECTO/Input Files/Engine.vb | 16 ++---- VECTO/Input Files/Gearbox.vb | 14 ++--- VECTO/Input Files/VectoJob.vb | 5 +- VECTO/Input Files/Vehicle.vb | 21 +++---- VectoCommon/VectoCommon/Utils/Validation.cs | 57 ++++++------------- .../Data/Gearbox/GearData.cs | 13 ++--- .../Data/Gearbox/ShiftPolygon.cs | 10 ++-- .../Data/SimulationComponentData.cs | 10 ++-- 8 files changed, 59 insertions(+), 87 deletions(-) diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index e71df29441..063053471f 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -229,18 +229,14 @@ Public Class Engine ' ReSharper disable once UnusedMember.Global -- used for Validation Public Shared Function ValidateEngine(engine As Engine, validationContext As ValidationContext) As ValidationResult Dim engineData As CombustionEngineData - Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), - ExecutionModeServiceContainer) - Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) - Dim emsCycleService As EmsCycleServiceContainer = - TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), - EmsCycleServiceContainer) - Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle - Dim gbxtypeService As GearboxTypeServiceContainer = - TryCast(validationContext.GetService(GetType(GearboxTypeServiceContainer)), GearboxTypeServiceContainer) - Dim gbxType As GearboxType? = If(gbxtypeService Is Nothing, GearboxType.MT, gbxtypeService.Type) + Dim modeService As VectoValidationModeServiceContainer = + TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), + VectoValidationModeServiceContainer) + Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) + Dim emsCycle As Boolean = (modeService IsNot Nothing) AndAlso modeService.IsEMSCycle + Dim gbxType As GearboxType? = If(modeService Is Nothing, GearboxType.MT, modeService.GearboxType) Try If mode = ExecutionMode.Declaration Then diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 0b6f6edd2e..48aeba42f9 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -186,14 +186,11 @@ Public Class Gearbox ' ReSharper disable once UnusedMember.Global -- used by Validation Public Shared Function ValidateGearbox(gearbox As Gearbox, validationContext As ValidationContext) As ValidationResult - Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), - ExecutionModeServiceContainer) + Dim modeService As VectoValidationModeServiceContainer = + TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), + VectoValidationModeServiceContainer) Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) - - Dim emsCycleService As EmsCycleServiceContainer = - TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), - EmsCycleServiceContainer) - Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle + Dim emsCycle As Boolean = (modeService IsNot Nothing) AndAlso modeService.IsEMSCycle Dim axlegearData As AxleGearData Dim gearboxData As GearboxData @@ -238,7 +235,8 @@ Public Class Gearbox result.Select(Function(r) r.ErrorMessage + String.Join(Environment.NewLine, r.MemberNames)).ToList()) End If - result = axlegearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type, emsCycle) + result = axlegearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type, + emsCycle) If result.Any() Then Return _ New ValidationResult("Axlegear Configuration is invalid. ", diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb index cf2c922eae..4f02fa7509 100644 --- a/VECTO/Input Files/VectoJob.vb +++ b/VECTO/Input Files/VectoJob.vb @@ -308,8 +308,9 @@ Public Class VectoJob ' ReSharper disable once UnusedMember.Global -- used by Validation Public Shared Function ValidateJob(vectoJob As VectoJob, validationContext As ValidationContext) As ValidationResult - Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), - ExecutionModeServiceContainer) + Dim modeService As VectoValidationModeServiceContainer = + TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), + VectoValidationModeServiceContainer) Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) If mode = ExecutionMode.Engineering AndAlso vectoJob.EngineOnly Then diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 337eebf737..0c3cd37815 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -95,17 +95,12 @@ Public Class Vehicle Dim ptoData As PTOData = Nothing Dim angledriveData As AngledriveData - Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), - ExecutionModeServiceContainer) + Dim modeService As VectoValidationModeServiceContainer = + TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), + VectoValidationModeServiceContainer) Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) - Dim emsCycleService As EmsCycleServiceContainer = - TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), - EmsCycleServiceContainer) - Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle - - Dim gbxtypeService As GearboxTypeServiceContainer = - TryCast(validationContext.GetService(GetType(GearboxTypeServiceContainer)), GearboxTypeServiceContainer) - Dim gbxType As GearboxType? = If(gbxtypeService Is Nothing, Nothing, gbxtypeService.Type) + Dim emsCycle As Boolean = (modeService IsNot Nothing) AndAlso modeService.IsEMSCycle + Dim gbxType As GearboxType? = If(modeService Is Nothing, Nothing, modeService.GearboxType) Try If mode = ExecutionMode.Declaration Then @@ -132,7 +127,8 @@ Public Class Vehicle result.Select(Function(r) r.ErrorMessage + String.Join(Environment.NewLine, r.MemberNames)).ToList()) End If - result = retarderData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) + result = retarderData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, + emsCycle) If result.Any() Then Return _ New ValidationResult("Retarder Configuration is invalid. ", @@ -140,7 +136,8 @@ Public Class Vehicle End If If vehicle.AngledriveType = AngledriveType.SeparateAngledrive Then - result = angledriveData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle) + result = angledriveData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, + emsCycle) If result.Any() Then Return _ New ValidationResult("AngleDrive Configuration is invalid. ", diff --git a/VectoCommon/VectoCommon/Utils/Validation.cs b/VectoCommon/VectoCommon/Utils/Validation.cs index c3a1fa07db..42436a1e9c 100644 --- a/VectoCommon/VectoCommon/Utils/Validation.cs +++ b/VectoCommon/VectoCommon/Utils/Validation.cs @@ -61,9 +61,8 @@ namespace TUGraz.VectoCommon.Utils return new[] { new ValidationResult(string.Format("null value given for {0}", typeof(T))) }; } var context = new ValidationContext(entity); - context.ServiceContainer.AddService(typeof(ExecutionMode), new ExecutionModeServiceContainer(mode)); - context.ServiceContainer.AddService(typeof(GearboxTypeServiceContainer), new GearboxTypeServiceContainer(gbxType)); - context.ServiceContainer.AddService(typeof(EmsCycleServiceContainer), new EmsCycleServiceContainer(emsCycle)); + context.ServiceContainer.AddService(typeof(VectoValidationModeServiceContainer), + new VectoValidationModeServiceContainer(mode, gbxType, emsCycle)); var results = new List<ValidationResult>(); Validator.TryValidateObject(entity, context, results, true); @@ -140,36 +139,20 @@ namespace TUGraz.VectoCommon.Utils } } - public class ExecutionModeServiceContainer + public class VectoValidationModeServiceContainer { - public ExecutionModeServiceContainer(ExecutionMode mode) - { - Mode = mode; - } - public ExecutionMode Mode { get; protected set; } - } + public GearboxType? GearboxType { get; protected set; } + public bool IsEMSCycle { get; protected set; } - public class GearboxTypeServiceContainer - { - public GearboxTypeServiceContainer(GearboxType? type) + public VectoValidationModeServiceContainer(ExecutionMode mode, GearboxType? gbxType, bool isEMSCycle = false) { - Type = type; + Mode = mode; + GearboxType = gbxType; + IsEMSCycle = isEMSCycle; } - - - public GearboxType? Type { get; protected set; } } - public class EmsCycleServiceContainer - { - public EmsCycleServiceContainer(bool isEmsCycle) - { - IsEmsCycle = isEmsCycle; - } - - public bool IsEmsCycle { get; protected set; } - } /// <summary> /// Determines that the attributed object should be validated recursively. @@ -190,14 +173,11 @@ namespace TUGraz.VectoCommon.Utils return ValidationResult.Success; } - var modeService = validationContext.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer; - var mode = modeService != null ? modeService.Mode : ExecutionMode.Declaration; - - var gbxTypeService = validationContext.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer; - var gbxType = gbxTypeService != null ? gbxTypeService.Type : GearboxType.MT; - - var emsTypeService = validationContext.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; - var isEmsCycle = emsTypeService != null && emsTypeService.IsEmsCycle; + var validationService = + validationContext.GetService(typeof(VectoValidationModeServiceContainer)) as VectoValidationModeServiceContainer; + var mode = validationService != null ? validationService.Mode : ExecutionMode.Declaration; + var gbxType = validationService != null ? validationService.GearboxType : GearboxType.MT; + var isEmsCycle = validationService != null && validationService.IsEMSCycle; var enumerable = value as IEnumerable; if (enumerable != null) { @@ -417,11 +397,10 @@ namespace TUGraz.VectoCommon.Utils if (si != null) { _unit = si.GetUnitString(); } - var emsService = validationContext.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; - var emsMode = emsService != null && emsService.IsEmsCycle; - - var modeService = validationContext.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer; - var mode = modeService == null ? (ExecutionMode?)null : modeService.Mode; + var validationService = + validationContext.GetService(typeof(VectoValidationModeServiceContainer)) as VectoValidationModeServiceContainer; + var mode = validationService != null ? validationService.Mode : (ExecutionMode?)null; + var emsMode = validationService != null && validationService.IsEMSCycle; if (!_emsMission.HasValue || _emsMission.Value == emsMode) { if (mode == null) { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs index 64856e1d2b..2f0f733297 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs @@ -77,14 +77,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox // ReSharper disable once UnusedMember.Global -- used via validation public static ValidationResult ValidateGearData(GearData gearData, ValidationContext context) { - var modeService = context.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer; - var mode = modeService == null ? ExecutionMode.Declaration : modeService.Mode; - - var gbxTypeService = context.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer; - var gbxType = gbxTypeService == null ? GearboxType.MT : gbxTypeService.Type; - - var emsTypeService = context.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; - var emsMission = emsTypeService != null && emsTypeService.IsEmsCycle; + var validationService = + context.GetService(typeof(VectoValidationModeServiceContainer)) as VectoValidationModeServiceContainer; + var mode = validationService != null ? validationService.Mode : ExecutionMode.Declaration; + var gbxType = validationService != null ? validationService.GearboxType : GearboxType.MT; + var emsMission = validationService != null && validationService.IsEMSCycle; if (gearData.HasTorqueConverter) { if (gearData.TorqueConverterShiftPolygon == null) { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/ShiftPolygon.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/ShiftPolygon.cs index 9b41a3a89c..3069a63cae 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/ShiftPolygon.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/ShiftPolygon.cs @@ -145,11 +145,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox // ReSharper disable once UnusedMember.Global -- used via validation public static ValidationResult ValidateShiftPolygon(ShiftPolygon shiftPolygon, ValidationContext validationContext) { - var gbxTypeService = validationContext.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer; - var gbxType = gbxTypeService == null ? null : gbxTypeService.Type; + var validationService = + validationContext.GetService(typeof(VectoValidationModeServiceContainer)) as VectoValidationModeServiceContainer; + var gbxType = validationService != null ? validationService.GearboxType : null; - if (gbxType == null || gbxType.Value.AutomaticTransmission()) + if (gbxType == null || gbxType.Value.AutomaticTransmission()) { return ValidationResult.Success; + } return shiftPolygon.Downshift.Pairwise(Tuple.Create) .Any( @@ -182,7 +184,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox // vertical line return double.MaxValue.SI<NewtonMeter>(); } - return VectoMath.Interpolate(section.Item1.AngularSpeed, section.Item2.AngularSpeed, section.Item1.Torque, + return VectoMath.Interpolate(section.Item1.AngularSpeed, section.Item2.AngularSpeed, section.Item1.Torque, section.Item2.Torque, inAngularVelocity); } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs index 7142c1e34a..6cb49c1eff 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs @@ -57,14 +57,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data protected static ExecutionMode GetExecutionMode(ValidationContext context) { - var modeService = context.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer; - return modeService == null ? ExecutionMode.Declaration : modeService.Mode; + var validationService = + context.GetService(typeof(VectoValidationModeServiceContainer)) as VectoValidationModeServiceContainer; + return validationService == null ? ExecutionMode.Declaration : validationService.Mode; } protected static bool GetEmsMode(ValidationContext context) { - var emsService = context.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer; - return emsService != null && emsService.IsEmsCycle; + var validationService = + context.GetService(typeof(VectoValidationModeServiceContainer)) as VectoValidationModeServiceContainer; + return validationService != null && validationService.IsEMSCycle; } } } \ No newline at end of file -- GitLab