blob: 1120e48433bb00a57c6460499751f274e48e4648 [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.framework;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.converter.Converter;
import org.apache.myrmidon.converter.ConverterException;
import org.apache.myrmidon.components.configurer.Configurer;
import org.apache.myrmidon.components.converter.MasterConverter;
import org.apache.myrmidon.components.executor.Executor;
import org.apache.avalon.excalibur.property.PropertyException;
import org.apache.avalon.excalibur.property.PropertyUtil;
/**
* This is the class that Task writers should extend to provide custom tasks.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public abstract class AbstractContainerTask
extends AbstractTask
implements Composable
{
///For converting own attributes
private MasterConverter m_converter;
///For configuring own sub-elements
private Configurer m_configurer;
///For executing sub-elements as tasks
private Executor m_executor;
public void compose( final ComponentManager componentManager )
throws ComponentException
{
m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE );
m_converter = (MasterConverter)componentManager.lookup( MasterConverter.ROLE );
m_executor = (Executor)componentManager.lookup( Executor.ROLE );
}
/**
* Helper method to resolve a string.
*
* @param value the value to resolve
* @return the resolved value
* @exception ConfigurationException if an error occurs
*/
protected final Object resolve( final String value )
throws ConfigurationException
{
try
{
final Object object =
PropertyUtil.resolveProperty( value, getContext(), false );
if( null == object )
{
throw new ConfigurationException( "Value (" + value +
") resolved to null" );
}
return object;
}
catch( final PropertyException pe )
{
throw new ConfigurationException( "Error resolving value: " + value, pe );
}
}
/**
* Helper method to convert an object to a specific type.
*
* @param to type to convert object to
* @param object the object to convert
* @return the converted object
* @exception ConfigurationException if an error occurs
*/
protected final Object convert( final Class to, final Object object )
throws ConfigurationException
{
try
{
return getConverter().convert( to, object, getContext() );
}
catch( final ConverterException ce )
{
throw new ConfigurationException( "Error converting value", ce );
}
}
/**
* Configure an object using specific configuration element.
*
* @param object the object
* @param element the configuration element
* @exception ConfigurationException if an error occurs
*/
protected final void configure( final Object object, final Configuration element )
throws ConfigurationException
{
getConfigurer().configure( object, element, getContext() );
}
/**
* Configure an objects attribute using parameters.
*
* @param object the object
* @param name the attibute name
* @param value the attibute value
* @exception ConfigurationException if an error occurs
*/
protected final void configure( final Object object, final String name, final String value )
throws ConfigurationException
{
getConfigurer().configure( object, name, value, getContext() );
}
/**
* Convenience method for sub-class to retrieve Configurer.
*
* @return the configurer
*/
protected final Configurer getConfigurer()
{
return m_configurer;
}
/**
* Convenience method for sub-class to retrieve Converter.
*
* @return the converter
*/
protected final Converter getConverter()
{
return m_converter;
}
/**
* Convenience method for sub-class to retrieve Executor.
*
* @return the executor
*/
protected final Executor getExecutor()
{
return m_executor;
}
}