using System;
using System.Collections.Specialized;
using Persist.Converters;
namespace Persist.Config{
/// <summary>
/// This object manage an IConverter object
/// </summary>
public class ConverterHolder
{
private IConverter theConverter;
private string theName;
private string theTypeName;
private NameValueCollection theParameters;
private bool isInitialized;
/// <summary>
/// ConverterHolder constructor
/// </summary>
/// <param name="name">the converter name</param>
/// <param name="typeName">the converter Type name</param>
/// <param name="parameters">Parameters to give to the IConverter object during initialization</param>
public ConverterHolder(string name,string typeName,NameValueCollection parameters)
{
theName = name;
theTypeName = typeName;
theParameters = parameters;
isInitialized = false;
}
/// <summary>
/// Return the name of the IConverter
/// Throw an exception if the ConverterHolder is already initialized
/// </summary>
public string Name
{
get{return theName;}
set{theName = value;}
}
/// <summary>
/// Return the Type name of the IConverter
/// Throw an exception if the ConverterHolder is already initialized
/// </summary>
public string TypeName
{
get{return theTypeName;}
set{theTypeName = value;}
}
/// <summary>
/// Return the IConverter Parameters list
/// Any changes after initialization will not be taken into account
/// </summary>
public NameValueCollection Parameters
{
get{return theParameters;}
}
/// <summary>
/// Initialize the Converter Holder
/// </summary>
/// <param name="configuration">the current configuration</param>
public void Init(Config.Configuration configuration)
{
lock(this)
{
if(isInitialized)
{
throw new ConfigurationException("ConverterHolder Already Initialized");
}
Type cl = Type.GetType(theTypeName,true,true);
theConverter = (IConverter)Activator.CreateInstance(cl);
theConverter.Init(theParameters);
isInitialized = true;
}
}
/// <summary>
/// Return the instance of the converter
/// <c>
/// Throw an Exception if the not Initialized
/// </c>
/// </summary>
public IConverter Instance
{
get
{
if(!isInitialized)
{
throw new ConfigurationException("Converter Hodler not initialized");
}
return theConverter;
}
}
}
}
|