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