Преглед на файлове

Added Implementation of Create() method.

svn path=/trunk/mcs/; revision=659
Christopher Podurgiel преди 24 години
родител
ревизия
11d015e36a
променени са 2 файла, в които са добавени 168 реда и са изтрити 110 реда
  1. 106 68
      mcs/class/System/System.Configuration/NameValueSectionHandler.cs
  2. 62 42
      mcs/class/System/System.Configuration/SingleTagSectionHandler.cs

+ 106 - 68
mcs/class/System/System.Configuration/NameValueSectionHandler.cs

@@ -1,68 +1,106 @@
-//
-// System.Configuration.NameValueSectionHandler.cs
-//
-// Author:
-//   Christopher Podurgiel ([email protected])
-//
-// (C) Chris Podurgiel
-//
-using System;
-using System.Xml;
-
-namespace System.Configuration
-{
-	/// <summary>
-	/// Summary description for NameValueSectionHandler.
-	/// </summary>
-	public class NameValueSectionHandler : IConfigurationSectionHandler
-	{
-		private static string _stringKey;
-		private static string _stringValue;
-
-		/// <summary>
-		///		NameValueSectionHandler Constructor
-		/// </summary>
-		public NameValueSectionHandler()
-		{
-			//Set Default Values.
-			_stringKey = "key";
-			_stringValue = "value";
-		}
-
-		/// <summary>
-		///		Creates a new configuration handler and adds the specified configuration object to the collection.
-		/// </summary>
-		/// <param name="parent">Composed from the configuration settings in a corresponding parent configuration section.</param>
-		/// <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>
-		public object Create(object parent, object context, XmlNode section)
-		{
-			//FIXME: Add Implemetation code here.
-			return null;
-		}
-
-		/// <summary>
-		///		Gets the name of the key in the key-value pair.
-		/// </summary>
-		protected virtual string KeyAttributeName
-		{
-			get
-			{
-				return _stringKey;
-			}
-		}
-
-		/// <summary>
-		///		Gets the value for the key in the key-value pair.
-		/// </summary>
-		protected virtual string ValueAttributeName 
-		{
-			get
-			{
-				return _stringValue;
-			}
-		}
-
-	}
-}
+//
+// System.Configuration.NameValueSectionHandler.cs
+//
+// Author:
+//   Christopher Podurgiel ([email protected])
+//
+// (C) Chris Podurgiel
+//
+using System;
+using System.Xml;
+using System.Collections.Specialized;
+
+namespace System.Configuration
+{
+	/// <summary>
+	/// Summary description for NameValueSectionHandler.
+	/// </summary>
+	public class NameValueSectionHandler
+	{
+		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();
+			
+		}
+
+		/// <summary>
+		///		Creates a new configuration handler and adds the specified configuration object to the collection.
+		/// </summary>
+		/// <param name="parent">Composed from the configuration settings in a corresponding parent configuration section.</param>
+		/// <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>
+		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;
+		}
+
+		/// <summary>
+		///		Gets the name of the key in the key-value pair.
+		/// </summary>
+		protected virtual string KeyAttributeName
+		{
+			get
+			{
+				return keyName;
+			}
+		}
+
+		/// <summary>
+		///		Gets the value for the key in the key-value pair.
+		/// </summary>
+		protected virtual string ValueAttributeName 
+		{
+			get
+			{
+				return valueName;
+			}
+		}
+
+	}
+}

+ 62 - 42
mcs/class/System/System.Configuration/SingleTagSectionHandler.cs

@@ -1,42 +1,62 @@
-//
-// System.Configuration.SingleTagSectionHandler.cs
-//
-// Author:
-//   Christopher Podurgiel ([email protected])
-//
-// (C) Chris Podurgiel
-//
-
-using System;
-using System.Xml;
-
-
-namespace System.Configuration
-{
-	/// <summary>
-	/// Summary description for SingleTagSectionHandler.
-	/// </summary>
-	public class SingleTagSectionHandler : IConfigurationSectionHandler
-	{
-
-		public SingleTagSectionHandler()
-		{
-			//
-			// TODO: Add constructor logic here
-			//
-		}
-
-		/// <summary>
-		///		Returns a collection of configuration section values.
-		/// </summary>
-		/// <param name="parent"></param>
-		/// <param name="context"></param>
-		/// <param name="section">The name of the configuration section.</param>
-		/// <returns></returns>
-		public object Create(object parent, object context, XmlNode section)
-		{
-			//FIXME: Add Implemetation code here.
-			return null;
-		}
-	}
-}
+//
+// System.Configuration.SingleTagSectionHandler.cs
+//
+// Author:
+//   Christopher Podurgiel ([email protected])
+//
+// (C) Chris Podurgiel
+//
+
+using System;
+using System.Xml;
+using System.Collections;
+
+
+namespace System.Configuration
+{
+	/// <summary>
+	/// Summary description for SingleTagSectionHandler.
+	/// </summary>
+	public class SingleTagSectionHandler : IConfigurationSectionHandler
+	{
+
+		public SingleTagSectionHandler()
+		{
+			//
+			// TODO: Add constructor logic here
+			//
+		}
+
+		/// <summary>
+		///		Returns a collection of configuration section values.
+		/// </summary>
+		/// <param name="parent"></param>
+		/// <param name="context"></param>
+		/// <param name="section">The name of the configuration section.</param>
+		/// <returns></returns>
+		public object Create(object parent, object context, XmlNode section)
+		{
+			//FIXME: I'm not quite sure how to implement 'parent' or 'context'.
+			//TODO: Add in proper Error Handling.
+
+			//Get all of the ChildNodes in the XML section.
+			if(section.HasChildNodes)
+			{
+				throw (new ConfigurationException("Child Nodes not allowed."));
+			}
+			
+			
+			//Get the attributes for the childNode
+			XmlAttributeCollection xmlAttributes = section.Attributes;
+
+			Hashtable settingsCollection = new Hashtable();
+			
+			for(int i=0; i < xmlAttributes.Count; i++)
+			{
+				settingsCollection.Add(xmlAttributes[i].Name, xmlAttributes[i].Value);
+			}
+			
+			return settingsCollection;
+		}
+	}
+}