94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace Csla.Validation
 | 
						|
{
 | 
						|
  /// <summary>
 | 
						|
  /// Maintains rule methods for a business object
 | 
						|
  /// or business object type.
 | 
						|
  /// </summary>
 | 
						|
  internal class ValidationRulesManager
 | 
						|
  {
 | 
						|
    private Dictionary<string, RulesList> _rulesList;
 | 
						|
 | 
						|
    internal Dictionary<string, RulesList> RulesDictionary
 | 
						|
    {
 | 
						|
      get
 | 
						|
      {
 | 
						|
        if (_rulesList == null)
 | 
						|
          _rulesList = new Dictionary<string, RulesList>();
 | 
						|
        return _rulesList;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    internal RulesList GetRulesForProperty(
 | 
						|
      string propertyName,
 | 
						|
      bool createList)
 | 
						|
    {
 | 
						|
      // get the list (if any) from the dictionary
 | 
						|
      RulesList list = null;
 | 
						|
      if (RulesDictionary.ContainsKey(propertyName))
 | 
						|
        list = RulesDictionary[propertyName];
 | 
						|
 | 
						|
      if (createList && list == null)
 | 
						|
      {
 | 
						|
        // there is no list for this name - create one
 | 
						|
        list = new RulesList();
 | 
						|
        RulesDictionary.Add(propertyName, list);
 | 
						|
      }
 | 
						|
      return list;
 | 
						|
    }
 | 
						|
 | 
						|
    #region Adding Rules
 | 
						|
 | 
						|
    public void AddRule(RuleHandler handler, RuleArgs args, int priority)
 | 
						|
    {
 | 
						|
      // get the list of rules for the property
 | 
						|
      List<IRuleMethod> list = GetRulesForProperty(args.PropertyName, true).GetList(false);
 | 
						|
 | 
						|
      // we have the list, add out new rule
 | 
						|
      list.Add(new RuleMethod(handler, args, priority));
 | 
						|
    }
 | 
						|
 | 
						|
    public void AddRule<T, R>(RuleHandler<T, R> handler, R args, int priority) where R : RuleArgs
 | 
						|
    {
 | 
						|
      // get the list of rules for the property
 | 
						|
      List<IRuleMethod> list = GetRulesForProperty(args.PropertyName, true).GetList(false);
 | 
						|
 | 
						|
      // we have the list, add out new rule
 | 
						|
      list.Add(new RuleMethod<T, R>(handler, args, priority));
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region Adding Dependencies
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Adds a property to the list of dependencies for
 | 
						|
    /// the specified property
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="propertyName">
 | 
						|
    /// The name of the property.
 | 
						|
    /// </param>
 | 
						|
    /// <param name="dependantPropertyName">
 | 
						|
    /// The name of the dependant property.
 | 
						|
    /// </param>
 | 
						|
    /// <remarks>
 | 
						|
    /// When rules are checked for propertyName, they will
 | 
						|
    /// also be checked for any dependant properties associated
 | 
						|
    /// with that property.
 | 
						|
    /// </remarks>
 | 
						|
    public void AddDependantProperty(string propertyName, string dependantPropertyName)
 | 
						|
    {
 | 
						|
      // get the list of rules for the property
 | 
						|
      List<string> list = GetRulesForProperty(propertyName, true).GetDependancyList(true);
 | 
						|
 | 
						|
      // we have the list, add the dependency
 | 
						|
      list.Add(dependantPropertyName);
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
  }
 | 
						|
}
 |