using System; using System.Collections.Generic; using System.Linq; using System.Text; using Spring.Validation; using Spring.Validation.Config; using Spring.Validation.Actions; using Spring.Validation.Validators; using Spring.Objects.Factory; using System.Reflection; using System.Text.RegularExpressions; using Sleis.Utility; namespace Sleis.Validation.Spring { public class CustomValidator : BaseValidator, IInitializingObject, IObjectValidator { new public virtual void AfterPropertiesSet() { base.AfterPropertiesSet(); } public IList Validate(object obj) { Log.DebugFormat("Method: {0} Arg: {1}", MethodBase.GetCurrentMethod(), obj); ArgumentValidationUtility.ThrowOnNull(obj, "Null obj"); IList> list = obj as IList>; if (list == null) { throw new InvalidCastException("obj not IList"); } IList errors = new List(); foreach (DataFieldValueItem def in list) { if (String.IsNullOrEmpty(def.Value)) { if (def.Definition.PublicStyle == FieldStyle.Optional) { errors.Add(new ValidationException(ValidationErrorType.Required, "{0} is required", def.Definition.Name)); } } else { if (String.IsNullOrEmpty(def.Definition.FormatExpression)) { throw new ArgumentNullException("Null Expression"); } Match match = Regex.Match(def.Value, def.Definition.FormatExpression); if (!match.Success) { errors.Add(new ValidationException(ValidationErrorType.Format, "{0} is an invalid format. (Required: {1} Value: {2})", def.Definition.Name, def.Definition.FormatExpression, def.Value)); } } } return errors; } } }