namespace System.Web.DynamicData {
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.ComponentModel;
    using System.Diagnostics.CodeAnalysis;    
    using System.Security.Permissions;    

    /// <summary>
    /// Represents a collectin of DataControlReferences
    /// </summary>
    public class DataControlReferenceCollection : Collection<DataControlReference> {               
        public DataControlReferenceCollection(DynamicDataManager owner) {
            if (owner == null) {
                throw new ArgumentNullException("owner");
            }

            Owner = owner;
        }

        public DynamicDataManager Owner {
            get;
            private set;
        }

        internal void Initialize() {
            foreach (DataControlReference reference in this) {
                reference.Owner = Owner;
            }
        }

        [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
        protected override void SetItem(int index, DataControlReference item) {
            item.Owner = Owner;
            base.SetItem(index, item);
        }

        [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
        protected override void InsertItem(int index, DataControlReference item) {
            item.Owner = Owner;
            base.InsertItem(index, item);
        }

        [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
        protected override void RemoveItem(int index) {
            this[index].Owner = null;
            base.RemoveItem(index);
        }
    }
}