Mercurial > pub > bltoolkit
comparison Source/Validation/Validator.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Collections.Generic; | |
3 using System.ComponentModel; | |
4 | |
5 using BLToolkit.Reflection; | |
6 | |
7 namespace BLToolkit.Validation | |
8 { | |
9 public class Validator | |
10 { | |
11 #region Validate | |
12 | |
13 public static void Validate(ValidationContext context) | |
14 { | |
15 foreach (MemberAccessor ma in context.TypeAccessor) | |
16 { | |
17 var attrs = ma.GetAttributes<ValidatorBaseAttribute>(); | |
18 | |
19 if (attrs == null) | |
20 continue; | |
21 | |
22 context.MemberAccessor = ma; | |
23 context.Value = ma.GetValue(context.Object); | |
24 | |
25 for (var i = 0; i < attrs.Length; i++) | |
26 { | |
27 var attr = attrs[i]; | |
28 if (attr.IsValid(context) == false) | |
29 throw new ValidationException(attr.GetErrorMessage(context)); | |
30 } | |
31 } | |
32 } | |
33 | |
34 public static void Validate(object obj, ValidationContext.IsNullHandler isNull) | |
35 { | |
36 Validate(InitContext(null, obj, null, isNull)); | |
37 } | |
38 | |
39 public static void Validate(object obj) | |
40 { | |
41 Validate(obj, null); | |
42 } | |
43 | |
44 #endregion | |
45 | |
46 #region Protected Members | |
47 | |
48 private static bool IsNullInternal(ValidationContext context) | |
49 { | |
50 if (context.Value == null) | |
51 return true; | |
52 | |
53 if (context.NullValue is DBNull) | |
54 return false; | |
55 | |
56 return context.NullValue.Equals(context.Value); | |
57 } | |
58 | |
59 public static ValidationContext InitContext( | |
60 ValidationContext context, | |
61 object obj, | |
62 PropertyDescriptor pd, | |
63 ValidationContext.IsNullHandler isNull) | |
64 { | |
65 if (context == null) | |
66 context = new ValidationContext(); | |
67 | |
68 context.Object = obj; | |
69 context.IsNull = isNull ?? new ValidationContext.IsNullHandler(IsNullInternal); | |
70 context.PropertyDescriptor = pd; | |
71 | |
72 return context; | |
73 } | |
74 | |
75 #endregion | |
76 | |
77 #region IsValid | |
78 | |
79 public static bool IsValid(ValidationContext context, string fieldName) | |
80 { | |
81 ValidatorBaseAttribute[] attrs = null; | |
82 object value = null; | |
83 | |
84 #if !SILVERLIGHT | |
85 | |
86 if (context.PropertyDescriptor != null) | |
87 { | |
88 value = context.PropertyDescriptor.GetValue(context.Object); | |
89 | |
90 List<ValidatorBaseAttribute> list = null; | |
91 | |
92 foreach (var o in context.PropertyDescriptor.Attributes) | |
93 { | |
94 if (o is ValidatorBaseAttribute) | |
95 { | |
96 if (list == null) | |
97 list = new List<ValidatorBaseAttribute>(); | |
98 | |
99 list.Add((ValidatorBaseAttribute)o); | |
100 } | |
101 } | |
102 | |
103 if (list != null) | |
104 attrs = list.ToArray(); | |
105 } | |
106 else | |
107 | |
108 #endif | |
109 | |
110 { | |
111 context.MemberAccessor = context.TypeAccessor[fieldName]; | |
112 | |
113 if (context.MemberAccessor != null) | |
114 { | |
115 value = context.MemberAccessor.GetValue(context.Object); | |
116 attrs = context.MemberAccessor.GetAttributes<ValidatorBaseAttribute>(); | |
117 } | |
118 } | |
119 | |
120 if (attrs != null) | |
121 { | |
122 context.Value = value; | |
123 | |
124 for (var i = 0; i < attrs.Length; i++) | |
125 { | |
126 if (!attrs[i].IsValid(context)) | |
127 return false; | |
128 } | |
129 } | |
130 | |
131 return true; | |
132 } | |
133 | |
134 public static bool IsValid(object obj, string fieldName, ValidationContext.IsNullHandler isNull) | |
135 { | |
136 return IsValid(InitContext(null, obj, null, isNull), fieldName); | |
137 } | |
138 | |
139 #if !SILVERLIGHT | |
140 | |
141 public static bool IsValid(object obj, PropertyDescriptor pd, ValidationContext.IsNullHandler isNull) | |
142 { | |
143 return IsValid(InitContext(null, obj, pd, isNull), pd.Name); | |
144 } | |
145 | |
146 public static bool IsValid(object obj, PropertyDescriptor pd) | |
147 { | |
148 return IsValid(obj, pd, null); | |
149 } | |
150 | |
151 #endif | |
152 | |
153 public static bool IsValid(object obj, string fieldName) | |
154 { | |
155 return IsValid(obj, fieldName, null); | |
156 } | |
157 | |
158 #endregion | |
159 | |
160 #region GetErrorMessages | |
161 | |
162 public static string[] GetErrorMessages(ValidationContext context, string fieldName) | |
163 { | |
164 context.MemberAccessor = context.TypeAccessor[fieldName]; | |
165 | |
166 if (context.MemberAccessor != null) | |
167 { | |
168 var messages = new List<string>(); | |
169 var attrs = context.MemberAccessor.GetAttributes<ValidatorBaseAttribute>(); | |
170 | |
171 if (attrs != null) | |
172 { | |
173 context.Value = context.MemberAccessor.GetValue(context.Object); | |
174 | |
175 for (var i = 0; i < attrs.Length; i++) | |
176 messages.Add(attrs[i].GetErrorMessage(context)); | |
177 | |
178 return messages.ToArray(); | |
179 } | |
180 } | |
181 | |
182 return new string[0]; | |
183 } | |
184 | |
185 public static string[] GetErrorMessages( | |
186 object obj, string fieldName, ValidationContext.IsNullHandler isNull) | |
187 { | |
188 return GetErrorMessages(InitContext(null, obj, null, isNull), fieldName); | |
189 } | |
190 | |
191 #if !SILVERLIGHT | |
192 | |
193 public static string[] GetErrorMessages(object obj, PropertyDescriptor pd, ValidationContext.IsNullHandler isNull) | |
194 { | |
195 return GetErrorMessages(InitContext(null, obj, pd, isNull), pd.Name); | |
196 } | |
197 | |
198 public static string[] GetErrorMessages(object obj, PropertyDescriptor pd) | |
199 { | |
200 return GetErrorMessages(obj, pd, null); | |
201 } | |
202 | |
203 #endif | |
204 | |
205 public static string[] GetErrorMessages(object obj, string fieldName) | |
206 { | |
207 return GetErrorMessages(obj, fieldName, null); | |
208 } | |
209 | |
210 #endregion | |
211 } | |
212 } |