annotate Source/Validation/MaxValueAttribute.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 namespace BLToolkit.Validation
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 public class MaxValueAttribute : ValidatorBaseAttribute
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 public MaxValueAttribute(object maxValue)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 : this(maxValue, false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public MaxValueAttribute(object maxValue, string errorMessage)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 : this(maxValue, false, errorMessage)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public MaxValueAttribute(object maxValue, bool isExclusive)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 _value = maxValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 _isExclusive = isExclusive;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public MaxValueAttribute(object maxValue, bool isExclusive, string errorMessage)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 : this(maxValue, isExclusive)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 ErrorMessage = errorMessage;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 private readonly object _value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public virtual object GetValue(ValidationContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 return _value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 private bool _isExclusive;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public bool IsExclusive
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 get { return _isExclusive; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 set { _isExclusive = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public override bool IsValid(ValidationContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 if (context.IsNull(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 object contextValue = context.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 object testValue = GetValue(context);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 if (contextValue is Int32)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 Int32 tv = Convert.ToInt32(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 return tv > (Int32)contextValue || !IsExclusive && tv == (Int32)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 if (contextValue is decimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 decimal tv = Convert.ToDecimal(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 return tv > (decimal)contextValue || !IsExclusive && tv == (decimal)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 if (contextValue is double)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 double tv = Convert.ToDouble(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 return tv > (double)contextValue || !IsExclusive && tv == (double)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 if (contextValue is float)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 float tv = Convert.ToSingle(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 return tv > (float)contextValue || !IsExclusive && tv == (float)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 if (contextValue is byte)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 byte tv = Convert.ToByte(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 return tv > (byte)contextValue || !IsExclusive && tv == (byte)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 if (contextValue is char)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 char tv = Convert.ToChar(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 return tv > (char)contextValue || !IsExclusive && tv == (char)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 if (contextValue is Int16)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 Int16 tv = Convert.ToInt16(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 return tv > (Int16)contextValue || !IsExclusive && tv == (Int16)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 if (contextValue is sbyte)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 sbyte tv = Convert.ToSByte(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 return tv > (sbyte)contextValue || !IsExclusive && tv == (sbyte)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 if (contextValue is UInt16)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 UInt16 tv = Convert.ToUInt16(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 return tv > (UInt16)contextValue || !IsExclusive && tv == (UInt16)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 if (contextValue is UInt32)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 UInt32 tv = Convert.ToUInt32(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 return tv > (UInt32)contextValue || !IsExclusive && tv == (UInt32)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 if (contextValue is Int64)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 Int64 tv = Convert.ToInt64(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 return tv > (Int64)contextValue || !IsExclusive && tv == (Int64)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 if (contextValue is UInt64)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 UInt64 tv = Convert.ToUInt64(testValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 return tv > (UInt64)contextValue || !IsExclusive && tv == (UInt64)contextValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 public override string ErrorMessage
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 get { return base.ErrorMessage ?? "Maximum value for '{0}' is {1}{2}."; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 set { base.ErrorMessage = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 public override string GetErrorMessage(ValidationContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 return string.Format(ErrorMessage,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 GetPropertyFriendlyName(context),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 GetValue(context),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 IsExclusive? " exclusive": string.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }