File: cdf\src\NetFx40\Tools\System.Activities.Presentation\System\Activities\Presentation\Base\Core\Metadata\AttributeTableValidationException.cs
Project: ndp\System.Data.csproj (System.Data)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.Activities.Presentation.Metadata 
{
 
    using System;
    using System.Collections.Generic;
    using System.Runtime.Serialization;
    using System.Security.Permissions;
    using System.Activities.Presentation;
 
    // <summary>
    // This exception may be thrown from the ValidateTable method on
    // AttributeTable.  It will be thrown if the metadata provided in
    // the table does not match properties, methods and events on real
    // types.
    // </summary>
    [Serializable]
    public class AttributeTableValidationException : Exception 
    {
        private string[] _validationErrors;
 
        // <summary>
        // Creates a new AttributeTableValidationException.
        // </summary>
        public AttributeTableValidationException() : base() 
        {
        }
 
        // <summary>
        // Creates a new AttributeTableValidationException.
        // </summary>
        // <param name="message"></param>
        public AttributeTableValidationException(string message)
            : base(message) 
        {
        }
 
        // <summary>
        // Creates a new AttributeTableValidationException.
        // </summary>
        // <param name="message">The message provided to the user.</param>
        // <param name="inner">An optional inner exception.</param>
        public AttributeTableValidationException(string message, Exception inner)
            : base(message, inner) 
        {
        }
 
        // <summary>
        // Creates a new AttributeTableValidationException.
        // </summary>
        // <param name="message">The message provided to the user.</param>
        // <param name="validationErrors">Zero or more errors that occurred during validation.</param>
        public AttributeTableValidationException(string message, IEnumerable<string> validationErrors)
            : base(message) 
        {
            _validationErrors = CreateArray(validationErrors);
        }
 
        // <summary>
        // Creates a new AttributeTableValidationException.
        // </summary>
        // <param name="message">The message provided to the user.</param>
        // <param name="inner">An optional inner exception.</param>
        // <param name="validationErrors">Zero or more errors that occurred during validation.</param>
        public AttributeTableValidationException(string message, Exception inner, IEnumerable<string> validationErrors)
            : base(message, inner) 
        {
            _validationErrors = CreateArray(validationErrors);
        }
 
        // <summary>
        // Used during serialization to deserialize an exception.
        // </summary>
        // <param name="info">The serialization store.</param>
        // <param name="context">The serialization context.</param>
        protected AttributeTableValidationException(SerializationInfo info, StreamingContext context)
            : base(info, context) 
        {
            if (info == null) 
            {
                throw FxTrace.Exception.ArgumentNull("info");
            }
            _validationErrors = (string[])info.GetValue("ValidationErrors", typeof(string[]));
        }
 
        // <summary>
        // Returns an enumeration of validation errors.
        // </summary>
        public IEnumerable<string> ValidationErrors 
        {
            get { return _validationErrors; }
        }
 
        //
        // Helper method to create an array from an enumeration.
        //
        private static string[] CreateArray(IEnumerable<string> validationErrors) {
 
            string[] array;
 
            if (validationErrors != null) 
            {
                int cnt = 0;
                IEnumerator<string> e = validationErrors.GetEnumerator();
                while (e.MoveNext()) 
                {
                    cnt++;
                }
 
                e.Reset();
 
                array = new string[cnt];
 
                cnt = 0;
 
                while (e.MoveNext()) 
                {
                    array[cnt++] = e.Current;
                }
            }
            else 
            {
                array = new string[0];
            }
 
            return array;
        }
 
        // <summary>
        // Override of Exception's GetObjectData that is used to perform serialization.
        // </summary>
        // <param name="info">The serialization store.</param>
        // <param name="context">The serialization context.</param>
        public override void GetObjectData(SerializationInfo info, StreamingContext context) 
        {
            if (info == null) 
            {
                throw FxTrace.Exception.ArgumentNull("info");
            }
            base.GetObjectData(info, context);
            info.AddValue("ValidationErrors", _validationErrors);
        }
    }
}