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:58:47 UTC
cvs commit: jakarta-avalon-excalibur/csframework/src/cs/Context ContextException.cs DefaultContext.cs IContext.cs IContextualizable.cs IRecontextualizable.cs IResolvable.cs
ymikulski 2002/08/13 05:58:47
Added: csframework/src/cs/Context ContextException.cs
DefaultContext.cs IContext.cs IContextualizable.cs
IRecontextualizable.cs IResolvable.cs
Log:
no message
Revision Changes Path
1.1 jakarta-avalon-excalibur/csframework/src/cs/Context/ContextException.cs
Index: ContextException.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.Context
{
/// <summary>
/// The Exception signalling a badly formed IContext.
/// </summary>
/// <remarks>
/// This can be thrown by IContext object when a entry is not
/// found. It can also be thrown manually in Contextualize()
/// when Component detects a malformed context value.
/// </remarks>
public class ContextException: Exception
{
/// <summary>
/// Constructs a new <code>ContextException</code> instance.
/// </summary>
public ContextException(): this(null)
{
}
/// <summary>
/// Constructs a new <code>ContextException</code> instance.
/// </summary>
/// <param name="message">The Detail message for this exception.</param>
public ContextException(string message): this(message, null)
{
}
/// <summary>
/// Constructs a new <code>ContextException</code> instance.
/// </summary>
/// <param name="message">The Detail message for this exception.</param>
/// <param name="inner">The Root cause of the exception.</param>
public ContextException(string message, Exception inner): base (message, inner)
{
}
}
}
1.1 jakarta-avalon-excalibur/csframework/src/cs/Context/DefaultContext.cs
Index: DefaultContext.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.Context
{
/// <summary>
/// Default implementation of IContext.
/// </summary>
public class DefaultContext: IContext, IEnumerable
{
private IDictionary components;
private IContext parent;
private bool readOnly;
/// <summary>
/// Creates a context with specified data and parent.
/// </summary>
/// <param name="data">The Context data.</param>
/// <param name="context">The Parent context (may be null).</param>
public DefaultContext(IDictionary data, IContext context)
{
parent = context;
components = data;
}
/// <summary>
/// Creates a context with specified data.
/// </summary>
/// <param name="data">The Context data.</param>
public DefaultContext(IDictionary data): this (data, null )
{
}
/// <summary>
/// Creates a context with specified parent.
/// </summary>
/// <param name="parent">The Parent context (may be null).</param>
public DefaultContext(IContext parent): this (new Hashtable(), parent)
{
}
/// <summary>
/// Creates a context with no parent.
/// </summary>
public DefaultContext(): this ((IContext) null)
{
}
/// <summary>
/// Gets the context data.
/// </summary>
/// <value>The Context data.</value>
protected IDictionary Components
{
get
{
return components;
}
}
/// <summary>
/// Gets the parent context if any.
/// </summary>
/// <value>The Parent context.</value>
protected IContext Parent
{
get
{
return parent;
}
}
/// <summary>
/// Gets a value indicating whether the context is read-only.
/// </summary>
/// <value>True if the context is read-only; otherwise, false.</value>
public bool IsReadOnly
{
get
{
return readOnly;
}
}
/// <summary>
/// Retrieves an item from the context.
/// </summary>
/// <value>a context item</value>
public object this [object key]
{
get
{
object component = Components[key];
object result = null;
if (component != null)
{
if (component is IResolvable)
{
result = ((IResolvable) component).Resolve(this);
}
else
{
result = component;
}
}
// If there is no one, check the parent.
if (Parent == null)
{
throw new ContextException(string.Format("Unable to locate {0}.", key));
}
else
{
result = Parent[key];
}
return result;
}
set
{
CheckReadOnly();
Components[key] = value;
}
}
/// <summary>
/// Makes the context be read-only.
/// </summary>
public void MakeReadOnly()
{
readOnly = true;
}
/// <summary>
/// Utility method to check if context is read only and if true throw an exception.
/// </summary>
/// <exception cref="ContextException">If the context is read only.</exception>
protected void CheckReadOnly()
{
if (IsReadOnly)
{
throw new ContextException("Context is read only and can not be modified");
}
}
/// <summary>
/// Returns an <see cref="IDictionaryEnumerator"/> that can iterate through the context.
/// </summary>
/// <returns>An <see cref="IDictionaryEnumerator"/> for the context.</returns>
public IEnumerator GetEnumerator()
{
return components.GetEnumerator();
}
}
}
1.1 jakarta-avalon-excalibur/csframework/src/cs/Context/IContext.cs
Index: IContext.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.Context
{
/// <summary>
/// The context is the interface through which the Component
/// and it's Container communicate.
///
/// Each Container-Component relationship will also involve defining
/// a contract between two entities. This contract will specify the
/// services, settings and information that is supplied by the
/// Container to the Component.
///
/// This relationship should be documented in a well known place.
/// It is sometimes convenient to derive from IContext to provide
/// a particular style of IContext for your Component-Container
/// relationship. The documentation for required entries in context
/// can then be defined there.
/// </summary>
public interface IContext
{
/// <summary>
/// Retrieves an object from IContext.
/// </summary>
/// <value>The Object</value>
/// <exception cref="ContextException">
/// If object not found. Note that this means that
/// either Component is asking for invalid entry or
/// the Container is not living up to contract.
/// </exception>
object this[object index]
{
get;
}
}
}
1.1 jakarta-avalon-excalibur/csframework/src/cs/Context/IContextualizable.cs
Index: IContextualizable.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.Context
{
/// <summary>
/// This inteface should be implemented by components that need
/// a IContext to work. IContext contains runtime generated object
/// provided by the Container to this Component.
/// </summary>
public interface IContextualizable
{
/// <summary>
/// Pass the IContext to the component.
/// This method is called after the <c>ILogEnabled.EnableLogging(ILogger logger)</c>
/// (if present) method and before any other method.
/// </summary>
/// <param name="context">The IContext.</param>
/// <exception cref="ContextException">If the context is invalid.</exception>
void Contextualize(IContext context);
}
}
1.1 jakarta-avalon-excalibur/csframework/src/cs/Context/IRecontextualizable.cs
Index: IRecontextualizable.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.Context
{
/// <summary>
/// Extends IContextualizable to allow recontextualizing.
/// This allows a component to re-receive it's context if
/// container environment has changed.
/// </summary>
public interface IRecontextualizable: IContextualizable
{
/// <summary>
/// Pass the new IContext to the component.
/// This method is usually called when component is suspended via use of
/// <c>ISuspendable.Suspend()</c> method.
/// </summary>
/// <param name="context">The IContext.</param>
/// <exception cref="ContextException">If the context is invalid.</exception>
void Recontextualize(IContext context);
}
}
1.1 jakarta-avalon-excalibur/csframework/src/cs/Context/IResolvable.cs
Index: IResolvable.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.Context
{
/// <summary>
/// This interface is used to indicate objects that need to be
/// resolved in some particular context.
/// </summary>
public interface IResolvable
{
/// <summary>
/// Resolves a object to a value.
/// </summary>
/// <param name="context">The IContext with respect which to resolve.</param>
/// <returns>The Resolved object.</returns>
/// <exception cref="ContextException"></exception>
object Resolve(IContext context);
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>