You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ym...@apache.org on 2002/08/13 14:59:34 UTC

cvs commit: jakarta-avalon-excalibur/csframework/src/cs/Parameters IParameterizable.cs IReparameterizable.cs ParameterException.cs Parameters.cs

ymikulski    2002/08/13 05:59:34

  Added:       csframework/src/cs/Parameters IParameterizable.cs
                        IReparameterizable.cs ParameterException.cs
                        Parameters.cs
  Log:
  no message
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/csframework/src/cs/Parameters/IParameterizable.cs
  
  Index: IParameterizable.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;
  
  namespace Apache.Avalon.Parameters
  {
  	/// <summary>
  	/// Components should implement this interface if they wish to 
  	/// be provided with parameters during startup. This interface
  	/// will be called after IComposable.Compose(...) method and before
  	/// <see cref="Apache.Avalon.Activity.IInitializable.Initialize()"/>.
  	/// It is incompatible with the <see cref="Apache.Avalon.Configuration.IConfigurable"/> interface.
  	/// </summary>
  	public interface IParameterizable
  	{
  		/// <summary>
  		/// Provides component with parameters.
  		/// </summary>
  		/// <param name="parameters">The Parameters</param>
  		/// <exception cref="ParameterException">If parameters are invalid.</exception>
  		void Parameterize(Parameters parameters );
  	}
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/csframework/src/cs/Parameters/IReparameterizable.cs
  
  Index: IReparameterizable.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;
  
  namespace Apache.Avalon.Parameters
  {
  	/// <summary>
  	/// Components should implement this interface if they wish to
  	/// be provided with parameters during its lifetime. This interface
  	/// will be called after <see cref="Apache.Avalon.Activity.IStartable.Start()"/>
  	/// and before <see cref="Apache.Avalon.Activity.IStartable.Stop()"/>.
  	/// It is incompatible with the <see cref="Apache.Avalon.Configuration.IReconfigurable"/>
  	/// interface.
  	/// </summary>
  	public interface IReparameterizable: IParameterizable
  	{
  		/// <summary>
  		/// Provides component with parameters.
  		/// </summary>
  		/// <param name="parameters">The Parameters</param>
  		/// <exception cref="ParameterException">If parameters are invalid.</exception>
  		void Reparameterize( Parameters parameters );
  	}
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/csframework/src/cs/Parameters/ParameterException.cs
  
  Index: ParameterException.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;
  
  namespace Apache.Avalon.Parameters
  {
  	/// <summary>
  	/// Thrown when a <see cref="IParameterizable"/> component cannot be parameterized
  	/// properly, or if a value cannot be retrieved properly.
  	/// </summary>
  	public class ParameterException: Exception
  	{
  		/// <summary>
  		/// Constructs a new <see cref="ParameterException"/> instance.
  		/// </summary>
  		public ParameterException(): this(null)
  		{
  		}
  
  		/// <summary>
  		/// Constructs a new <see cref="ParameterException"/> instance.
  		/// </summary>
  		/// <param name="message">The Detail message of the exception.</param>
  		public ParameterException(string message): this(message, null)
  		{
  		}
  
  		/// <summary>
  		/// Constructs a new <see cref="ParameterException"/> instance.
  		/// </summary>
  		/// <param name="message">The Detail message of the exception.</param>
  		/// <param name="inner">The Root cause of the exception.</param>
  		public ParameterException(string message, Exception inner): base (message, inner)
  		{
  		}
  	}
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/csframework/src/cs/Parameters/Parameters.cs
  
  Index: Parameters.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 System.Runtime.Serialization; 
  
  using Apache.Avalon.Util;
  
  
  namespace Apache.Avalon.Parameters
  {
  	/// <summary>
  	/// The Parameters represents a set of key-value pairs.
  	/// An Each value stored in Parameters has a key.
  	/// </summary>
  	/// <remarks>
  	/// Note, this class is not thread safe by default.
  	/// If you require thread safety please synchronize 
  	/// write access to this class to prevent potential data corruption.
  	/// </remarks> 
  	[Serializable]
  	public class Parameters: IEnumerable 
  	{
  		private bool readOnly;
  		private Hashtable parameters = new Hashtable();
  
  		/// <summary>
  		/// Creates a new Parameters instance.
  		/// </summary>
  		public Parameters()
  		{
  		}
  
  		/// <summary>
  		/// Gets a value indicating whether the parameters is read-only.
  		/// </summary>
  		/// <value>True if the parameters are read-only; otherwise, false.</value>
  		public bool IsReadOnly
  		{
  			get
  			{
  				return readOnly;
  			}
  		}
  
  		/// <summary>
  		/// Gets or sets the parameter associated with the specified name.
  		/// </summary>
  		/// <value>The parameter associated with the specified name.</value>
  		public object this[string name]
  		{
  			get
  			{
  				return GetParameter(name, null); 
  			}
  			set 
  			{
  				CheckReadOnly();
  
  				if (name != null)
  				{
  					if (value == null)
  					{
  						parameters.Remove(name);
  					}
  					else 
  					{
  						parameters[name] = value; 
  					}
  				}
  				
  			}
  		}
  
  		/// <summary>
  		/// Gets the parameter with the specified name and 
  		/// converts it into specified <see cref="System.Type"/>.
  		/// </summary>
  		/// <param name="name">The Parameter name</param>
  		/// <param name="type">The <see cref="System.Type"/></param>
  		/// <returns>The parameter value converted into the specified type.</returns>
  		public object GetParameter(string name, Type type)
  		{
  			return GetParameter(name, type, null);
  		}
  
  		/// <summary>
  		/// Gets the parameter with the specified name and 
  		/// converts it into specified <see cref="System.Type"/>.
  		/// </summary>
  		/// <param name="name">The Parameter name</param>
  		/// <param name="type">The <see cref="System.Type"/></param>
  		/// <param name="defaultValue">
  		/// The defaultValue returned if the parameter has wrong type.
  		/// </param> 
  		/// <returns>The parameter value converted into the specified type.</returns>
  		/// <exception cref="ParameterException">
  		/// If the name of the parameter is incorrect.
  		/// </exception>
  		public object GetParameter(string name, Type type, object defaultValue)
  		{
  			if (name == null)
  			{
  				throw new ParameterException( "You cannot lookup a null parameter" );
  			}
  
  			object result = parameters[name];
  
  			if( result == null )
  			{
  				throw new ParameterException( string.Format("The parameter {0} does not contain a value.", name));
  			}
  
  			return Converter.ChangeType(result, type, defaultValue);
  		}
  		
  		/// <summary>
  		/// Removes the parameter with the specified name.
  		/// </summary>
  		/// <param name="name">The parameter name to remove.</param>
  		public void Remove(string name)
  		{
  			this[name] = null;
  		}
  
  		/// <summary>
  		/// Determines whether a parameters is in the <c>Parameters</c>.
  		/// </summary>
  		/// <param name="name">The Parameter name</param>
  		/// <returns>True if the parameter is found; otherwise, false.</returns>
  		public bool Contains(string name)
  		{
  			return parameters.ContainsKey(name);
  		}
  
  		/// <summary>
  		/// Makes the parameters be read-only.
  		/// </summary>
  		public void MakeReadOnly()
  		{
  			readOnly = true;
  		}
  
  		protected void CheckReadOnly()
  		{
  			if( IsReadOnly )
  			{
  				throw new ParameterException( "The Parameters instance is read only and can not be modified" );
  			}
  		}
  
  		/// <summary>
  		/// Merge parameters from another <c>Parameters</c> instance
  		/// into this.
  		/// </summary>
  		/// <param name="pars">The Other parameters</param>
  		public void Merge(Parameters pars)
  		{
  			CheckReadOnly();
  
  			foreach (DictionaryEntry entry in pars)
  			{
  				parameters[entry.Key] = entry.Value;
  			}
  		}
  		
  		/// <summary>
  		/// Returns an <see cref="IDictionaryEnumerator"/> that can iterate through the parameters.
  		/// </summary>
  		/// <returns>An <see cref="IDictionaryEnumerator"/> for the context.</returns>
  		public IEnumerator GetEnumerator()
  		{
  			return parameters.GetEnumerator();
  		}
  	}
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>