//
// (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>
/// <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";
}
}