From 3ca18bc7260286b880ac3da7c24068873fc24d0b Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 31 Aug 2016 15:51:59 +0200 Subject: [PATCH] extend sirange class to allow different ranges depending on the execution mode; change valid range for gross vehicle weight depending on declaration or engineering mode --- VectoCommon/VectoCommon/Utils/Validation.cs | 49 ++++++++++++++++++- .../SimulationComponent/Data/VehicleData.cs | 2 +- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/VectoCommon/VectoCommon/Utils/Validation.cs b/VectoCommon/VectoCommon/Utils/Validation.cs index 489976cea7..860cb37503 100644 --- a/VectoCommon/VectoCommon/Utils/Validation.cs +++ b/VectoCommon/VectoCommon/Utils/Validation.cs @@ -194,8 +194,22 @@ namespace TUGraz.VectoCommon.Utils /// <summary> /// Attribute which validates the Min-Max Range of an SI Object. /// </summary> + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)] public class SIRangeAttribute : RangeAttribute { + private ExecutionMode? _mode; + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> + public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode) : base(minimum, maximum) + { + _mode = mode; + } + /// <summary> /// Checks the Min-Max Range of SI Objects. /// </summary> @@ -208,6 +222,18 @@ namespace TUGraz.VectoCommon.Utils /// </summary> /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> + public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode) : base(minimum, maximum) + { + _mode = mode; + } + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> public SIRangeAttribute(double minimum, double maximum) : base(minimum, maximum) {} /// <summary> @@ -215,6 +241,18 @@ namespace TUGraz.VectoCommon.Utils /// </summary> /// <param name="minimum">The minimum.</param> /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> + public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode) : base(minimum.Value(), maximum.Value()) + { + _mode = mode; + } + + /// <summary> + /// Checks the Min-Max Range of SI Objects. + /// </summary> + /// <param name="minimum">The minimum.</param> + /// <param name="maximum">The maximum.</param> + /// <param name="mode">if specified the validation is only performed in the corresponding mode</param> public SIRangeAttribute(SI minimum, SI maximum) : base(minimum.Value(), maximum.Value()) {} /// <summary> @@ -228,7 +266,16 @@ namespace TUGraz.VectoCommon.Utils protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var si = value as SI; - return base.IsValid(si != null ? si.Value() : value, validationContext); + + var modeService = validationContext.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer; + var mode = modeService == null ? (ExecutionMode?)null : modeService.Mode; + if (mode == null) { + return base.IsValid(si != null ? si.Value() : value, validationContext); + } + if (_mode == null || (_mode != null && (_mode.Value == mode))) { + return base.IsValid(si != null ? si.Value() : value, validationContext); + } + return ValidationResult.Success; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs index 4c6e6caed1..70cb17b7a1 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs @@ -85,7 +85,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// <summary> /// The Gross Vehicle Weight of the Vehicle. /// </summary> - [Required, SIRange(3500, 40000)] + [Required, SIRange(3500, 40000, ExecutionMode.Declaration), SIRange(0, 1000000, ExecutionMode.Engineering)] public Kilogram GrossVehicleWeight { get; internal set; } /// <summary> -- GitLab