diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java index 3700d6f6b..a6ddce7ad 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java @@ -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 ); } diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java index e4e78ae7e..232ab0d4c 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java @@ -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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java index e24a9bac4..4e91ebd27 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java @@ -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 ) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java index cb2a7eaf1..1941c0e8b 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultTskDeployer.java @@ -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" ); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultComponentFactory.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeFactory.java similarity index 65% rename from proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultComponentFactory.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeFactory.java index b89c8e424..8977999cf 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultComponentFactory.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeFactory.java @@ -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 Peter Donald * @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; diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java index 59f4b2bc5..34b21c188 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/DefaultTypeManager.java @@ -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" ); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeException.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeException.java new file mode 100644 index 000000000..a510be9be --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeException.java @@ -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 Peter Donald + */ +public final class TypeException + extends CascadingException +{ + /** + * Construct a new TypeException instance. + * + * @param message The detail message for this exception. + */ + public TypeException( final String message ) + { + this( message, null ); + } + + /** + * Construct a new TypeException 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 ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/ComponentFactory.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeFactory.java similarity index 74% rename from proposal/myrmidon/src/java/org/apache/myrmidon/components/type/ComponentFactory.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeFactory.java index 5a44f04d5..1cddc0387 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/ComponentFactory.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeFactory.java @@ -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 Peter Donald * @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; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java index 78a89c069..7811993fa 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypeManager.java @@ -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; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypedComponentSelector.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypedComponentSelector.java index 0eeec2181..e1e60167c 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypedComponentSelector.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/type/TypedComponentSelector.java @@ -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 ); + } } } }