//
// System.Configuration.NameValueSectionHandler.cs
//
// Author:
// Christopher Podurgiel (cpodurgiel@msn.com)
//
// (C) Chris Podurgiel
//
using System;
using System.Xml;
using System.Collections.Specialized;
namespace System.Configuration
{
///
/// Summary description for NameValueSectionHandler.
///
public class NameValueSectionHandler
{
private static string keyName;
private static string valueName;
private static NameValueCollection settingsCollection;
///
/// NameValueSectionHandler Constructor
///
public NameValueSectionHandler()
{
//Set Default Values.
keyName = "key";
valueName = "value";
settingsCollection = new NameValueCollection();
}
///
/// Creates a new configuration handler and adds the specified configuration object to the collection.
///
/// Composed from the configuration settings in a corresponding parent configuration section.
/// Provides access to the virtual path for which the configuration section handler computes configuration values. Normally this parameter is reserved and is null.
/// The XML node that contains the configuration information to be handled. section provides direct access to the XML contents of the configuration section.
///
[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;
}
///
/// Gets the name of the key in the key-value pair.
///
protected virtual string KeyAttributeName
{
get
{
return keyName;
}
}
///
/// Gets the value for the key in the key-value pair.
///
protected virtual string ValueAttributeName
{
get
{
return valueName;
}
}
}
}