248 lines
6.4 KiB
C#
248 lines
6.4 KiB
C#
using System;
|
|
|
|
namespace Csla.Validation
|
|
{
|
|
/// <summary>
|
|
/// Tracks all information for a rule.
|
|
/// </summary>
|
|
internal class RuleMethod : IRuleMethod, IComparable, IComparable<IRuleMethod>
|
|
{
|
|
private RuleHandler _handler;
|
|
private string _ruleName = String.Empty;
|
|
private RuleArgs _args;
|
|
private int _priority;
|
|
|
|
/// <summary>
|
|
/// Returns the name of the method implementing the rule
|
|
/// and the property, field or column name to which the
|
|
/// rule applies.
|
|
/// </summary>
|
|
public override string ToString()
|
|
{
|
|
return _ruleName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the priority of the rule method.
|
|
/// </summary>
|
|
/// <value>The priority value</value>
|
|
/// <remarks>
|
|
/// Priorities are processed in descending
|
|
/// order, so priority 0 is processed
|
|
/// before priority 1, etc.
|
|
/// </remarks>
|
|
public int Priority
|
|
{
|
|
get { return _priority; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the name of the rule.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The rule's name must be unique and is used
|
|
/// to identify a broken rule in the BrokenRules
|
|
/// collection.
|
|
/// </remarks>
|
|
public string RuleName
|
|
{
|
|
get { return _ruleName; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the name of the field, property or column
|
|
/// to which the rule applies.
|
|
/// </summary>
|
|
public RuleArgs RuleArgs
|
|
{
|
|
get { return _args; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates and initializes the rule.
|
|
/// </summary>
|
|
/// <param name="handler">The address of the method implementing the rule.</param>
|
|
/// <param name="args">A RuleArgs object.</param>
|
|
public RuleMethod(RuleHandler handler, RuleArgs args)
|
|
{
|
|
_handler = handler;
|
|
_args = args;
|
|
_ruleName = string.Format(@"rule://{0}/{1}", _handler.Method.Name, _args.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates and initializes the rule.
|
|
/// </summary>
|
|
/// <param name="handler">The address of the method implementing the rule.</param>
|
|
/// <param name="args">A RuleArgs object.</param>
|
|
/// <param name="priority">
|
|
/// Priority for processing the rule (smaller numbers have higher priority, default=0).
|
|
/// </param>
|
|
public RuleMethod(RuleHandler handler, RuleArgs args, int priority)
|
|
: this(handler, args)
|
|
{
|
|
_priority = priority;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Invokes the rule to validate the data.
|
|
/// </summary>
|
|
/// <returns>
|
|
/// <see langword="true" /> if the data is valid,
|
|
/// <see langword="false" /> if the data is invalid.
|
|
/// </returns>
|
|
public bool Invoke(object target)
|
|
{
|
|
return _handler.Invoke(target, _args);
|
|
}
|
|
|
|
#region IComparable
|
|
|
|
int IComparable.CompareTo(object obj)
|
|
{
|
|
return Priority.CompareTo(((IRuleMethod)obj).Priority);
|
|
}
|
|
|
|
int IComparable<IRuleMethod>.CompareTo(IRuleMethod other)
|
|
{
|
|
return Priority.CompareTo(other.Priority);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Tracks all information for a rule.
|
|
/// </summary>
|
|
/// <typeparam name="T">Type of the target object.</typeparam>
|
|
/// <typeparam name="R">Type of the arguments parameter.</typeparam>
|
|
internal class RuleMethod<T, R>
|
|
: IRuleMethod, IComparable, IComparable<IRuleMethod>
|
|
where R : RuleArgs
|
|
{
|
|
private RuleHandler<T, R> _handler;
|
|
private string _ruleName = string.Empty;
|
|
private R _args;
|
|
private int _priority;
|
|
|
|
/// <summary>
|
|
/// Returns the name of the method implementing the rule
|
|
/// and the property, field or column name to which the
|
|
/// rule applies.
|
|
/// </summary>
|
|
public override string ToString()
|
|
{
|
|
return _ruleName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the priority of the rule method.
|
|
/// </summary>
|
|
/// <value>The priority value</value>
|
|
/// <remarks>
|
|
/// Priorities are processed in descending
|
|
/// order, so priority 0 is processed
|
|
/// before priority 1, etc.
|
|
/// </remarks>
|
|
public int Priority
|
|
{
|
|
get { return _priority; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the name of the rule.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The rule's name must be unique and is used
|
|
/// to identify a broken rule in the BrokenRules
|
|
/// collection.
|
|
/// </remarks>
|
|
public string RuleName
|
|
{
|
|
get {return _ruleName;}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the name of the field, property or column
|
|
/// to which the rule applies.
|
|
/// </summary>
|
|
RuleArgs IRuleMethod.RuleArgs
|
|
{
|
|
get {return this.RuleArgs;}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the name of the field, property or column
|
|
/// to which the rule applies.
|
|
/// </summary>
|
|
public R RuleArgs
|
|
{
|
|
get { return _args; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates and initializes the rule.
|
|
/// </summary>
|
|
/// <param name="handler">The address of the method implementing the rule.</param>
|
|
/// <param name="args">A RuleArgs object.</param>
|
|
public RuleMethod(RuleHandler<T, R> handler, R args)
|
|
{
|
|
_handler = handler;
|
|
_args = args;
|
|
_ruleName = string.Format(@"rule://{0}/{1}", _handler.Method.Name, _args.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates and initializes the rule.
|
|
/// </summary>
|
|
/// <param name="handler">The address of the method implementing the rule.</param>
|
|
/// <param name="args">A RuleArgs object.</param>
|
|
/// <param name="priority">
|
|
/// Priority for processing the rule (smaller numbers have higher priority, default=0).
|
|
/// </param>
|
|
public RuleMethod(RuleHandler<T, R> handler, R args, int priority)
|
|
: this(handler, args)
|
|
{
|
|
_priority = priority;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Invokes the rule to validate the data.
|
|
/// </summary>
|
|
/// <returns>True if the data is valid, False if the data is invalid.</returns>
|
|
bool IRuleMethod.Invoke(object target)
|
|
{
|
|
return this.Invoke((T)target);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Invokes the rule to validate the data.
|
|
/// </summary>
|
|
/// <returns>
|
|
/// <see langword="true" /> if the data is valid,
|
|
/// <see langword="false" /> if the data is invalid.
|
|
/// </returns>
|
|
public bool Invoke(T target)
|
|
{
|
|
return _handler.Invoke(target, _args);
|
|
}
|
|
|
|
#region IComparable
|
|
|
|
int IComparable.CompareTo(object obj)
|
|
{
|
|
return Priority.CompareTo(((IRuleMethod)obj).Priority);
|
|
}
|
|
|
|
int IComparable<IRuleMethod>.CompareTo(IRuleMethod other)
|
|
{
|
|
return Priority.CompareTo(other.Priority);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|