/********************************************************************
* FulcrumWeb RAD Framework - Fulcrum of your business *
* Copyright (c) 2002-2009 FulcrumWeb, ALL RIGHTS RESERVED *
* *
* THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED *
* FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE *
* COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE *
* AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT *
* AND PERMISSION FROM FULCRUMWEB. CONSULT THE END USER LICENSE *
* AGREEMENT FOR INFORMATION ON ADDITIONAL RESTRICTIONS. *
********************************************************************/
using System;
using Framework.Silverlight.Client.AppServer;
namespace Framework.Silverlight.Client
{
/// <summary>
/// Provides a base logic for attribute validation.
/// </summary>
public abstract class CxBaseAttributeValidator
{
/// <summary>
/// Type of attribute metadata that should be validate.
/// </summary>
public abstract string TargetAttributeType { get; }
//----------------------------------------------------------------------------
/// <summary>
/// Validates the value usings corresponding attribute metadata.
/// </summary>
/// <param name="attributeMetadata">The attribute metadata that will be
/// used in validation.</param>
/// <param name="value">The value to validation.</param>
public virtual void Validate(CxClientAttributeMetadata attributeMetadata, object value)
{
ValidateOnNullable(attributeMetadata, value);
}
//----------------------------------------------------------------------------
/// <summary>
/// Validates the value usings the 'Nullable' property in corresponding attribute metadata.
/// </summary>
/// <param name="attributeMetadata">The attribute metadata that will be
/// used in validation.</param>
/// <param name="value">The value to validation.</param>
/// <returns></returns>
protected virtual bool ValidateOnNullable(CxClientAttributeMetadata attributeMetadata, object value)
{
if(!attributeMetadata.Nullable && value == null)
{
//TODO: multilingual
throw new ExAttributeValidationException("The attribute '{0}' can not be null.",
attributeMetadata.FormCaption);
}
return true;
}
//----------------------------------------------------------------------------
/// <summary>
/// Validates the string value usings the 'MaxLength' property in corresponding attribute metadata.
/// </summary>
/// <param name="attributeMetadata">The attribute metadata that will be
/// used in validation.</param>
/// <param name="value">The string value to validation.</param>
/// <returns></returns>
protected virtual bool ValidateOnStringMaxLength(CxClientAttributeMetadata attributeMetadata, string value)
{
if (value == null)
{
return true;
}
if (attributeMetadata.MaxLength > 0 && value.Length > attributeMetadata.MaxLength)
{
//TODO: multilingual
throw new ExAttributeValidationException(
@"The length of attribute '{0}'
can not be more then {1}.",
attributeMetadata.FormCaption, attributeMetadata.MaxLength);
}
return true;
}
//----------------------------------------------------------------------------
/// <summary>
/// Validates the range of numeric value usings the 'MaxLength' property in corresponding attribute metadata.
/// </summary>
/// <param name="attributeMetadata">The attribute metadata that will be
/// used in validation.</param>
/// <param name="value">The numeric value to validation.</param>
/// <returns></returns>
protected virtual bool ValidateOnRange(CxClientAttributeMetadata attributeMetadata, decimal value)
{
if (value > Convert.ToDecimal( attributeMetadata.MaxValue) ||
value < Convert.ToDecimal(attributeMetadata.MinValue))
{
//TODO: multilingual
throw new ExAttributeValidationException(
"@The range of attribute '{0}' should be between {1} and {2}.",
attributeMetadata.FormCaption,
attributeMetadata.MinValue,
attributeMetadata.MaxValue);
}
return true;
}
}
}