root/StructuredWeb/StructuredWeb/Validation/ValidationFramework/ValidationFactory.cs

User picture

Author: marisic.net

Revision: 112 («Previous)


File Size: 1.79 KB

(February 11, 2009 19:04 UTC) Over 3 years ago


  

 
Show/hide line numbers
#region Using Statements

using System;
using System.Collections.Generic;
using StructuredWeb.ValidationFramework.Interfaces;
using StructuredWeb.ValidationFramework.Result;
using StructureMap;

#endregion

namespace StructuredWeb.ValidationFramework
{
    public static class ValidationFactory
    {
        /// <summary>
        /// Validates the specified object.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj">The object.</param>
        /// <returns></returns>
        public static ValidationResult Validate<T>(T obj)
        {
            try
            {
                var validator = ObjectFactory.GetInstance<IValidator<T>>();
                return validator.Validate(obj);
            }
            catch (Exception ex)
            {
                var messages = new List<ValidationMessage> {new ValidationMessage {Message = string.Format("Error validating {0}", obj)}};

                messages.AddRange(FlattenError(ex));

                var result = new ValidationResult {Messages = messages};
                return result;
            }
        }

        /// <summary>
        /// Flattens the error.
        /// </summary>
        /// <param name="exception">The exception.</param>
        /// <returns></returns>
        private static IEnumerable<ValidationMessage> FlattenError(Exception exception)
        {
            var messages = new List<ValidationMessage>();
            var currentException = exception;

            do
            {
                messages.Add(new ValidationMessage {Message = exception.Message});
                currentException = currentException.InnerException;
            } while (currentException != null);

            return messages;
        }
    }
}