blob: c441fd7a985d761a573eb92bfa61d1e6bde5f348 [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.ant.tasks.core;
import java.util.ArrayList;
import org.apache.ant.AntException;
import org.apache.ant.project.ProjectEngine;
import org.apache.ant.project.Project;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.Context;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
/**
* This is abstract base class for tasklets.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class AntCall
extends AbstractTasklet
implements Composer
{
protected ProjectEngine m_projectEngine;
protected Project m_project;
protected String m_target;
protected ArrayList m_properties = new ArrayList();
protected TaskletContext m_childContext;
protected ComponentManager m_componentManager;
public void contextualize( final Context context )
{
super.contextualize( context );
m_childContext = new DefaultTaskletContext( getContext() );
}
public void compose( final ComponentManager componentManager )
throws ComponentManagerException
{
m_componentManager = componentManager;
m_projectEngine = (ProjectEngine)componentManager.
lookup( "org.apache.ant.project.ProjectEngine" );
m_project = (Project)componentManager.lookup( "org.apache.ant.project.Project" );
}
public void setTarget( final String target )
{
m_target = target;
}
public Property createParam()
throws Exception
{
final Property property = new Property();
property.setLogger( getLogger() );
property.contextualize( m_childContext );
property.compose( m_componentManager );
m_properties.add( property );
return property;
}
public void run()
throws AntException
{
if( null == m_target )
{
throw new AntException( "Target attribute must be specified" );
}
final int size = m_properties.size();
for( int i = 0; i < size; i++ )
{
final Property property = (Property)m_properties.get( i );
property.run();
}
getLogger().info( "Calling target " + m_target );
m_projectEngine.execute( m_project, m_target, m_childContext );
}
}