Mercurial > pub > bltoolkit
diff Source/Validation/MinValueAttribute.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Validation/MinValueAttribute.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,140 @@ +using System; + +namespace BLToolkit.Validation +{ + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] + public class MinValueAttribute : ValidatorBaseAttribute + { + public MinValueAttribute(object minValue) + : this(minValue, false) + { + } + + public MinValueAttribute(object minValue, string errorMessage) + : this(minValue, false, errorMessage) + { + } + + public MinValueAttribute(object minValue, bool isExclusive) + { + _value = minValue; + _isExclusive = isExclusive; + } + + public MinValueAttribute(object minValue, bool isExclusive, string errorMessage) + : this(minValue, isExclusive) + { + ErrorMessage = errorMessage; + } + + private readonly object _value; + public virtual object GetValue(ValidationContext context) + { + return _value; + } + + private bool _isExclusive; + public bool IsExclusive + { + get { return _isExclusive; } + set { _isExclusive = value; } + } + + public override bool IsValid(ValidationContext context) + { + if (context.IsNull(context)) + return true; + + object contextValue = context.Value; + object testValue = GetValue(context); + + if (contextValue is Int32) + { + Int32 tv = Convert.ToInt32(testValue); + return tv < (Int32)contextValue || !IsExclusive && tv == (Int32)contextValue; + } + + if (contextValue is decimal) + { + decimal tv = Convert.ToDecimal(testValue); + return tv < (decimal)contextValue || !IsExclusive && tv == (decimal)contextValue; + } + + if (contextValue is double) + { + double tv = Convert.ToDouble(testValue); + return tv < (double)contextValue || !IsExclusive && tv == (double)contextValue; + } + + if (contextValue is float) + { + float tv = Convert.ToSingle(testValue); + return tv < (float)contextValue || !IsExclusive && tv == (float)contextValue; + } + + if (contextValue is byte) + { + byte tv = Convert.ToByte(testValue); + return tv < (byte)contextValue || !IsExclusive && tv == (byte)contextValue; + } + + if (contextValue is char) + { + char tv = Convert.ToChar(testValue); + return tv < (char)contextValue || !IsExclusive && tv == (char)contextValue; + } + + if (contextValue is Int16) + { + Int16 tv = Convert.ToInt16(testValue); + return tv < (Int16)contextValue || !IsExclusive && tv == (Int16)contextValue; + } + + if (contextValue is sbyte) + { + sbyte tv = Convert.ToSByte(testValue); + return tv < (sbyte)contextValue || !IsExclusive && tv == (sbyte)contextValue; + } + + if (contextValue is UInt16) + { + UInt16 tv = Convert.ToUInt16(testValue); + return tv < (UInt16)contextValue || !IsExclusive && tv == (UInt16)contextValue; + } + + if (contextValue is UInt32) + { + UInt32 tv = Convert.ToUInt32(testValue); + return tv < (UInt32)contextValue || !IsExclusive && tv == (UInt32)contextValue; + } + + if (contextValue is Int64) + { + Int64 tv = Convert.ToInt64(testValue); + return tv < (Int64)contextValue || !IsExclusive && tv == (Int64)contextValue; + } + + if (contextValue is UInt64) + { + UInt64 tv = Convert.ToUInt64(testValue); + return tv < (UInt64)contextValue || !IsExclusive && tv == (UInt64)contextValue; + } + + return true; + } + + public override string ErrorMessage + { + get { return base.ErrorMessage ?? "Minimum value for '{0}' is {1}{2}."; } + set { base.ErrorMessage = value; } + } + + public override string GetErrorMessage(ValidationContext context) + { + return string.Format(ErrorMessage, + GetPropertyFriendlyName(context), + GetValue(context), + IsExclusive? " exclusive": string.Empty); + } + } +}