DictionarySectionHandler.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Sys / System / Configuration / DictionarySectionHandler.cs / 1 / DictionarySectionHandler.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using System.Collections; 
    using System.Collections.Specialized;
    using System.Xml; 
    using System.Globalization;

    /// 
    /// Simple dictionary config factory 
    /// config is a dictionary mapping key->value
    /// 
    ///     <add key="name" value="text">  sets key=text 
    ///     <remove key="name">            removes the definition of key
    ///     <clear>                        removes all definitions 
    ///
    /// 
    public class DictionarySectionHandler : IConfigurationSectionHandler {
 
        /// 
        /// Given a partially composed config object (possibly null) 
        /// and some input from the config system, return a 
        /// further partially composed config object
        ///  
        public virtual object Create(Object parent, Object context, XmlNode section) {
            Hashtable res;

            // start res off as a shallow clone of the parent 

            if (parent == null) 
                res = new Hashtable(StringComparer.OrdinalIgnoreCase); 
            else
                res = (Hashtable)((Hashtable)parent).Clone(); 

            // process XML

            HandlerBase.CheckForUnrecognizedAttributes(section); 

            foreach (XmlNode child in section.ChildNodes) { 
 
                // skip whitespace and comments, throws if non-element
                if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child)) 
                    continue;

                // handle , ,  tags
                if (child.Name == "add") { 
                    HandlerBase.CheckForChildNodes(child);
                    String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName); 
                    String value; 
                    if (ValueRequired)
                        value = HandlerBase.RemoveRequiredAttribute(child, ValueAttributeName); 
                    else
                        value = HandlerBase.RemoveAttribute(child, ValueAttributeName);
                    HandlerBase.CheckForUnrecognizedAttributes(child);
 
                    if (value == null)
                        value = ""; 
 
                    res[key] = value;
                } 
                else if (child.Name == "remove") {
                    HandlerBase.CheckForChildNodes(child);
                    String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
                    HandlerBase.CheckForUnrecognizedAttributes(child); 

                    res.Remove(key); 
                } 
                else if (child.Name.Equals("clear")) {
                    HandlerBase.CheckForChildNodes(child); 
                    HandlerBase.CheckForUnrecognizedAttributes(child);
                    res.Clear();
                }
                else { 
                    HandlerBase.ThrowUnrecognizedElement(child);
                } 
            } 

            return res; 
        }

        /// 
        ///    Make the name of the key attribute configurable by derived classes. 
        /// 
        protected virtual string KeyAttributeName { 
            get { return "key";} 
        }
 
        /// 
        ///    Make the name of the value attribute configurable by derived classes.
        /// 
        protected virtual string ValueAttributeName { 
            get { return "value";}
        } 
 
        //
        internal virtual bool ValueRequired { 
            get { return false; }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using System.Collections; 
    using System.Collections.Specialized;
    using System.Xml; 
    using System.Globalization;

    /// 
    /// Simple dictionary config factory 
    /// config is a dictionary mapping key->value
    /// 
    ///     <add key="name" value="text">  sets key=text 
    ///     <remove key="name">            removes the definition of key
    ///     <clear>                        removes all definitions 
    ///
    /// 
    public class DictionarySectionHandler : IConfigurationSectionHandler {
 
        /// 
        /// Given a partially composed config object (possibly null) 
        /// and some input from the config system, return a 
        /// further partially composed config object
        ///  
        public virtual object Create(Object parent, Object context, XmlNode section) {
            Hashtable res;

            // start res off as a shallow clone of the parent 

            if (parent == null) 
                res = new Hashtable(StringComparer.OrdinalIgnoreCase); 
            else
                res = (Hashtable)((Hashtable)parent).Clone(); 

            // process XML

            HandlerBase.CheckForUnrecognizedAttributes(section); 

            foreach (XmlNode child in section.ChildNodes) { 
 
                // skip whitespace and comments, throws if non-element
                if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child)) 
                    continue;

                // handle , ,  tags
                if (child.Name == "add") { 
                    HandlerBase.CheckForChildNodes(child);
                    String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName); 
                    String value; 
                    if (ValueRequired)
                        value = HandlerBase.RemoveRequiredAttribute(child, ValueAttributeName); 
                    else
                        value = HandlerBase.RemoveAttribute(child, ValueAttributeName);
                    HandlerBase.CheckForUnrecognizedAttributes(child);
 
                    if (value == null)
                        value = ""; 
 
                    res[key] = value;
                } 
                else if (child.Name == "remove") {
                    HandlerBase.CheckForChildNodes(child);
                    String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
                    HandlerBase.CheckForUnrecognizedAttributes(child); 

                    res.Remove(key); 
                } 
                else if (child.Name.Equals("clear")) {
                    HandlerBase.CheckForChildNodes(child); 
                    HandlerBase.CheckForUnrecognizedAttributes(child);
                    res.Clear();
                }
                else { 
                    HandlerBase.ThrowUnrecognizedElement(child);
                } 
            } 

            return res; 
        }

        /// 
        ///    Make the name of the key attribute configurable by derived classes. 
        /// 
        protected virtual string KeyAttributeName { 
            get { return "key";} 
        }
 
        /// 
        ///    Make the name of the value attribute configurable by derived classes.
        /// 
        protected virtual string ValueAttributeName { 
            get { return "value";}
        } 
 
        //
        internal virtual bool ValueRequired { 
            get { return false; }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK