view Chronosv2/source/Configuration/GenericElementCollection.cs @ 10:443821e55f06

Initial cleaned up add from Codeplex files
author stevenh7776 stevenhollidge@hotmail.com
date Tue, 21 Feb 2012 17:25:44 +0700
parents
children 09d18d6e5f40
line wrap: on
line source

using System.Configuration;

namespace Chronos.Configuration
{
    /// <summary>
    /// http://utahdnug.org/blogs/josh/archive/2007/08/21/generic-configurationelementcollection.aspx
    /// </summary>
    /// <typeparam name="K"></typeparam>
    /// <typeparam name="V"></typeparam>
    public abstract class GenericElementCollection<K, V>
        : ConfigurationElementCollection where V : ConfigurationElement, new()
    {
        #region · Properties ·

        /// <summary>
        /// Gets the type of the <see cref="T:System.Configuration.ConfigurationElementCollection"/>.
        /// </summary>
        /// <value></value>
        /// <returns>
        /// The <see cref="T:System.Configuration.ConfigurationElementCollectionType"/> of this collection.
        /// </returns>
        public abstract override ConfigurationElementCollectionType CollectionType
        {
            get;
        }

        /// <summary>
        /// Gets the name used to identify this collection of elements in the configuration file when overridden in a derived class.
        /// </summary>
        /// <value></value>
        /// <returns>
        /// The name of the collection; otherwise, an empty string. The default is an empty string.
        /// </returns>
        protected abstract override string ElementName
        {
            get;
        }

        #endregion

        #region · Indexers ·

        /// <summary>
        /// Gets the <see cref="ConfigurationElement"/> with the specified key.
        /// </summary>
        /// <value></value>
        public V this[K key]
        {
            get { return (V)BaseGet(key); }
        }

        /// <summary>
        /// Gets the <see cref="ConfigurationElement"/> at the specified index.
        /// </summary>
        /// <value></value>
        public V this[int index]
        {
            get { return (V)BaseGet(index); }
        }

        #endregion

        #region · Constructors ·

        /// <summary>
        /// Initializes a new instance of the <see cref="GenericElementCollection&lt;K, V&gt;"/> class.
        /// </summary>
        public GenericElementCollection()
        {
        }

        #endregion

        #region · Methods ·

        /// <summary>
        /// Adds the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        public void Add(V path)
        {
            BaseAdd(path);
        }

        /// <summary>
        /// Removes the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        public void Remove(K key)
        {
            BaseRemove(key);
        }

        #endregion

        #region · Overriden Methods ·

        /// <summary>
        /// When overridden in a derived class, creates a new <see cref="T:System.Configuration.ConfigurationElement"/>.
        /// </summary>
        /// <returns>
        /// A new <see cref="T:System.Configuration.ConfigurationElement"/>.
        /// </returns>
        protected override ConfigurationElement CreateNewElement()
        {
            return new V();
        }

        /// <summary>
        /// Gets the element key for a specified configuration element when overridden in a derived class.
        /// </summary>
        /// <param name="element">The <see cref="T:System.Configuration.ConfigurationElement"/> to return the key for.</param>
        /// <returns>
        /// An <see cref="T:System.Object"/> that acts as the key for the specified <see cref="T:System.Configuration.ConfigurationElement"/>.
        /// </returns>
        protected override object GetElementKey(ConfigurationElement element)
        {
            return GetElementKey((V)element);
        }

        #endregion

        #region · Protected Abstract Methods ·

        /// <summary>
        /// Gets the element key.
        /// </summary>
        /// <param name="element">The element.</param>
        /// <returns></returns>
        protected abstract K GetElementKey(V element);

        #endregion
    }
}