Browse Source

Started converting runtime so type instances don't have to implement Avalons Component interface.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269089 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
165ec8163b
10 changed files with 82 additions and 51 deletions
  1. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java
  2. +2
    -3
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java
  3. +2
    -3
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java
  4. +8
    -14
      proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java
  5. +16
    -18
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeFactory.java
  6. +1
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java
  7. +40
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeException.java
  8. +3
    -6
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeFactory.java
  9. +1
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java
  10. +7
    -3
      proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypedComponentSelector.java

+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java View File

@@ -18,7 +18,7 @@ import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.components.converter.ConverterRegistry;
import org.apache.myrmidon.components.deployer.DeploymentException;
import org.apache.myrmidon.components.deployer.TskDeployer;
import org.apache.myrmidon.components.type.DefaultComponentFactory;
import org.apache.myrmidon.components.type.DefaultTypeFactory;
import org.apache.myrmidon.components.type.TypeManager;
import org.apache.myrmidon.converter.Converter;

@@ -111,7 +111,7 @@ public class RegisterConverter
{
m_converterRegistry.registerConverter( m_classname, m_sourceType, m_destinationType );

final DefaultComponentFactory factory = new DefaultComponentFactory( new URL[] { url } );
final DefaultTypeFactory factory = new DefaultTypeFactory( new URL[] { url } );
factory.addNameClassMapping( m_classname, m_classname );

try { m_typeManager.registerType( Converter.ROLE, m_classname, factory ); }


+ 2
- 3
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java View File

@@ -11,7 +11,7 @@ import java.net.URL;
import org.apache.myrmidon.api.DataType;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.components.deployer.DeploymentException;
import org.apache.myrmidon.components.type.DefaultComponentFactory;
import org.apache.myrmidon.components.type.DefaultTypeFactory;

/**
* Method to register a single datatype.
@@ -36,8 +36,7 @@ public class RegisterDataType
}
else
{
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
final DefaultTypeFactory factory = new DefaultTypeFactory( new URL[] { url } );
factory.addNameClassMapping( name, className );
try { getTypeManager().registerType( DataType.ROLE, name, factory ); }
catch( final Exception e )


+ 2
- 3
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java View File

@@ -11,7 +11,7 @@ import java.net.URL;
import org.apache.myrmidon.api.Task;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.components.deployer.DeploymentException;
import org.apache.myrmidon.components.type.DefaultComponentFactory;
import org.apache.myrmidon.components.type.DefaultTypeFactory;

/**
* Method to register a single tasklet.
@@ -36,8 +36,7 @@ public class RegisterTasklet
}
else
{
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
final DefaultTypeFactory factory = new DefaultTypeFactory( new URL[] { url } );
factory.addNameClassMapping( name, className );
try { getTypeManager().registerType( Task.ROLE, name, factory ); }
catch( final Exception e )


+ 8
- 14
proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java View File

@@ -28,8 +28,7 @@ import org.apache.myrmidon.api.Task;
import org.apache.myrmidon.api.DataType;
import org.apache.myrmidon.components.converter.ConverterRegistry;
import org.apache.myrmidon.components.executor.Executor;
import org.apache.myrmidon.components.type.ComponentFactory;
import org.apache.myrmidon.components.type.DefaultComponentFactory;
import org.apache.myrmidon.components.type.DefaultTypeFactory;
import org.apache.myrmidon.components.type.TypeManager;
import org.apache.myrmidon.converter.Converter;
import org.xml.sax.SAXException;
@@ -116,9 +115,7 @@ public class DefaultTskDeployer
throws DeploymentException
{
final Configuration taskdefs = loadConfiguration( zipFile, TSKDEF_FILE );

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

try
{
@@ -164,8 +161,7 @@ public class DefaultTskDeployer
{
if( converters[ i ].getAttribute( "classname" ).equals( name ) )
{
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
final DefaultTypeFactory factory = new DefaultTypeFactory( new URL[] { url } );
handleConverter( converters[ i ], url, factory );
break;
}
@@ -196,8 +192,7 @@ public class DefaultTskDeployer
{
if( datatypes[ i ].getAttribute( "name" ).equals( name ) )
{
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
final DefaultTypeFactory factory = new DefaultTypeFactory( new URL[] { url } );
handleDataType( datatypes[ i ], url, factory );
break;
}
@@ -227,8 +222,7 @@ public class DefaultTskDeployer
{
if( tasks[ i ].getAttribute( "name" ).equals( name ) )
{
final DefaultComponentFactory factory =
new DefaultComponentFactory( new URL[] { url } );
final DefaultTypeFactory factory = new DefaultTypeFactory( new URL[] { url } );
handleTask( tasks[ i ], url, factory );
break;
}
@@ -336,7 +330,7 @@ public class DefaultTskDeployer

private void handleConverter( final Configuration converter,
final URL url,
final DefaultComponentFactory factory )
final DefaultTypeFactory factory )
throws Exception
{
final String name = converter.getAttribute( "classname" );
@@ -354,7 +348,7 @@ public class DefaultTskDeployer

private void handleTask( final Configuration task,
final URL url,
final DefaultComponentFactory factory )
final DefaultTypeFactory factory )
throws Exception
{
final String name = task.getAttribute( "name" );
@@ -369,7 +363,7 @@ public class DefaultTskDeployer

private void handleDataType( final Configuration datatype,
final URL url,
final DefaultComponentFactory factory )
final DefaultTypeFactory factory )
throws Exception
{
final String name = datatype.getAttribute( "name" );


proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultComponentFactory.java → proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeFactory.java View File

@@ -10,17 +10,15 @@ package org.apache.myrmidon.components.type;
import java.net.URL;
import java.util.HashMap;
import java.net.URLClassLoader;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;

/**
* Create a component based on name.
* Create a type instance based on name.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
* @version CVS $Revision$ $Date$
*/
public class DefaultComponentFactory
implements ComponentFactory
public class DefaultTypeFactory
implements TypeFactory
{
///A Map of shortnames to classnames
private final HashMap m_classNames = new HashMap();
@@ -34,18 +32,18 @@ public class DefaultComponentFactory
///The parent classLoader (if any)
private ClassLoader m_classLoader;

public DefaultComponentFactory( final URL[] urls )
public DefaultTypeFactory( final URL[] urls )
{
this( urls, Thread.currentThread().getContextClassLoader() );
}

public DefaultComponentFactory( final URL[] urls, final ClassLoader parent )
public DefaultTypeFactory( final URL[] urls, final ClassLoader parent )
{
m_urls = urls;
m_parent = parent;
}

public DefaultComponentFactory( final ClassLoader classLoader )
public DefaultTypeFactory( final ClassLoader classLoader )
{
this( null, null );
m_classLoader = classLoader;
@@ -57,36 +55,36 @@ public class DefaultComponentFactory
}

/**
* Create a Component with appropriate name.
* Create a type instance with appropriate name.
*
* @param name the name
* @return the created component
* @exception ComponentException if an error occurs
* @return the created instance
* @exception TypeException if an error occurs
*/
public Component create( final String name )
throws ComponentException
public Object create( final String name )
throws TypeException
{
final String className = getClassName( name );

try
{
return (Component)getClassLoader().loadClass( className ).newInstance();
return getClassLoader().loadClass( className ).newInstance();
}
catch( final Exception e )
{
throw new ComponentException( "Unable to instantiate '" + name + "'", e );
throw new TypeException( "Unable to instantiate '" + name + "'", e );
}
}

private String getClassName( final String name )
throws ComponentException
throws TypeException
{
final String className = (String)m_classNames.get( name );

if( null == className )
{
throw new ComponentException( "Malconfigured factory, no clasname for '" +
name + "'" );
throw new TypeException( "Malconfigured factory, no clasname for '" +
name + "'" );
}
return className;

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

@@ -56,7 +56,7 @@ public class DefaultTypeManager

public void registerType( final String role,
final String shorthandName,
final ComponentFactory factory )
final TypeFactory factory )
throws Exception
{
final TypedComponentSelector selector = createSelector( role + "Selector" );


+ 40
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeException.java View File

@@ -0,0 +1,40 @@
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.myrmidon.components.type;

import org.apache.avalon.framework.CascadingException;

/**
* Exception to indicate problem with type instantiating.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public final class TypeException
extends CascadingException
{
/**
* Construct a new <code>TypeException</code> instance.
*
* @param message The detail message for this exception.
*/
public TypeException( final String message )
{
this( message, null );
}

/**
* Construct a new <code>TypeException</code> instance.
*
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
public TypeException( final String message, final Throwable throwable )
{
super( message, throwable );
}
}

proposal/myrmidon/src/java/org/apache/myrmidon/components/type/ComponentFactory.java → proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeFactory.java View File

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

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

/**
* Create a component based on role and hint.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
* @version CVS $Revision$ $Date$
*/
public interface ComponentFactory
public interface TypeFactory
{
/**
* Create a Component with appropriate name.
@@ -25,6 +22,6 @@ public interface ComponentFactory
* @return the created component
* @exception ComponentException if an error occurs
*/
Component create( String name )
throws ComponentException;
Object create( String name )
throws TypeException;
}

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

@@ -20,6 +20,6 @@ public interface TypeManager
{
String ROLE = "org.apache.myrmidon.components.type.TypeManager";

void registerType( String role, String shorthandName, ComponentFactory factory )
void registerType( String role, String shorthandName, TypeFactory factory )
throws Exception;
}

+ 7
- 3
proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypedComponentSelector.java View File

@@ -90,7 +90,7 @@ public class TypedComponentSelector
/**
* Populate the ComponentSelector.
*/
public void register( final String name, final ComponentFactory factory )
public void register( final String name, final TypeFactory factory )
{
m_factorys.put( name, factory );
}
@@ -114,12 +114,16 @@ public class TypedComponentSelector
private Component createComponent( final String name )
throws ComponentException
{
final ComponentFactory factory = (ComponentFactory)m_factorys.get( name );
final TypeFactory factory = (TypeFactory)m_factorys.get( name );
if( null == factory ) return null;
else
{
return factory.create( name );
try { return (Component)factory.create( name ); }
catch( final TypeException te )
{
throw new ComponentException( "Failed to create type " + name, te );
}
}
}
}

Loading…
Cancel
Save