Business Logic Toolkit for .NET
www.bltoolkit.net
|  Home   |  Download   |  Documentation   |  Discussions   |  License   |

  Source.Validation.ValidatorBaseAttribute.cs

 
using System;
using System.Reflection;
using System.ComponentModel;

namespace BLToolkit.Validation
{
    public abstract class ValidatorBaseAttribute : Attribute
    {
        protected ValidatorBaseAttribute()
        {
        }

        protected ValidatorBaseAttribute(string errorMessage)
        {
            _errorMessage = errorMessage;
        }

        private        string _errorMessage;
        public virtual string  ErrorMessage
        {
            get { return _errorMessage;  }
            set { _errorMessage = value; }
        }

        public abstract bool IsValid(ValidationContext context);

        public virtual string GetErrorMessage(ValidationContext context)
        {
            return string.Format(ErrorMessage, GetPropertyFriendlyName(context));
        }

        protected virtual string GetPropertyFriendlyName(ValidationContext context)
        {
            MemberInfo mi        = context.MemberInfo;
            string     className = mi.DeclaringType.Name;
            string     fieldName = mi.Name;

            // Get class name.
            //
            object[] attrs = mi.DeclaringType.GetCustomAttributes(typeof(FriendlyNameAttribute), true);

            if (attrs.Length > 0)
                className = ((FriendlyNameAttribute)attrs[0]).Name;
            else
            {
                attrs = mi.DeclaringType.GetCustomAttributes(typeof(DisplayNameAttribute), true);

                if (attrs.Length > 0)
                    className = ((DisplayNameAttribute)attrs[0]).DisplayName;
            }

            // Get field name.
            //
            attrs = mi.GetCustomAttributes(typeof(FriendlyNameAttribute), true);

            if (attrs.Length > 0)
                fieldName = ((FriendlyNameAttribute)attrs[0]).Name;
            else
            {
                attrs = mi.GetCustomAttributes(typeof(DisplayNameAttribute), true);

                if (attrs.Length > 0)
                    fieldName = ((DisplayNameAttribute)attrs[0]).DisplayName;
            }

            return string.IsNullOrEmpty(className)? fieldName: className + "." + fieldName;
        }
    }
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net