Browse Source

Integrate TypeManager into embeddor and in deployment mechanism.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269081 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
b689612fa9
5 changed files with 71 additions and 18 deletions
  1. +2
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/api/Task.java
  2. +45
    -13
      proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java
  3. +17
    -4
      proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/MyrmidonEmbeddor.java
  4. +5
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java
  5. +2
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java

+ 2
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/api/Task.java View File

@@ -25,6 +25,8 @@ package org.apache.myrmidon.api;
*/ */
public interface Task public interface Task
{ {
String ROLE = "org.apache.myrmidon.api.Task";

/** /**
* Execute task. * Execute task.
* This method is called to perform actual work associated with task. * This method is called to perform actual work associated with task.


+ 45
- 13
proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java View File

@@ -35,7 +35,11 @@ import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.Loggable; import org.apache.avalon.framework.logger.Loggable;
import org.apache.log.Logger; import org.apache.log.Logger;
import org.apache.myrmidon.api.Task;
import org.apache.myrmidon.components.executor.Executor; import org.apache.myrmidon.components.executor.Executor;
import org.apache.myrmidon.components.type.TypeManager;
import org.apache.myrmidon.components.type.ComponentFactory;
import org.apache.myrmidon.components.type.DefaultComponentFactory;


/** /**
* This class deploys a .tsk file into a registry. * This class deploys a .tsk file into a registry.
@@ -52,13 +56,13 @@ public class DefaultTskDeployer
private Registry m_taskRegistry; private Registry m_taskRegistry;
private Registry m_converterRegistry; private Registry m_converterRegistry;
private ConverterRegistry m_converterInfoRegistry; private ConverterRegistry m_converterInfoRegistry;
private TypeManager m_typeManager;


/** /**
* Default constructor. * Default constructor.
*/ */
public DefaultTskDeployer() public DefaultTskDeployer()
{ {
super();
m_autoUndeploy = true; m_autoUndeploy = true;
m_type = "Task"; m_type = "Task";
} }
@@ -86,6 +90,8 @@ public class DefaultTskDeployer
lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" );


m_dataTypeRegistry = dataTypeEngine.getRegistry(); m_dataTypeRegistry = dataTypeEngine.getRegistry();

m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE );
} }


/** /**
@@ -124,12 +130,15 @@ public class DefaultTskDeployer
{ {
final Configuration taskdefs = DeployerUtil.loadConfiguration( zipFile, TSKDEF_FILE ); final Configuration taskdefs = DeployerUtil.loadConfiguration( zipFile, TSKDEF_FILE );


final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );

try try
{ {
final Configuration[] tasks = taskdefs.getChildren( "task" ); final Configuration[] tasks = taskdefs.getChildren( "task" );
for( int i = 0; i < tasks.length; i++ ) for( int i = 0; i < tasks.length; i++ )
{ {
handleTask( tasks[ i ], url );
handleTask( tasks[ i ], url, factory );
} }


final Configuration[] converters = taskdefs.getChildren( "converter" ); final Configuration[] converters = taskdefs.getChildren( "converter" );
@@ -141,7 +150,7 @@ public class DefaultTskDeployer
final Configuration[] datatypes = taskdefs.getChildren( "datatype" ); final Configuration[] datatypes = taskdefs.getChildren( "datatype" );
for( int i = 0; i < datatypes.length; i++ ) for( int i = 0; i < datatypes.length; i++ )
{ {
handleDataType( datatypes[ i ], url );
handleDataType( datatypes[ i ], url, factory );
} }
} }
catch( final ConfigurationException ce ) catch( final ConfigurationException ce )
@@ -190,7 +199,9 @@ public class DefaultTskDeployer
{ {
if( datatypes[ i ].getAttribute( "name" ).equals( name ) ) if( datatypes[ i ].getAttribute( "name" ).equals( name ) )
{ {
handleDataType( datatypes[ i ], url );
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
handleDataType( datatypes[ i ], url, factory );
break; break;
} }
} }
@@ -215,7 +226,9 @@ public class DefaultTskDeployer
{ {
if( tasks[ i ].getAttribute( "name" ).equals( name ) ) if( tasks[ i ].getAttribute( "name" ).equals( name ) )
{ {
handleTask( tasks[ i ], url );
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
handleTask( tasks[ i ], url, factory );
break; break;
} }
} }
@@ -257,13 +270,15 @@ public class DefaultTskDeployer
source + " to " + destination ); source + " to " + destination );
} }


private void handleTask( final Configuration task, final URL url )
private void handleTask( final Configuration task,
final URL url,
final DefaultComponentFactory factory )
throws DeploymentException, ConfigurationException throws DeploymentException, ConfigurationException
{ {
final String name = task.getAttribute( "name" ); final String name = task.getAttribute( "name" );
final String classname = task.getAttribute( "classname" );
final String className = task.getAttribute( "classname" );


final DefaultLocator info = new DefaultLocator( classname, url );
final DefaultLocator info = new DefaultLocator( className, url );


try { m_taskRegistry.register( name, info ); } try { m_taskRegistry.register( name, info ); }
catch( final RegistryException re ) catch( final RegistryException re )
@@ -272,16 +287,26 @@ public class DefaultTskDeployer
re ); re );
} }


getLogger().debug( "Registered task " + name + " as " + classname );
factory.addNameClassMapping( name, className );
try { m_typeManager.registerType( Task.ROLE, name, factory ); }
catch( final Exception e )
{
throw new DeploymentException( "Error registering " + name + " due to " + e, e );
}
getLogger().debug( "Registered task " + name + " as " + className );
} }


private void handleDataType( final Configuration datatype, final URL url )
private void handleDataType( final Configuration datatype,
final URL url,
final DefaultComponentFactory factory )
throws DeploymentException, ConfigurationException throws DeploymentException, ConfigurationException
{ {
final String name = datatype.getAttribute( "name" ); final String name = datatype.getAttribute( "name" );
final String classname = datatype.getAttribute( "classname" );
final String className = datatype.getAttribute( "classname" );


final DefaultLocator info = new DefaultLocator( classname, url );
final DefaultLocator info = new DefaultLocator( className, url );


try { m_dataTypeRegistry.register( name, info ); } try { m_dataTypeRegistry.register( name, info ); }
catch( final RegistryException re ) catch( final RegistryException re )
@@ -290,6 +315,13 @@ public class DefaultTskDeployer
re ); re );
} }


getLogger().debug( "Registered datatype " + name + " as " + classname );
factory.addNameClassMapping( name, className );
try { m_typeManager.registerType( Task.ROLE, name, factory ); }
catch( final Exception e )
{
throw new DeploymentException( "Error registering " + name + " due to " + e, e );
}

getLogger().debug( "Registered datatype " + name + " as " + className );
} }
} }

+ 17
- 4
proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/MyrmidonEmbeddor.java View File

@@ -26,6 +26,7 @@ import org.apache.myrmidon.api.JavaVersion;
import org.apache.myrmidon.components.builder.ProjectBuilder; import org.apache.myrmidon.components.builder.ProjectBuilder;
import org.apache.myrmidon.components.configurer.Configurer; import org.apache.myrmidon.components.configurer.Configurer;
import org.apache.myrmidon.components.executor.Executor; import org.apache.myrmidon.components.executor.Executor;
import org.apache.myrmidon.components.type.TypeManager;
import org.apache.myrmidon.components.manager.ProjectManager; import org.apache.myrmidon.components.manager.ProjectManager;
import org.apache.myrmidon.components.deployer.TskDeployer; import org.apache.myrmidon.components.deployer.TskDeployer;


@@ -39,14 +40,17 @@ public class MyrmidonEmbeddor
extends AbstractLoggable extends AbstractLoggable
implements Embeddor implements Embeddor
{ {
private ConverterEngine m_converterEngine;
private DataTypeEngine m_dataTypeEngine;
private Executor m_executor;
private ProjectManager m_projectManager; private ProjectManager m_projectManager;

private ProjectBuilder m_builder; private ProjectBuilder m_builder;
private TskDeployer m_deployer; private TskDeployer m_deployer;

private DataTypeEngine m_dataTypeEngine;
private TypeManager m_typeManager;
private ConverterEngine m_converterEngine;

private Executor m_executor;
private Configurer m_configurer; private Configurer m_configurer;


private Factory m_factory; private Factory m_factory;


@@ -170,6 +174,9 @@ public class MyrmidonEmbeddor
"org.apache.ant.convert.engine.DefaultConverterEngine" ); "org.apache.ant.convert.engine.DefaultConverterEngine" );
defaults.setParameter( "org.apache.ant.tasklet.engine.DataTypeEngine", defaults.setParameter( "org.apache.ant.tasklet.engine.DataTypeEngine",
"org.apache.ant.tasklet.engine.DefaultDataTypeEngine" ); "org.apache.ant.tasklet.engine.DefaultDataTypeEngine" );

defaults.setParameter( TypeManager.ROLE,
"org.apache.myrmidon.components.type.DefaultTypeManager" );
defaults.setParameter( Executor.ROLE, defaults.setParameter( Executor.ROLE,
"org.apache.myrmidon.components.executor.DefaultExecutor" ); "org.apache.myrmidon.components.executor.DefaultExecutor" );
defaults.setParameter( ProjectManager.ROLE, defaults.setParameter( ProjectManager.ROLE,
@@ -206,6 +213,9 @@ public class MyrmidonEmbeddor
//Following components required when Myrmidon allows user deployment of tasks etal. //Following components required when Myrmidon allows user deployment of tasks etal.
componentManager.put( TskDeployer.ROLE, m_deployer ); componentManager.put( TskDeployer.ROLE, m_deployer );


//Following components used when want to types (ie tasks/mappers etc)
componentManager.put( TypeManager.ROLE, m_typeManager );

//Following components required when allowing Container tasks //Following components required when allowing Container tasks
componentManager.put( Configurer.ROLE, m_configurer ); componentManager.put( Configurer.ROLE, m_configurer );
componentManager.put( Executor.ROLE, m_executor ); componentManager.put( Executor.ROLE, m_executor );
@@ -229,6 +239,9 @@ public class MyrmidonEmbeddor
component = getParameter( "org.apache.ant.tasklet.engine.DataTypeEngine" ); component = getParameter( "org.apache.ant.tasklet.engine.DataTypeEngine" );
m_dataTypeEngine = (DataTypeEngine)createComponent( component, DataTypeEngine.class ); m_dataTypeEngine = (DataTypeEngine)createComponent( component, DataTypeEngine.class );


component = getParameter( TypeManager.ROLE );
m_typeManager = (TypeManager)createComponent( component, TypeManager.class );

component = getParameter( Executor.ROLE ); component = getParameter( Executor.ROLE );
m_executor = (Executor)createComponent( component, Executor.class ); m_executor = (Executor)createComponent( component, Executor.class );




+ 5
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java View File

@@ -26,6 +26,11 @@ public class DefaultTypeManager
///Maps role to TypedComponentSelector. ///Maps role to TypedComponentSelector.
private final HashMap m_roleMap = new HashMap(); private final HashMap m_roleMap = new HashMap();


public DefaultTypeManager()
{
this( null );
}

public DefaultTypeManager( final TypeManager parent ) public DefaultTypeManager( final TypeManager parent )
{ {
m_parent = parent; m_parent = parent;


+ 2
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java View File

@@ -7,6 +7,7 @@
*/ */
package org.apache.myrmidon.components.type; package org.apache.myrmidon.components.type;


import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.ComponentManager;


/** /**
@@ -15,7 +16,7 @@ import org.apache.avalon.framework.component.ComponentManager;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public interface TypeManager public interface TypeManager
extends ComponentManager
extends Component, ComponentManager
{ {
String ROLE = "org.apache.myrmidon.components.type.TypeManager"; String ROLE = "org.apache.myrmidon.components.type.TypeManager";




Loading…
Cancel
Save