avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ymikul...@apache.org
Subject cvs commit: jakarta-avalon-excalibur/csframework/src/cs/Configuration DefaultConfiguration.cs AbstractConfiguration.cs
Date Wed, 21 Aug 2002 20:14:31 GMT
ymikulski    2002/08/21 13:14:31

  Added:       csframework/src/cs/Configuration DefaultConfiguration.cs
                        AbstractConfiguration.cs
  Log:
  no message
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/csframework/src/cs/Configuration/DefaultConfiguration.cs
  
  Index: DefaultConfiguration.cs
  ===================================================================
  ///
  /// Copyright (C) The Apache Software Foundation. All rights reserved.
  ///
  /// This software is published under the terms of the Apache Software License
  /// version 1.1, a copy of which has been included  with this distribution in
  /// the LICENSE.txt file.
  ///
  using System;
  using System.Collections;
  
  namespace Apache.Avalon.Configuration
  {
  	/// <summary>
  	/// This is the default <see cref="IConfiguration"/> implementation.
  	/// </summary>
  	[Serializable]
  	public class DefaultConfiguration: AbstractConfiguration
  	{
   
  		/// <summary>
  		/// Creates a new <c>DefaultConfiguration</c> instance.
  		/// </summary>
  		public DefaultConfiguration()
  		{
  		}
  
  		/// <summary>
  		/// Creates a new <c>DefaultConfiguration</c> instance.
  		/// </summary>
  		/// <param name="name"></param>
  		/// <param name="location"></param>
  		public DefaultConfiguration(string name, string location )
  		{
  			Name = name;
  			Location = location;
  		}
  
  		/// <summary>
  		/// Creates a new <c>DefaultConfiguration</c> instance.
  		/// </summary>
  		/// <param name="name"></param>
  		/// <param name="location"></param>
  		/// <param name="ns"></param>
  		/// <param name="prefix"></param>
  		public DefaultConfiguration(string name, string location, string ns, string prefix): this(name,
location)
  		{
  			Namespace = ns;
  			Prefix = prefix;
  		}
  
  		/// <summary>
  		///	Gets a <c>IConfiguration</c> instance encapsulating the specified
  		/// child node.
  		/// </summary>
  		/// <param name="name">The Name of the child node.</param> 
  		/// <param name="createNew">
  		///	If <c>true</c>, a new <c>IConfiguration</c>
  		/// will be created and returned if the specified child does not exist.
  		/// If <c>false</c>, <c>null</c> will be returned when the specified
  		/// child doesn't exist.
  		/// </param>
  		/// <returns><c>IConfiguration</c></returns>  
  		public override IConfiguration GetChild(string name, bool createNew )
  		{
  			IConfiguration result = null;
  		
  			if (Children.Count != 0) 
  			{
  
  				foreach (IConfiguration configuration in Children)
  				{
  					if (string.Compare(configuration.Name, name) == 0)
  					{
  						result = configuration;
  						break;
  					}
  				}
  			}
  			else
  			{
  				if( createNew )
  				{
  					result = new DefaultConfiguration( name, string.Empty );
  				}
  			}
  
  			return result;
  		}
  
  		/// <summary>
  		/// Return an <see cref="ConfigurationCollection"/> of <c>IConfiguration</c>
  		/// elements containing all node children with the specified name.
  		/// </summary>
  		/// <param name="name">The Name of the children to get.</param> 
  		/// <returns>
  		/// An <see cref="ConfigurationCollection"/> of
  		/// <c>IConfiguration</c> objects children of 
  		/// this associated with the given name.
  		/// </returns> 
  		public override ConfigurationCollection GetChildren(string name)
  		{
  			ConfigurationCollection result = new ConfigurationCollection();
  
  			foreach (IConfiguration configuration in Children)
  			{
  				if (string.Compare(configuration.Name, name) == 0)
  				{
  					result.Add(configuration);
  				}
  			}
  
  			return result;
  		}
  	}
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/csframework/src/cs/Configuration/AbstractConfiguration.cs
  
  Index: AbstractConfiguration.cs
  ===================================================================
  ///
  /// Copyright (C) The Apache Software Foundation. All rights reserved.
  ///
  /// This software is published under the terms of the Apache Software License
  /// version 1.1, a copy of which has been included  with this distribution in
  /// the LICENSE.txt file.
  ///
  using System;
  using System.Collections;
  
  using Apache.Avalon.Util; 
  
  namespace Apache.Avalon.Configuration
  {
  	/// <summary>
  	/// This is an abstract <see cref="IConfiguration"/> implementation
  	/// that deals with methods that can be abstracted away 
  	/// from underlying implementations.
  	/// </summary>
  	public abstract class AbstractConfiguration: IConfiguration
  	{
  		private bool readOnly;
  		private string name;
  		private string location;
  		private string val;
  		private string ns;
  		private string prefix;
  		private Hashtable attributes = new Hashtable();
  		private ConfigurationCollection children = new ConfigurationCollection();
  
  		/// <summary>
  		/// Gets a value indicating whether the <c>IConfiguration</c> is read-only.
  		/// </summary>
  		/// <value>
  		/// True if the <c>IConfiguration</c> is read-only; otherwise, false.
  		/// </value> 
  		public bool IsReadOnly
  		{
  			get
  			{
  				return readOnly;
  			}
  		}
  
  		/// <summary>
  		/// Gets the name of the node.
  		/// </summary>
  		/// <value>
  		/// The Name of the node.
  		/// </value> 
  		public string Name
  		{
  			get
  			{
  				return name;
  			}
  			set
  			{
  				CheckReadOnly();
  
  				name = value;
  			}
  		}
  
  		/// <summary>
  		/// Gets a string describing location of <c>IConfiguration</c>.
  		/// </summary>
  		/// <value>
  		/// A String describing location of <c>IConfiguration</c>.
  		/// </value> 
  		public string Location
  		{
  			get
  			{
  				return location;
  			}
  			set
  			{
  				CheckReadOnly();
  
  				location = value;
  			}
  		}
  
  		/// <summary>
  		/// Gets the value of the node.
  		/// </summary>
  		/// <value>
  		/// The Value of the node.
  		/// </value> 
  		public string Value
  		{
  			get
  			{
  				if (val == null)
  				{
  					throw new ConfigurationException( string.Format("No value is associated with the "
+
  						"configuration element {0} at {1}", Name, Location));
  				}
  				return val;
  			}
  			set
  			{
  				CheckReadOnly();
  
  				val = value;
  			}
  		}
  
  		/// <summary>
  		/// Gets the Namespace of the node.
  		/// </summary>
  		/// <value>
  		/// The Namespace of the node.
  		/// </value>
  		public string Namespace
  		{
  			get
  			{
  				return ns;
  			}
  
  			set
  			{
  				CheckReadOnly();
  
  				ns = value;
  			}
  		}
  
  		/// <summary>
  		/// Gets the Prefix of the node.
  		/// </summary>
  		/// <value>
  		/// The Prefix of the node.
  		/// </value>
  		public string Prefix
  		{
  			get
  			{
  				return prefix;
  			}
  
  			set
  			{
  				CheckReadOnly();
  
  				prefix = value;
  			}
  		}
  
  
  		/// <summary>
  		/// Gets an <see cref="ConfigurationCollection"/> of <c>IConfiguration</c>
  		/// elements containing all node children.
  		/// </summary>
  		/// <value>The Collection of child nodes.</value>
  		public ConfigurationCollection Children
  		{
  			get
  			{
  				if (children == null)
  				{
  					children = new ConfigurationCollection();
  				}
  
  				return children;
  			}
  
  			set 
  			{
  				CheckReadOnly();
  
  				children = value;
  			}
  		}
  
  		/// <summary>
  		/// Gets an <see cref="IDictionary"/> of the configuration attributes.
  		/// </summary>
  		public  IDictionary Attributes
  		{
  			get
  			{
  				if (attributes == null)
  				{
  					attributes = new Hashtable();
  				}
  
  				return attributes;
  			}
  
  			set
  			{
  				CheckReadOnly();
  
  				attributes = new Hashtable(value);
  			}
  		}
  
  		public IConfiguration GetChild(string child)
  		{
  			return GetChild(child, false);
  		}
  		
  		/// <summary>
  		///	Gets a <c>IConfiguration</c> instance encapsulating the specified
  		/// child node.
  		/// </summary>
  		/// <param name="child">The Name of the child node.</param> 
  		/// <param name="createNew">
  		///	If <c>true</c>, a new <c>IConfiguration</c>
  		/// will be created and returned if the specified child does not exist.
  		/// If <c>false</c>, <c>null</c> will be returned when the specified
  		/// child doesn't exist.
  		/// </param>
  		/// <returns><c>IConfiguration</c></returns>  
  		public abstract IConfiguration GetChild(string child, bool createNew);
  
  		/// <summary>
  		/// Return an <see cref="ConfigurationCollection"/> of <c>IConfiguration</c>
  		/// elements containing all node children with the specified name.
  		/// </summary>
  		/// <param name="name">The Name of the children to get.</param> 
  		/// <returns>
  		/// An <see cref="ConfigurationCollection"/> of
  		/// <c>IConfiguration</c> objects children of 
  		/// this associated with the given name.
  		/// </returns> 
  		public abstract ConfigurationCollection GetChildren(string name);
  
  		/// <summary>
  		/// Gets the Value of the node and converts it 
  		/// into specified <see cref="System.Type"/>.
  		/// </summary>
  		/// <param name="type">The <see cref="System.Type"/></param>
  		/// <returns>The Value converted into the specified type.</returns>
  		/// <exception cref="System.InvalidCastException">
  		/// If the convertion fails, an exception will be thrown.
  		/// </exception>
  		public object GetValue(Type type)
  		{
  			return GetValue(type, null);
  		}
  		
  		/// <summary>
  		/// Gets the Value of the node and converts it 
  		/// into specified <see cref="System.Type"/>.
  		/// </summary>
  		/// <param name="type">The <see cref="System.Type"/></param>
  		/// <param name="defaultValue">
  		/// The defaultValue returned if the convertion fails.
  		/// </param>
  		/// <returns>The Value converted into the specified type.</returns>
  		public object GetValue(Type type, object defaultValue)
  		{
  
  			return Converter.ChangeType(Value, type, defaultValue);
  		}
  		
  		/// <summary>
  		/// Gets the value of specified attribute and
  		/// converts it into specified <see cref="System.Type"/>. 
  		/// </summary>
  		/// <param name="name">The Name of the attribute you ask the value of.</param>
  		/// <param name="type">The <see cref="System.Type"/></param>
  		/// <returns>The Value converted into the specified type.</returns>
  		/// <exception cref="System.InvalidCastException">
  		/// If the convertion fails, an exception will be thrown.
  		/// </exception>
  		public object GetAttribute(string name, Type type)
  		{
  
  			return GetAttribute(name, type, null);
  		}
  
  		/// <summary>
  		/// Gets the value of specified attribute and
  		/// converts it into specified <see cref="System.Type"/>. 
  		/// </summary>
  		/// <param name="name">The Name of the attribute you ask the value of.</param>
  		/// <param name="type">The <see cref="System.Type"/></param>
  		/// <param name="defaultValue">
  		/// The defaultValue returned if the convertion fails.
  		/// </param>
  		/// <returns>The Value converted into the specified type.</returns>
  		public object GetAttribute(string name, Type type, object defaultValue)
  		{
  
  			return Converter.ChangeType(Attributes[name], type, defaultValue);
  		}
  
  		/// <summary>
  		/// Make the configuration read only.
  		/// </summary>
  		public void MakeReadOnly()
  		{
  			readOnly = true;
  		}
  		
  		protected void CheckReadOnly()
  		{
  			if( IsReadOnly )
  			{
  				throw new ConfigurationException( "Configuration is read only and can not be modified."
);
  			}
  		}
  	}
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@jakarta.apache.org>


Mime
View raw message