You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by do...@apache.org on 2001/06/16 05:22:22 UTC
cvs commit: jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/libs/ant1 Ant1Project.java Ant1Tasklib.java Ant1TypeFactory.java TaskAdapter.java
donaldp 01/06/15 20:22:22
Added: proposal/myrmidon/src/java/org/apache/myrmidon/libs/ant1
Ant1Project.java Ant1Tasklib.java
Ant1TypeFactory.java TaskAdapter.java
Log:
Move Ant1 compatibility layer files into separate library.
Also create a task to actually load the task definitions from Ant1 jar.
Revision Changes Path
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/libs/ant1/Ant1Project.java
Index: Ant1Project.java
===================================================================
/*
* 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.libs.ant1;
import java.io.File;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.log.Logger;
import org.apache.myrmidon.api.TaskContext;
import org.apache.tools.ant.*;
import org.apache.tools.ant.Project;
public class Ant1Project
extends Project
implements Loggable, Contextualizable
{
private Logger m_logger;
///Variable to hold context for use by sub-classes
private TaskContext m_context;
public void setLogger( final Logger logger )
{
m_logger = logger;
}
protected final Logger getLogger()
{
return m_logger;
}
/**
* Retrieve context from container.
*
* @param context the context
*/
public void contextualize( final Context context )
{
m_context = (TaskContext)context;
}
protected final TaskContext getContext()
{
return m_context;
}
/**
* Initialise the project.
*/
public void init()
throws BuildException
{
setJavaVersionProperty();
}
public void setProperty( final String name, final String value )
{
try { getContext().setProperty( name, value ); }
catch( final Exception e )
{
getLogger().warn( "Failed to set property " + name + " to " + value, e );
}
}
public void setUserProperty( final String name, final String value )
{
setProperty( name, value );
}
public String getProperty( final String name )
{
return "" + getContext().getProperty( name );
}
public String getUserProperty( final String name )
{
return getProperty( name );
}
public String getName()
{
return "Ant1 Project";
}
public Task createTask( final String taskType )
throws BuildException
{
throw new UnsupportedOperationException();
}
public Object createDataType( final String typeName )
throws BuildException
{
throw new UnsupportedOperationException();
}
public File resolveFile( final String fileName )
{
try { return getContext().resolveFile( fileName ); }
catch( final Exception e )
{
return null;
}
}
protected void fireBuildStarted() {}
protected void fireBuildFinished(Throwable exception) {}
protected void fireTargetStarted(Target target) {}
protected void fireTargetFinished(Target target, Throwable exception) {}
protected void fireTaskStarted(Task task) {}
protected void fireTaskFinished(Task task, Throwable exception) {}
private void fireMessageLoggedEvent(BuildEvent event, String message, int priority)
{
messageLogged( message, priority );
}
protected void fireMessageLogged(Project project, String message, int priority)
{
messageLogged( message, priority );
}
protected void fireMessageLogged(Target target, String message, int priority)
{
messageLogged( message, priority );
}
protected void fireMessageLogged(Task task, String message, int priority)
{
messageLogged( message, priority );
}
private void messageLogged( String message, int priority )
{
switch( priority )
{
case MSG_ERR: getLogger().error( message ); break;
case MSG_WARN: getLogger().warn( message ); break;
case MSG_INFO: getLogger().info( message ); break;
case MSG_VERBOSE: getLogger().debug( message ); break;
case MSG_DEBUG: getLogger().debug( message ); break;
default:
getLogger().debug( message );
}
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/libs/ant1/Ant1Tasklib.java
Index: Ant1Tasklib.java
===================================================================
/*
* 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.libs.ant1;
import java.io.File;
import java.io.InputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Properties;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.Task;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.myrmidon.components.type.TypeManager;
/**
* Method to register a tasklib.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Ant1Tasklib
extends AbstractTask
implements Composable
{
private String m_prefix = "";
private File m_lib;
private TypeManager m_typeManager;
public void compose( final ComponentManager componentManager )
throws ComponentException
{
m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE );
}
public void setLib( final File lib )
{
m_lib = lib;
}
public void setPrefix( final String prefix )
{
m_prefix = prefix;
}
public void execute()
throws TaskException
{
if( null == m_lib )
{
throw new TaskException( "Must specify lib parameter" );
}
try
{
final String location = "jar:" + m_lib.toURL() +
"!/org/apache/tools/ant/taskdefs/defaults.properties";
final URL url = new URL( location );
final InputStream input = url.openStream();
final Properties tasks = new Properties();
tasks.load( input );
input.close();
final Ant1TypeFactory factory = new Ant1TypeFactory( m_lib.toURL() );
final Enumeration enum = tasks.propertyNames();
while( enum.hasMoreElements() )
{
final String rawName = (String)enum.nextElement();
final String className = tasks.getProperty( rawName );
final String name = m_prefix + rawName;
factory.addNameClassMapping( name, className );
m_typeManager.registerType( Task.ROLE, name, factory );
}
}
catch( final Exception e )
{
throw new TaskException( "Failed to load task definitions", e );
}
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/libs/ant1/Ant1TypeFactory.java
Index: Ant1TypeFactory.java
===================================================================
/*
* 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.libs.ant1;
import java.net.URL;
import org.apache.myrmidon.components.type.DefaultTypeFactory;
import org.apache.myrmidon.components.type.TypeException;
import org.apache.tools.ant.Task;
/**
* Factory used to create adaptors for Ant1 tasks.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Ant1TypeFactory
extends DefaultTypeFactory
{
public Ant1TypeFactory( final URL url )
{
super( url );
}
public Ant1TypeFactory( final URL[] urls )
{
super( urls );
}
public Ant1TypeFactory( final URL[] urls, final ClassLoader parent )
{
super( urls, parent );
}
public Ant1TypeFactory( final ClassLoader classLoader )
{
super( classLoader );
}
public Object create( final String name )
throws TypeException
{
final Object object = super.create( name );
if( !(object instanceof Task) )
{
throw new TypeException( "Expected an Ant1 task but received an " +
"object of type : " + object.getClass().getName() );
}
return new TaskAdapter( (Task)object );
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/libs/ant1/TaskAdapter.java
Index: TaskAdapter.java
===================================================================
/*
* 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.libs.ant1;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.myrmidon.api.DataType;
import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.components.type.TypeException;
import org.apache.myrmidon.components.type.TypeFactory;
import org.apache.myrmidon.components.type.TypeManager;
import org.apache.myrmidon.framework.AbstractContainerTask;
import org.apache.tools.ant.Task;
/**
* Adapter of Ant1 tasks to ant2.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class TaskAdapter
extends AbstractContainerTask
implements Configurable
{
private Task m_ant1Task;
private Ant1Project m_project = new Ant1Project();
public TaskAdapter( final Task ant1Task )
{
m_ant1Task = ant1Task;
}
protected final Task getTask()
{
return m_ant1Task;
}
protected final Ant1Project getProject()
{
return m_project;
}
public void configure( final Configuration configuration )
throws ConfigurationException
{
getTask().setTaskName( configuration.getName() );
//do configuration
configure( getTask(), configuration );
}
public void execute()
throws TaskException
{
try
{
getProject().setLogger( getLogger() );
getProject().contextualize( getContext() );
getProject().init();
getTask().setProject( getProject() );
getTask().init();
getTask().execute();
}
catch( final Exception e )
{
throw new TaskException( e.getMessage(), e );
}
}
}