blob: 595e84758c67b27c50be112872d7de995077f35c [file] [log] [blame]
/*
* 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 file.
*/
package org.apache.myrmidon.converter;
import org.apache.avalon.framework.context.Context;
/**
* Instances of this interface are used to convert between different types.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public abstract class AbstractConverter
implements Converter
{
private final Class m_source;
private final Class m_destination;
/**
* Constructor for a converter between types source and destination
*
* @param source the source type
* @param destination the destination type
*/
public AbstractConverter( final Class source, final Class destination )
{
m_source = source;
m_destination = destination;
}
/**
* Convert an object from original to destination types
*
* @param destination the destination type
* @param original the original Object
* @param context the context in which to convert
* @return the converted object
* @exception Exception if an error occurs
*/
public Object convert( final Class destination, final Object original, Context context )
throws ConverterException
{
if( m_destination != destination )
{
throw new IllegalArgumentException( "Destination type " + destination.getName() +
" is not equal to " + m_destination );
}
if( !m_source.isInstance( original ) )
{
throw new IllegalArgumentException( "Object '" + original + "' is not an " +
"instance of " + m_source.getName() );
}
return convert( original, context );
}
/**
* Overide this in a particular converter to do the conversion.
*
* @param original the original Object
* @param context the context in which to convert
* @return the converted object
* @exception Exception if an error occurs
*/
protected abstract Object convert( Object original, Context context )
throws ConverterException;
}