// $Id$
//
// Copyright 2007-2008 Cisco Systems Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy
// of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
using System;
using System.Collections.Generic;
using Etch.Msg;
namespace Etch.Transport
{
public abstract class FormatFactory
{
public const String BINARY = "binary";
public const String XML = "xml";
///
///
///
///
///
/// the tagged data input with the specified value factory and
/// initialized by terms from the uri.
abstract public TaggedDataInput NewTaggedDataInput( ValueFactory vf, string uri );
///
///
///
///
///
/// the tagged data output with the specified value factory and
/// initialized by terms from the uri.
abstract public TaggedDataOutput NewTaggedDataOutput( ValueFactory vf, string uri );
private readonly static Dictionary formatFactories = new Dictionary();
///
/// Gets the named format factory.
///
/// the name of a configured format factory.
/// the named format factory, or null if it isn't defined.
public static FormatFactory Get( String name )
{
Object factory = formatFactories[name];
if (factory == null)
return null;
if (factory is string)
{
try
{
Type c = Type.GetType((string) factory);
factory = Activator.CreateInstance(c);
if (!(factory is FormatFactory))
throw new ArgumentException(
String.Format(" Instance for format name {0} does not implement FormatFactory {1}", name, factory));
// formatFactories.Add(name,factory);
}
catch(Exception e)
{
throw new ArgumentException(" Could not create instance of format name " + name,e);
}
}
return (FormatFactory) factory;
}
///
/// Puts a named format factory.
///
/// the uri scheme of this format factory.
/// thefully qualified class name or instance
/// of the FormatFactory to associate with the name
public static void Put( String name, Object factory )
{
formatFactories.Add( name, factory );
}
static FormatFactory()
{
Put(BINARY, "Etch.Transport.Fmt.Binary.BinaryTaggedDataFormatFactory");
}
}
}