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...@locus.apache.org on 2000/12/06 07:11:29 UTC
cvs commit: jakarta-ant/proposal/myrmidon/src/script ant
donaldp 00/12/05 22:11:28
Modified: proposal/myrmidon/src/java/org/apache/ant Main.java
proposal/myrmidon/src/java/org/apache/ant/convert
Converter.java
proposal/myrmidon/src/java/org/apache/ant/convert/core
converters.properties
proposal/myrmidon/src/java/org/apache/ant/project
DefaultProjectEngine.java ProjectEngine.java
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine
DefaultTaskletConfigurer.java
DefaultTaskletEngine.java TaskletConfigurer.java
TaskletEngine.java TskDeployer.java
proposal/myrmidon/src/java/org/apache/ant/tasks/core
RegisterTasklet.java taskdefs.properties
proposal/myrmidon/src/make sample.xmk
proposal/myrmidon/src/script ant
Added: proposal/myrmidon/src/java/org/apache/ant/convert
ConverterEngine.java ConverterException.java
DefaultConverterEngine.java
proposal/myrmidon/src/java/org/apache/ant/convert/core
StringToClassConverter.java
StringToURLConverter.java
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine
DefaultTskDeployer.java TaskletConverterEngine.java
proposal/myrmidon/src/java/org/apache/ant/tasks/core
AbstractResourceRegisterer.java
RegisterConverter.java RegisterTasklib.java
Log:
Refactored proposal so it is more inline with apporpriate design patterns.
Added in a number of new tasks to demonstrate interaction with tasklet runtime.
Revision Changes Path
1.4 +4 -3 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/Main.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Main.java 2000/12/06 00:23:13 1.3
+++ Main.java 2000/12/06 06:11:22 1.4
@@ -30,9 +30,10 @@
import org.apache.ant.project.ProjectToListenerAdapter;
import org.apache.ant.tasklet.JavaVersion;
import org.apache.ant.tasklet.TaskletContext;
+import org.apache.ant.tasklet.engine.TaskletEngine;
+import org.apache.ant.tasklet.engine.TskDeployer;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
-import org.apache.avalon.camelot.Deployer;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.util.ObjectUtil;
import org.apache.avalon.util.StringUtil;
@@ -241,7 +242,7 @@
* @param clOptions the list of command line options
*/
protected void execute( final List clOptions )
- throws Throwable
+ throws Exception
{
final int size = clOptions.size();
final ArrayList targets = new ArrayList();
@@ -384,7 +385,7 @@
final ExtensionFileFilter filter = new ExtensionFileFilter( ".tsk" );
final File[] files = taskLibDirectory.listFiles( filter );
- final Deployer deployer = engine.getDeployer();
+ final TskDeployer deployer = engine.getTaskletEngine().getTskDeployer();
for( int i = 0; i < files.length; i++ )
{
1.3 +1 -1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java
Index: Converter.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Converter.java 2000/12/06 00:23:20 1.2
+++ Converter.java 2000/12/06 06:11:24 1.3
@@ -25,5 +25,5 @@
* @exception Exception if an error occurs
*/
Object convert( Class destination, Object original )
- throws Exception;
+ throws ConverterException, Exception;
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/ConverterEngine.java
Index: ConverterEngine.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.ant.convert;
import org.apache.avalon.Component;
import org.apache.log.Logger;
public interface ConverterEngine
extends Component, Converter
{
void setLogger( Logger logger );
ConverterRegistry getConverterRegistry();
ConverterFactory getConverterFactory();
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/ConverterException.java
Index: ConverterException.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.ant.convert;
import org.apache.ant.AntException;
/**
* ConverterException thrown when a problem occurs during convertion etc.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class ConverterException
extends AntException
{
/**
* Basic constructor with a message
*
* @param message the message
*/
public ConverterException( final String message )
{
this( message, null );
}
/**
* Constructor that builds cascade so that other exception information can be retained.
*
* @param message the message
* @param throwable the throwable
*/
public ConverterException( final String message, final Throwable throwable )
{
super( message, throwable );
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/DefaultConverterEngine.java
Index: DefaultConverterEngine.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.ant.convert;
import org.apache.ant.AntException;
import org.apache.avalon.Component;
import org.apache.avalon.Initializable;
import org.apache.log.Logger;
public class DefaultConverterEngine
implements ConverterEngine, Initializable
{
protected ConverterFactory m_converterFactory;
protected ConverterRegistry m_converterRegistry;
protected Logger m_logger;
public void setLogger( final Logger logger )
{
m_logger = logger;
}
public ConverterRegistry getConverterRegistry()
{
return m_converterRegistry;
}
public ConverterFactory getConverterFactory()
{
return m_converterFactory;
}
public void init()
throws Exception
{
m_converterRegistry = createConverterRegistry();
m_converterFactory = createConverterFactory();
}
protected ConverterRegistry createConverterRegistry()
{
return new DefaultConverterRegistry();
}
protected ConverterFactory createConverterFactory()
{
return new DefaultConverterFactory();
}
public Object convert( Class destination, final Object original )
throws Exception
{
final ConverterInfo info =
m_converterRegistry.getConverterInfo( original.getClass().getName(),
destination.getName() );
if( null == info )
{
throw new ConverterException( "Unable to find converter for " +
original.getClass() + " to " + destination +
" conversion" );
}
final ConverterEntry entry = m_converterFactory.create( info );
final Converter converter = entry.getConverter();
return converter.convert( destination, original );
}
}
1.2 +2 -0 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/core/converters.properties
Index: converters.properties
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/core/converters.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- converters.properties 2000/12/04 13:37:29 1.1
+++ converters.properties 2000/12/06 06:11:25 1.2
@@ -4,3 +4,5 @@
org.apache.ant.convert.core.StringToByteConverter=java.lang.String, java.lang.Byte
org.apache.ant.convert.core.StringToDoubleConverter=java.lang.String, java.lang.Double
org.apache.ant.convert.core.StringToFloatConverter=java.lang.String, java.lang.Float
+org.apache.ant.convert.core.StringToClassConverter=java.lang.String, java.lang.Class
+org.apache.ant.convert.core.StringToURLConverter=java.lang.String, java.net.URL
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/core/StringToClassConverter.java
Index: StringToClassConverter.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.ant.convert.core;
import org.apache.ant.convert.AbstractConverter;
/**
* String to class converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToClassConverter
extends AbstractConverter
{
public StringToClassConverter()
{
super( String.class, Class.class );
}
public Object convert( final Object original )
throws Exception
{
return Class.forName( (String)original );
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/convert/core/StringToURLConverter.java
Index: StringToURLConverter.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.ant.convert.core;
import java.net.URL;
import org.apache.ant.convert.AbstractConverter;
/**
* String to url converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToURLConverter
extends AbstractConverter
{
public StringToURLConverter()
{
super( String.class, URL.class );
}
public Object convert( final Object original )
throws Exception
{
return new URL( (String)original );
}
}
1.4 +4 -47 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java
Index: DefaultProjectEngine.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultProjectEngine.java 2000/12/06 00:23:28 1.3
+++ DefaultProjectEngine.java 2000/12/06 06:11:25 1.4
@@ -11,31 +11,19 @@
import java.util.Iterator;
import org.apache.ant.AntException;
import org.apache.ant.configuration.Configuration;
-import org.apache.ant.convert.ConverterRegistry;
-import org.apache.ant.convert.DefaultConverterRegistry;
import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.ant.tasklet.engine.DefaultTaskletEngine;
-import org.apache.ant.tasklet.engine.DefaultTaskletInfo;
-import org.apache.ant.tasklet.engine.DefaultTaskletRegistry;
import org.apache.ant.tasklet.engine.TaskletEngine;
-import org.apache.ant.tasklet.engine.TaskletRegistry;
-import org.apache.ant.tasklet.engine.TskDeployer;
import org.apache.avalon.Composer;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
-import org.apache.avalon.camelot.Deployer;
-import org.apache.avalon.camelot.DeploymentException;
-import org.apache.avalon.camelot.RegistryException;
import org.apache.log.Logger;
public class DefaultProjectEngine
implements ProjectEngine, Initializable, Disposable
{
- protected Deployer m_deployer;
- protected TaskletRegistry m_taskletRegistry;
- protected ConverterRegistry m_converterRegistry;
protected TaskletEngine m_taskletEngine;
protected Logger m_logger;
protected ProjectListenerSupport m_listenerSupport;
@@ -61,15 +49,13 @@
{
m_listenerSupport = new ProjectListenerSupport();
- m_taskletRegistry = createTaskletRegistry();
- m_converterRegistry = createConverterRegistry();
- m_deployer = createDeployer();
-
setupTaskletEngine();
m_componentManager = new DefaultComponentManager();
m_componentManager.put( "org.apache.ant.project.ProjectEngine", this );
m_componentManager.put( "org.apache.ant.tasklet.engine.TaskletEngine", m_taskletEngine );
+ m_componentManager.put( "org.apache.ant.convert.ConverterEngine",
+ m_taskletEngine.getConverterEngine() );
}
public void dispose()
@@ -81,9 +67,9 @@
}
}
- public Deployer getDeployer()
+ public TaskletEngine getTaskletEngine()
{
- return m_deployer;
+ return m_taskletEngine;
}
protected void setupTaskletEngine()
@@ -92,17 +78,6 @@
m_taskletEngine = createTaskletEngine();
m_taskletEngine.setLogger( m_logger );
- if( m_taskletEngine instanceof Composer )
- {
- final DefaultComponentManager componentManager = new DefaultComponentManager();
- componentManager.put( "org.apache.ant.tasklet.engine.TaskletRegistry",
- m_taskletRegistry );
- componentManager.put( "org.apache.ant.convert.ConverterRegistry",
- m_converterRegistry );
-
- ((Composer)m_taskletEngine).compose( componentManager );
- }
-
if( m_taskletEngine instanceof Initializable )
{
((Initializable)m_taskletEngine).init();
@@ -114,24 +89,6 @@
return new DefaultTaskletEngine();
}
- protected TaskletRegistry createTaskletRegistry()
- {
- return new DefaultTaskletRegistry();
- }
-
- protected ConverterRegistry createConverterRegistry()
- {
- return new DefaultConverterRegistry();
- }
-
- protected Deployer createDeployer()
- {
- final TskDeployer deployer =
- new TskDeployer( m_taskletRegistry, m_converterRegistry );
- deployer.setLogger( m_logger );
- return deployer;
- }
-
public void execute( final Project project, final String target )
throws AntException
{
1.3 +7 -4 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java
Index: ProjectEngine.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ProjectEngine.java 2000/12/05 09:21:49 1.2
+++ ProjectEngine.java 2000/12/06 06:11:25 1.3
@@ -9,20 +9,23 @@
import org.apache.ant.AntException;
import org.apache.ant.tasklet.TaskletContext;
+import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.Component;
-import org.apache.avalon.camelot.Deployer;
-import org.apache.avalon.camelot.Registry;
import org.apache.log.Logger;
public interface ProjectEngine
extends Component
{
- Deployer getDeployer();
+ void setLogger( Logger logger );
+
+ TaskletEngine getTaskletEngine();
+
void addProjectListener( ProjectListener listener );
void removeProjectListener( ProjectListener listener );
- void setLogger( Logger logger );
+
void execute( Project project, String target )
throws AntException;
+
void execute( Project project, String target, TaskletContext context )
throws AntException;
}
1.3 +6 -24 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletConfigurer.java
Index: DefaultTaskletConfigurer.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletConfigurer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultTaskletConfigurer.java 2000/12/06 00:23:37 1.2
+++ DefaultTaskletConfigurer.java 2000/12/06 06:11:26 1.3
@@ -14,10 +14,7 @@
import org.apache.ant.configuration.Configurable;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.convert.Converter;
-import org.apache.ant.convert.ConverterEntry;
-import org.apache.ant.convert.ConverterFactory;
-import org.apache.ant.convert.ConverterInfo;
-import org.apache.ant.convert.ConverterRegistry;
+import org.apache.ant.convert.ConverterException;
import org.apache.ant.tasklet.Tasklet;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentNotAccessibleException;
@@ -25,7 +22,6 @@
import org.apache.avalon.Composer;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.Context;
-import org.apache.avalon.camelot.FactoryException;
import org.apache.avalon.util.PropertyException;
import org.apache.avalon.util.PropertyUtil;
@@ -47,16 +43,12 @@
"content"
};
- protected ConverterRegistry m_converterRegistry;
- protected ConverterFactory m_converterFactory;
+ protected Converter m_converter;
public void compose( final ComponentManager componentManager )
throws ComponentNotFoundException, ComponentNotAccessibleException
{
- m_converterRegistry = (ConverterRegistry)componentManager.
- lookup( "org.apache.ant.convert.ConverterRegistry" );
- m_converterFactory = (ConverterFactory)componentManager.
- lookup( "org.apache.ant.convert.ConverterFactory" );
+ m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" );
}
/**
@@ -240,23 +232,13 @@
if( !parameterType.isAssignableFrom( sourceClass ) )
{
- final String destination = parameterType.getName();
-
try
{
- final ConverterInfo info = m_converterRegistry.
- getConverterInfo( source, destination );
-
- if( null == info ) return false;
-
- final ConverterEntry entry = m_converterFactory.create( info );
- final Converter converter = entry.getConverter();
- value = converter.convert( parameterType, value );
+ value = m_converter.convert( parameterType, object );
}
- catch( final FactoryException fe )
+ catch( final ConverterException ce )
{
- throw new ConfigurationException( "Badly configured ConverterFactory ",
- fe );
+ return false;
}
catch( final Exception e )
{
1.4 +56 -31 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java
Index: DefaultTaskletEngine.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultTaskletEngine.java 2000/12/06 00:23:37 1.3
+++ DefaultTaskletEngine.java 2000/12/06 06:11:26 1.4
@@ -11,14 +11,13 @@
import org.apache.ant.AntException;
import org.apache.ant.configuration.Configurable;
import org.apache.ant.configuration.Configuration;
+import org.apache.ant.convert.ConverterEngine;
import org.apache.ant.convert.ConverterFactory;
-import org.apache.ant.convert.ConverterRegistry;
import org.apache.ant.tasklet.Tasklet;
import org.apache.ant.tasklet.TaskletContext;
-import org.apache.avalon.ComponentManager;
-import org.apache.avalon.ComponentNotAccessibleException;
-import org.apache.avalon.ComponentNotFoundException;
+import org.apache.avalon.Component;
import org.apache.avalon.Composer;
+import org.apache.avalon.ComponentManager;
import org.apache.avalon.Context;
import org.apache.avalon.Contextualizable;
import org.apache.avalon.DefaultComponentManager;
@@ -29,76 +28,102 @@
import org.apache.log.Logger;
public class DefaultTaskletEngine
- implements TaskletEngine, Initializable, Composer
+ implements TaskletEngine, Initializable
{
+ protected TskDeployer m_tskDeployer;
protected TaskletFactory m_taskletFactory;
- protected ConverterFactory m_converterFactory;
protected TaskletRegistry m_taskletRegistry;
- protected ConverterRegistry m_converterRegistry;
protected TaskletConfigurer m_configurer;
protected Logger m_logger;
+ protected ConverterEngine m_converterEngine;
public void setLogger( final Logger logger )
{
m_logger = logger;
}
- public void compose( final ComponentManager componentManager )
- throws ComponentNotFoundException, ComponentNotAccessibleException
+ public TskDeployer getTskDeployer()
{
- m_taskletRegistry = (TaskletRegistry)componentManager.
- lookup( "org.apache.ant.tasklet.engine.TaskletRegistry" );
- m_converterRegistry = (ConverterRegistry)componentManager.
- lookup( "org.apache.ant.convert.ConverterRegistry" );
+ return m_tskDeployer;
}
- public TaskletRegistry getTaskletRegistry()
+ public ConverterEngine getConverterEngine()
{
- return m_taskletRegistry;
+ return m_converterEngine;
}
- public ConverterRegistry getConverterRegistry()
+ public TaskletRegistry getTaskletRegistry()
{
- return m_converterRegistry;
+ return m_taskletRegistry;
}
public void init()
throws Exception
{
+ m_taskletRegistry = createTaskletRegistry();
m_taskletFactory = createTaskletFactory();
- m_converterFactory = createConverterFactory();
+
+ m_converterEngine = createConverterEngine();
+ m_converterEngine.setLogger( m_logger );
+ setupSubComponent( m_converterEngine );
+
m_configurer = createTaskletConfigurer();
+ setupSubComponent( m_configurer );
- if( m_configurer instanceof Composer )
+ m_tskDeployer = createTskDeployer();
+ m_tskDeployer.setLogger( m_logger );
+ setupSubComponent( m_tskDeployer );
+ }
+
+ protected void setupSubComponent( final Component component )
+ throws Exception
+ {
+ if( component instanceof Composer )
{
final DefaultComponentManager componentManager = new DefaultComponentManager();
- componentManager.put( "org.apache.ant.convert.ConverterFactory",
- m_converterFactory );
- componentManager.put( "org.apache.ant.convert.ConverterRegistry",
- m_converterRegistry );
+ componentManager.put( "org.apache.ant.convert.Converter",
+ getConverterEngine() );
+ componentManager.put( "org.apache.ant.convert.ConverterEngine",
+ getConverterEngine() );
+ componentManager.put( "org.apache.ant.tasklet.engine.TaskletEngine",
+ this );
- ((Composer)m_configurer).compose( componentManager );
+ ((Composer)component).compose( componentManager );
}
-
- if( m_configurer instanceof Initializable )
+
+ if( component instanceof Initializable )
{
- ((Initializable)m_configurer).init();
+ ((Initializable)component).init();
}
}
+
+ protected TskDeployer createTskDeployer()
+ {
+ return new DefaultTskDeployer();
+ }
protected TaskletConfigurer createTaskletConfigurer()
{
return new DefaultTaskletConfigurer();
}
-
+
+ protected TaskletRegistry createTaskletRegistry()
+ {
+ return new DefaultTaskletRegistry();
+ }
+
protected TaskletFactory createTaskletFactory()
{
return new DefaultTaskletFactory();
}
-
- protected ConverterFactory createConverterFactory()
+
+ protected ConverterEngine createConverterEngine()
{
- return (ConverterFactory)m_taskletFactory;
+ //this is done so that the loaders are shared
+ //which results in much less overhead
+ final TaskletConverterEngine engine = new TaskletConverterEngine();
+ engine.setConverterFactory( (ConverterFactory)m_taskletFactory );
+ return engine;
}
public void execute( final Configuration task,
1.3 +2 -0 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletConfigurer.java
Index: TaskletConfigurer.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletConfigurer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TaskletConfigurer.java 2000/12/06 00:23:38 1.2
+++ TaskletConfigurer.java 2000/12/06 06:11:26 1.3
@@ -9,6 +9,7 @@
import org.apache.ant.configuration.Configuration;
import org.apache.ant.tasklet.Tasklet;
+import org.apache.avalon.Component;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.Context;
@@ -18,6 +19,7 @@
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface TaskletConfigurer
+ extends Component
{
/**
* Configure a task based on a configuration in a particular context.
1.4 +11 -6 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java
Index: TaskletEngine.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TaskletEngine.java 2000/12/06 00:23:38 1.3
+++ TaskletEngine.java 2000/12/06 06:11:26 1.4
@@ -9,12 +9,10 @@
import org.apache.ant.AntException;
import org.apache.ant.configuration.Configuration;
-import org.apache.ant.convert.ConverterRegistry;
+import org.apache.ant.convert.ConverterEngine;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.Component;
import org.apache.avalon.ComponentManager;
-import org.apache.avalon.Composer;
-import org.apache.avalon.Contextualizable;
import org.apache.log.Logger;
/**
@@ -26,6 +24,13 @@
extends Component
{
void setLogger( Logger logger );
+
+ /**
+ * Retrieve deployer for engine.
+ *
+ * @return the deployer
+ */
+ TskDeployer getTskDeployer();
/**
* Retrieve tasklet registry associated with engine.
@@ -35,11 +40,11 @@
TaskletRegistry getTaskletRegistry();
/**
- * Retrieve converter registry associated with engine.
+ * Retrieve converter engine.
*
- * @return the ConverterRegistry
+ * @return the ConverterEngine
*/
- ConverterRegistry getConverterRegistry();
+ ConverterEngine getConverterEngine();
/**
* execute a task.
1.3 +8 -183 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java
Index: TskDeployer.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TskDeployer.java 2000/12/05 09:21:54 1.2
+++ TskDeployer.java 2000/12/06 06:11:26 1.3
@@ -7,22 +7,9 @@
*/
package org.apache.ant.tasklet.engine;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-import org.apache.ant.tasklet.engine.DefaultTaskletInfo;
-import org.apache.ant.convert.ConverterRegistry;
-import org.apache.ant.convert.DefaultConverterInfo;
-import org.apache.avalon.Component;
-import org.apache.avalon.camelot.AbstractDeployer;
+import org.apache.avalon.camelot.Deployer;
import org.apache.avalon.camelot.DeploymentException;
-import org.apache.avalon.camelot.RegistryException;
import org.apache.log.Logger;
/**
@@ -30,176 +17,14 @@
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
-public class TskDeployer
- extends AbstractDeployer
+public interface TskDeployer
+ extends Deployer
{
- protected final static String TASKDEF_FILE = "TASK-LIB/taskdefs.properties";
- protected final static String CONVERTER_FILE = "TASK-LIB/converters.properties";
+ void setLogger( Logger logger );
- protected TaskletRegistry m_taskletRegistry;
- protected ConverterRegistry m_converterRegistry;
-
- public TskDeployer( final TaskletRegistry taskletRegistry,
- final ConverterRegistry converterRegistry )
- {
- m_taskletRegistry = taskletRegistry;
- m_converterRegistry = converterRegistry;
- m_autoUndeploy = true;
- m_type = "Tasklet";
- }
-
- public void setLogger( final Logger logger )
- {
- m_logger = logger;
- }
-
- protected boolean isValidLocation( final String location )
- {
- //TODO: Make sure it is valid JavaIdentifier
- //that optionally has '-' embedded in it
- return true;
- }
-
- /**
- * Deploy Tasklets from a .tsk file.
- * Eventually this should be cached for performance reasons.
- *
- * @param location the location
- * @param file the file
- * @exception DeploymentException if an error occurs
- */
- protected void deployFromFile( final String location, final File file )
- throws DeploymentException
- {
- m_logger.info( "Deploying .tsk file (" + file + ") as " + location );
-
- ZipFile zipFile = null;
-
- try { zipFile = new ZipFile( file ); }
- catch( final IOException ioe )
- {
- throw new DeploymentException( "Error opening " + file +
- " due to " + ioe.getMessage(),
- ioe );
- }
-
- try
- {
- final Properties taskdefs = loadProperties( zipFile, TASKDEF_FILE );
- final Properties converters = loadProperties( zipFile, CONVERTER_FILE );
-
- try { zipFile.close(); }
- catch( final IOException ioe ) {}
-
- URL url = null;
-
- try { url = file.toURL(); }
- catch( final MalformedURLException mue ) {}
-
- handleTaskdefs( taskdefs, url );
- handleConverters( converters, url );
- }
- catch( final DeploymentException de )
- {
- try { zipFile.close(); }
- catch( final IOException ioe ) {}
-
- throw de;
- }
- }
-
- protected void handleConverters( final Properties properties, final URL url )
- throws DeploymentException
- {
- final Enumeration enum = properties.propertyNames();
-
- while( enum.hasMoreElements() )
- {
- final String key = (String)enum.nextElement();
- final String value = (String)properties.get( key );
- final int index = value.indexOf( ',' );
-
- if( -1 == index )
- {
- throw new DeploymentException( "Malformed converter definition (" +
- key + ")" );
- }
-
- final String source = value.substring( 0, index ).trim();
- final String destination = value.substring( index + 1 ).trim();
-
- final DefaultConverterInfo info =
- new DefaultConverterInfo( source, destination, key, url );
-
- try { m_converterRegistry.register( key, info ); }
- catch( final RegistryException re )
- {
- throw new DeploymentException( "Error registering converter " +
- key + " due to " + re,
- re );
- }
-
- m_logger.debug( "Registered converter " + key + " that converts from " +
- source + " to " + destination );
- }
- }
-
- protected void handleTaskdefs( final Properties properties, final URL url )
- throws DeploymentException
- {
- final Enumeration enum = properties.propertyNames();
-
- while( enum.hasMoreElements() )
- {
- final String key = (String)enum.nextElement();
- final String value = (String)properties.get( key );
- final DefaultTaskletInfo info = new DefaultTaskletInfo( value, url );
-
- try { m_taskletRegistry.register( key, info ); }
- catch( final RegistryException re )
- {
- throw new DeploymentException( "Error registering " + key + " due to " + re,
- re );
- }
-
- m_logger.debug( "Registered tasklet " + key + " as " + value );
- }
- }
-
- protected Properties loadProperties( final ZipFile zipFile, final String filename )
- throws DeploymentException
- {
- final ZipEntry entry = zipFile.getEntry( filename );
- if( null == entry )
- {
- throw new DeploymentException( "Unable to locate " + filename +
- " in " + zipFile.getName() );
- }
-
- Properties properties = new Properties();
-
- try
- {
- properties.load( zipFile.getInputStream( entry ) );
- }
- catch( final IOException ioe )
- {
- throw new DeploymentException( "Error reading " + filename +
- " from " + zipFile.getName(),
- ioe );
- }
-
- return properties;
- }
-
- protected boolean canUndeploy( final Component component )
- throws DeploymentException
- {
- return true;
- }
+ void deployConverter( String name, String location, URL url )
+ throws DeploymentException;
- protected void shutdownDeployment( final Component component )
- throws DeploymentException
- {
- }
+ void deployTasklet( String name, String location, URL url )
+ throws DeploymentException;
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java
Index: DefaultTskDeployer.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.ant.tasklet.engine;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import org.apache.ant.convert.ConverterEngine;
import org.apache.ant.convert.ConverterRegistry;
import org.apache.ant.convert.DefaultConverterInfo;
import org.apache.ant.tasklet.engine.DefaultTaskletInfo;
import org.apache.avalon.Component;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentNotAccessibleException;
import org.apache.avalon.ComponentNotFoundException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.AbstractDeployer;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.RegistryException;
import org.apache.log.Logger;
/**
* This class deploys a .tsk file into a registry.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class DefaultTskDeployer
extends AbstractDeployer
implements Composer, TskDeployer
{
protected final static String TASKDEF_FILE = "TASK-LIB/taskdefs.properties";
protected final static String CONVERTER_FILE = "TASK-LIB/converters.properties";
protected TaskletRegistry m_taskletRegistry;
protected ConverterRegistry m_converterRegistry;
/**
* Default constructor.
*/
public DefaultTskDeployer()
{
m_autoUndeploy = true;
m_type = "Tasklet";
}
/**
* Retrieve relevent services needed to deploy.
*
* @param componentManager the ComponentManager
* @exception ComponentNotFoundException if an error occurs
* @exception ComponentNotAccessibleException if an error occurs
*/
public void compose( final ComponentManager componentManager )
throws ComponentNotFoundException, ComponentNotAccessibleException
{
final ConverterEngine converterEngine = (ConverterEngine)componentManager.
lookup( "org.apache.ant.convert.ConverterEngine" );
m_converterRegistry = converterEngine.getConverterRegistry();
final TaskletEngine taskletEngine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
m_taskletRegistry = taskletEngine.getTaskletRegistry();
}
public void setLogger( final Logger logger )
{
m_logger = logger;
}
protected boolean isValidLocation( final String location )
{
//TODO: Make sure it is valid JavaIdentifier
//that optionally has '-' embedded in it
return true;
}
/**
* Deploy Tasklets from a .tsk file.
* Eventually this should be cached for performance reasons.
*
* @param location the location
* @param file the file
* @exception DeploymentException if an error occurs
*/
protected void deployFromFile( final String location, final File file )
throws DeploymentException
{
m_logger.info( "Deploying .tsk file (" + file + ") as " + location );
final ZipFile zipFile = getZipFileFor( file );
try
{
final Properties taskdefs = loadProperties( zipFile, TASKDEF_FILE );
final Properties converters = loadProperties( zipFile, CONVERTER_FILE );
try { zipFile.close(); }
catch( final IOException ioe ) {}
URL url = null;
try { url = file.toURL(); }
catch( final MalformedURLException mue ) {}
handleTasklets( taskdefs, url );
handleConverters( converters, url );
}
catch( final DeploymentException de )
{
try { zipFile.close(); }
catch( final IOException ioe ) {}
throw de;
}
}
public void deployConverter( String name, String location, URL url )
throws DeploymentException
{
checkDeployment( location, url );
final ZipFile zipFile = getZipFileFor( url );
final Properties converters = loadProperties( zipFile, CONVERTER_FILE );
final String value = converters.getProperty( name );
if( null == value )
{
throw new DeploymentException( "Unable to locate converter named " + name );
}
handleConverter( name, value, url );
}
public void deployTasklet( final String name, final String location, final URL url )
throws DeploymentException
{
checkDeployment( location, url );
final ZipFile zipFile = getZipFileFor( url );
final Properties tasklets = loadProperties( zipFile, TASKDEF_FILE );
final String value = tasklets.getProperty( name );
if( null == value )
{
throw new DeploymentException( "Unable to locate tasklet named " + name );
}
handleTasklet( name, value, url );
}
protected ZipFile getZipFileFor( final URL url )
throws DeploymentException
{
final File file = getFileFor( url );
return getZipFileFor( file );
}
protected ZipFile getZipFileFor( final File file )
throws DeploymentException
{
try { return new ZipFile( file ); }
catch( final IOException ioe )
{
throw new DeploymentException( "Error opening " + file +
" due to " + ioe.getMessage(),
ioe );
}
}
/**
* Create and register Infos for all converters stored in deployment.
*
* @param properties the properties
* @param url the url of deployment
* @exception DeploymentException if an error occurs
*/
protected void handleConverters( final Properties properties, final URL url )
throws DeploymentException
{
final Enumeration enum = properties.propertyNames();
while( enum.hasMoreElements() )
{
final String key = (String)enum.nextElement();
final String value = (String)properties.get( key );
handleConverter( key, value, url );
}
}
protected void handleConverter( final String name, final String param, final URL url )
throws DeploymentException
{
final int index = param.indexOf( ',' );
if( -1 == index )
{
throw new DeploymentException( "Malformed converter definition (" + name + ")" );
}
final String source = param.substring( 0, index ).trim();
final String destination = param.substring( index + 1 ).trim();
final DefaultConverterInfo info =
new DefaultConverterInfo( source, destination, name, url );
try { m_converterRegistry.register( name, info ); }
catch( final RegistryException re )
{
throw new DeploymentException( "Error registering converter " +
name + " due to " + re,
re );
}
m_logger.debug( "Registered converter " + name + " that converts from " +
source + " to " + destination );
}
/**
* Create and register Infos for all tasklets stored in deployment.
*
* @param properties the properties
* @param url the url of deployment
* @exception DeploymentException if an error occurs
*/
protected void handleTasklets( final Properties properties, final URL url )
throws DeploymentException
{
final Enumeration enum = properties.propertyNames();
while( enum.hasMoreElements() )
{
final String key = (String)enum.nextElement();
final String value = (String)properties.get( key );
handleTasklet( key, value, url );
}
}
protected void handleTasklet( final String name, final String classname, final URL url )
throws DeploymentException
{
final DefaultTaskletInfo info = new DefaultTaskletInfo( classname, url );
try { m_taskletRegistry.register( name, info ); }
catch( final RegistryException re )
{
throw new DeploymentException( "Error registering " + name + " due to " + re,
re );
}
m_logger.debug( "Registered tasklet " + name + " as " + classname );
}
/**
* Utility method to load properties from zip.
*
* @param zipFile the zip file
* @param filename the property filename
* @return the Properties
* @exception DeploymentException if an error occurs
*/
protected Properties loadProperties( final ZipFile zipFile, final String filename )
throws DeploymentException
{
final ZipEntry entry = zipFile.getEntry( filename );
if( null == entry )
{
throw new DeploymentException( "Unable to locate " + filename +
" in " + zipFile.getName() );
}
Properties properties = new Properties();
try
{
properties.load( zipFile.getInputStream( entry ) );
}
catch( final IOException ioe )
{
throw new DeploymentException( "Error reading " + filename +
" from " + zipFile.getName(),
ioe );
}
return properties;
}
protected boolean canUndeploy( final Component component )
throws DeploymentException
{
return true;
}
protected void shutdownDeployment( final Component component )
throws DeploymentException
{
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletConverterEngine.java
Index: TaskletConverterEngine.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.ant.tasklet.engine;
import org.apache.ant.convert.ConverterFactory;
import org.apache.ant.convert.DefaultConverterEngine;
public class TaskletConverterEngine
extends DefaultConverterEngine
{
/**
* Set the ConverterFactory.
* Package access intended.
*/
void setConverterFactory( final ConverterFactory converterFactory )
{
m_converterFactory = converterFactory;
}
protected ConverterFactory createConverterFactory()
{
return m_converterFactory;
}
}
1.3 +13 -86 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklet.java
Index: RegisterTasklet.java
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklet.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RegisterTasklet.java 2000/12/06 00:23:43 1.2
+++ RegisterTasklet.java 2000/12/06 06:11:27 1.3
@@ -7,18 +7,10 @@
*/
package org.apache.ant.tasks.core;
-import java.io.File;
-import java.net.MalformedURLException;
import java.net.URL;
import org.apache.ant.AntException;
-import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.DefaultTaskletInfo;
-import org.apache.ant.tasklet.engine.TaskletEngine;
-import org.apache.ant.tasklet.engine.TaskletRegistry;
-import org.apache.avalon.ComponentManager;
-import org.apache.avalon.ComponentNotAccessibleException;
-import org.apache.avalon.ComponentNotFoundException;
-import org.apache.avalon.Composer;
+import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.RegistryException;
/**
@@ -27,90 +19,25 @@
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class RegisterTasklet
- extends AbstractTasklet
- implements Composer
+ extends AbstractResourceRegisterer
{
- protected TaskletRegistry m_taskletRegistry;
- protected String m_tasklib;
- protected String m_taskName;
- protected String m_classname;
-
- public void compose( final ComponentManager componentManager )
- throws ComponentNotFoundException, ComponentNotAccessibleException
- {
- final TaskletEngine engine = (TaskletEngine)componentManager.
- lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
- m_taskletRegistry = engine.getTaskletRegistry();
- }
-
- public void setTaskLib( final String tasklib )
+ protected void registerResource( final String name,
+ final String classname,
+ final URL url )
+ throws AntException, RegistryException
{
- m_tasklib = tasklib;
- }
-
- public void setTaskName( final String taskName )
- {
- m_taskName = taskName;
- }
-
- public void setClassname( final String classname )
- {
- m_classname = classname;
- }
-
- public void run()
- throws AntException
- {
-/*
- if( null == m_tasklib )
- {
- throw new AntException( "Must specify tasklib parameter" );
- }
-*/
- if( null == m_taskName )
- {
- throw new AntException( "Must specify taskname parameter" );
- }
-
- if( null == m_tasklib && null == m_classname )
- {
- throw new AntException( "Must specify classname if don't specify " +
- "tasklib parameter" );
- }
-
- if( null == m_classname )
- {
- m_classname = getDefaultClassName();
- }
-
- try
+ if( null == classname )
{
- URL url = null;
-
- if( null != m_tasklib )
+ try { m_engine.getTskDeployer().deployTasklet( name, url.toString(), url ); }
+ catch( final DeploymentException de )
{
- final File tasklib = new File( getContext().resolveFilename( m_tasklib ) );
- url = tasklib.toURL();
+ throw new AntException( "Failed deploying " + name + " from " + url, de );
}
-
- final DefaultTaskletInfo info = new DefaultTaskletInfo( m_classname, url );
-
- m_taskletRegistry.register( m_taskName, info );
- }
- catch( final MalformedURLException mue )
- {
- throw new AntException( "Malformed task-lib parameter " + m_tasklib, mue );
}
- catch( final RegistryException re )
+ else
{
- throw new AntException( "Error registering " + m_taskName + " due to " + re, re );
+ final DefaultTaskletInfo info = new DefaultTaskletInfo( classname, url );
+ m_engine.getTaskletRegistry().register( name, info );
}
- }
-
- protected String getDefaultClassName()
- throws AntException
- {
- //TODO:
- throw new AntException( "Not yet capable of automagically finding classname" );
}
}
1.3 +2 -0 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/taskdefs.properties
Index: taskdefs.properties
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/taskdefs.properties,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- taskdefs.properties 2000/12/05 09:21:58 1.2
+++ taskdefs.properties 2000/12/06 06:11:27 1.3
@@ -6,4 +6,6 @@
content-test=org.apache.ant.tasks.core.ContentTest
property=org.apache.ant.tasks.core.Property
register-tasklet=org.apache.ant.tasks.core.RegisterTasklet
+register-converter=org.apache.ant.tasks.core.RegisterConverter
+register-tasklib=org.apache.ant.tasks.core.RegisterTasklib
ant-call=org.apache.ant.tasks.core.AntCall
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/AbstractResourceRegisterer.java
Index: AbstractResourceRegisterer.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.ant.tasks.core;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.DefaultTaskletInfo;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentNotAccessibleException;
import org.apache.avalon.ComponentNotFoundException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.RegistryException;
/**
* Method to register a single tasklet.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public abstract class AbstractResourceRegisterer
extends AbstractTasklet
implements Composer
{
protected String m_lib;
protected String m_name;
protected String m_classname;
protected TaskletEngine m_engine;
public void compose( final ComponentManager componentManager )
throws ComponentNotFoundException, ComponentNotAccessibleException
{
m_engine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
}
public void setLib( final String lib )
{
m_lib = lib;
}
public void setName( final String name )
{
m_name = name;
}
public void setClassname( final String classname )
{
m_classname = classname;
}
public void run()
throws AntException
{
if( null == m_name )
{
throw new AntException( "Must specify name parameter" );
}
else if( null == m_lib && null == m_classname )
{
throw new AntException( "Must specify classname if you don't specify " +
"lib parameter" );
}
final URL url = getURL( m_lib );
try
{
registerResource( m_name, m_classname, url );
}
catch( final RegistryException re )
{
throw new AntException( "Error registering resource", re );
}
}
protected URL getURL( final String libName )
{
if( null != libName )
{
final File lib = new File( getContext().resolveFilename( libName ) );
try { return lib.toURL(); }
catch( final MalformedURLException mue )
{
throw new AntException( "Malformed task-lib parameter " + m_lib, mue );
}
}
else
{
return null;
}
}
protected abstract void registerResource( String name, String classname, URL url )
throws AntException, RegistryException;
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterConverter.java
Index: RegisterConverter.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.ant.tasks.core;
import java.io.File;
import java.net.URL;
import java.net.MalformedURLException;
import org.apache.ant.AntException;
import org.apache.ant.convert.DefaultConverterInfo;
import org.apache.ant.convert.ConverterEngine;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentNotAccessibleException;
import org.apache.avalon.ComponentNotFoundException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.RegistryException;
/**
* Method to register a single converter.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class RegisterConverter
extends AbstractTasklet
implements Composer
{
protected String m_sourceType;
protected String m_destinationType;
protected String m_lib;
protected String m_classname;
protected TaskletEngine m_engine;
public void compose( final ComponentManager componentManager )
throws ComponentNotFoundException, ComponentNotAccessibleException
{
m_engine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
}
public void setLib( final String lib )
{
m_lib = lib;
}
public void setClassname( final String classname )
{
m_classname = classname;
}
public void setSourceType( final String sourceType )
{
m_sourceType = sourceType;
}
public void setDestinationType( final String destinationType )
{
m_destinationType = destinationType;
}
public void run()
throws AntException
{
if( null == m_classname )
{
throw new AntException( "Must specify classname parameter" );
}
final URL url = getURL( m_lib );
boolean isFullyDefined = true;
if( null == m_sourceType && null == m_destinationType )
{
isFullyDefined = false;
}
else if( null == m_sourceType || null == m_destinationType )
{
throw new AntException( "Must specify the source-type and destination-type " +
"parameters when supplying a name" );
}
if( !isFullyDefined && null == url )
{
throw new AntException( "Must supply parameter if not fully specifying converter" );
}
if( !isFullyDefined )
{
try
{
m_engine.getTskDeployer().deployConverter( m_classname, url.toString(), url );
}
catch( final DeploymentException de )
{
throw new AntException( "Failed deploying " + m_classname +
" from " + url, de );
}
}
else
{
final DefaultConverterInfo info =
new DefaultConverterInfo( m_sourceType, m_destinationType, m_classname, url );
try
{
m_engine.getConverterEngine().
getConverterRegistry().register( m_classname, info );
}
catch( final RegistryException re )
{
throw new AntException( "Error registering resource", re );
}
}
}
protected URL getURL( final String libName )
{
if( null != libName )
{
final File lib = new File( getContext().resolveFilename( libName ) );
try { return lib.toURL(); }
catch( final MalformedURLException mue )
{
throw new AntException( "Malformed task-lib parameter " + m_lib, mue );
}
}
else
{
return null;
}
}
}
1.1 jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklib.java
Index: RegisterTasklib.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.ant.tasks.core;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentNotAccessibleException;
import org.apache.avalon.ComponentNotFoundException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.DeploymentException;
/**
* Method to register a tasklib.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class RegisterTasklib
extends AbstractTasklet
implements Composer
{
protected String m_lib;
protected TaskletEngine m_engine;
public void compose( final ComponentManager componentManager )
throws ComponentNotFoundException, ComponentNotAccessibleException
{
m_engine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
}
public void setLib( final String lib )
{
m_lib = lib;
}
public void run()
throws AntException
{
if( null == m_lib )
{
throw new AntException( "Must specify lib parameter" );
}
URL url = null;
final File lib = new File( getContext().resolveFilename( m_lib ) );
try { url = lib.toURL(); }
catch( final MalformedURLException mue )
{
throw new AntException( "Malformed task-lib parameter " + m_lib, mue );
}
try
{
m_engine.getTskDeployer().deploy( url.toString(), url );
}
catch( final DeploymentException de )
{
throw new AntException( "Error registering resource", de );
}
}
}
1.3 +11 -2 jakarta-ant/proposal/myrmidon/src/make/sample.xmk
Index: sample.xmk
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/make/sample.xmk,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- sample.xmk 2000/12/05 09:22:01 1.2
+++ sample.xmk 2000/12/06 06:11:28 1.3
@@ -58,10 +58,18 @@
<property name="blah" value="fred" />
<property name="${blah}" value="barney" />
- <register-tasklet task-lib="../../dist/lib/core.tsk"
- task-name="echo2"
+ <register-tasklet lib="../../dist/lib/core.tsk"
+ name="echo2"
classname="org.apache.ant.tasks.core.Echo" />
+<!--
+ <register-tasklib lib="../../dist/lib/core.tsk" />
+ <register-converter classname="org.apache.ant.convert.core.StringToClassConverter"
+ source-type="java.lang.String"
+ destination-type="java.lang.Class"
+ lib="../../dist/lib/core.tsk" />
+-->
+
<echo message="Doing the funky Echo with ${blah} ${fred} Year=${year}!"/>
<echo2 message="Luke to Echo base. Can you hear me?"/>
@@ -74,6 +82,7 @@
<target name="property-test2">
<echo message="This should fail ...."/>
<echo message="${blah}"/>
+ <echo message="Whoa - it no fail. Did you use ant-call to call me and set param blah?"/>
</target>
</project>
1.3 +2 -2 jakarta-ant/proposal/myrmidon/src/script/ant
Index: ant
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/script/ant,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ant 2000/12/05 09:22:04 1.2
+++ ant 2000/12/06 06:11:28 1.3
@@ -25,7 +25,7 @@
fi
done
-ANT_HOME=`dirname "$PRG"`/..
+MYRMIDON_HOME=`dirname "$PRG"`/..
if [ "$JAVA_HOME" == "" ] ; then
@@ -42,4 +42,4 @@
fi
fi
-$JAVACMD $ANT_OPTS -jar ant.jar --ant-home=${ANT_HOME} $@
\ No newline at end of file
+$JAVACMD $ANT_OPTS -jar ant.jar --ant-home=${MYRMIDON_HOME} $@
\ No newline at end of file