New test.
[mono.git] / mcs / class / System / System.Configuration / NameValueSectionHandler.cs
index 0e88bf44950fcb9ea6fddcc348825dfe61642758..405f8fa9796c318e061a8b3012ba1041c41069cb 100644 (file)
@@ -6,35 +6,41 @@
 //
 // (C) Chris Podurgiel
 //
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
 using System;
-using System.Xml;
 using System.Collections.Specialized;
+#if (XML_DEP)
+using System.Xml;
+#endif
 
 namespace System.Configuration
 {
        /// <summary>
        /// Summary description for NameValueSectionHandler.
        /// </summary>
-       public class NameValueSectionHandler
+       public class NameValueSectionHandler : IConfigurationSectionHandler
        {
-               private static string keyName;
-               private static string valueName;
-               private static NameValueCollection settingsCollection;
-               
-
-               /// <summary>
-               ///             NameValueSectionHandler Constructor
-               /// </summary>
-               public NameValueSectionHandler()
-               {
-                       //Set Default Values.
-                       keyName = "key";
-                       valueName = "value";
-                       
-                       settingsCollection = new NameValueCollection();
-                       
-               }
-
+#if (XML_DEP)
                /// <summary>
                ///             Creates a new configuration handler and adds the specified configuration object to the collection.
                /// </summary>
@@ -42,64 +48,31 @@ namespace System.Configuration
                /// <param name="context">Provides access to the virtual path for which the configuration section handler computes configuration values. Normally this parameter is reserved and is null.</param>
                /// <param name="section">The XML node that contains the configuration information to be handled. section provides direct access to the XML contents of the configuration section.</param>
                /// <returns></returns>
-               [MonoTODO]
                public object Create(object parent, object context, XmlNode section)
                {
-                       //FIXME: I'm not quite sure how to implement 'parent' or 'context'.
-                       
-
-                       //Get all of the ChildNodes in the XML section.
-                       XmlNodeList childNodeList = section.ChildNodes;
-                       
-                       //loop throught the ChildNodes
-                       for (int i=0; i < childNodeList.Count; i++)
-                       {
-                               XmlNode childNode = childNodeList[i];
-
-                               //if the name of this childNode is not 'add' then throw a ConfigurationException.
-                               if(childNode.Name != "add")
-                               {
-                                       throw (new ConfigurationException("Unrecognized element"));
-                               }
-                               
-                               //Get the attributes for the childNode
-                               XmlAttributeCollection xmlAttributes = childNode.Attributes;
-                               
-                               //Get the key and value Attributes by their Name
-                               XmlAttribute keyAttribute = xmlAttributes[keyName];
-                               XmlAttribute valueAttribute = xmlAttributes[valueName];
-                               
-                               //Add this Key/Value Pair to the collection
-                               settingsCollection.Add(keyAttribute.Value, valueAttribute.Value);
-
-                       }
-                       
-                                               
-                       //FIXME: Something is missing here. MS's version of this method returns a System.Configuration.ReadOnlyNameValueCollection type,
-                       //this class id not documented ANYWHERE.  This method is curretly returning a NameValueCollection, but it should be ReadOnly.
-
-                       return settingsCollection;
+                       return ConfigHelper.GetNameValueCollection (parent as NameValueCollection, section,
+                                                                   KeyAttributeName, ValueAttributeName);
                }
-
+#endif
                /// <summary>
-               ///             Gets the name of the key in the key-value pair.
+               /// Gets the name of the key attribute tag. This property is overidden by derived classes to change 
+               /// the name of the key attribute tag. The default is "key".
                /// </summary>
                protected virtual string KeyAttributeName
                {
-                       get
-                       {
-                               return keyName;
+                       get {
+                               return "key";
                        }
                }
 
                /// <summary>
-               ///             Gets the value for the key in the key-value pair.
+               /// Gets the name of the value tag. This property may be overidden by derived classes to change
+               /// the name of the value tag. The default is "value".
                /// </summary>
                protected virtual string ValueAttributeName 
                {
-                       get
-                       {
-                               return valueName;
+                       get {
+                               return "value";
                        }
                }