From 9243e2436d957b1b2ad1b4b17eeb4c99924ac247 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Sun, 17 Jun 2001 00:22:23 +0000 Subject: [PATCH] Changed embeddor so that a new ProjectBuilder is instantiated on every call to createProject. There is no longer a globally Cached and configured ProjectManager. Also retrieved the ProjectBuilder from TypeManager. This allows arbitrary ProjectBuilder classes to be registered by dropping in new jars to lib directory. Made the type of ProjectBuilder be specified by type parameter or if that is null the extention of input build file. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269189 13f79535-47bb-0310-9956-ffa450edef68 --- .../components/embeddor/DefaultEmbeddor.java | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java index 896a88eeb..3868a5ad0 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java @@ -30,6 +30,7 @@ import org.apache.myrmidon.components.deployer.DeploymentException; import org.apache.myrmidon.components.deployer.RoleManager; import org.apache.myrmidon.components.executor.Executor; import org.apache.myrmidon.components.manager.ProjectManager; +import org.apache.myrmidon.components.type.TypeFactory; import org.apache.myrmidon.components.type.TypeManager; import org.apache.myrmidon.components.model.Project; @@ -43,7 +44,6 @@ public class DefaultEmbeddor extends AbstractLoggable implements Embeddor { - private ProjectBuilder m_builder; private Deployer m_deployer; private RoleManager m_roleManager; @@ -85,21 +85,41 @@ public class DefaultEmbeddor type = guessTypeFor( location ); } - final ProjectBuilder builder = getProjectBuilder( type ); - return builder.build( location, parameters ); + final ProjectBuilder builder = getProjectBuilder( type, parameters ); + return builder.build( location ); } private String guessTypeFor( final String location ) { - //TODO: use hueristics to map filename extention to type - return "ant"; + return FileUtil.getExtension( location ); } - private ProjectBuilder getProjectBuilder( final String type ) + private ProjectBuilder getProjectBuilder( final String type, + final Parameters parameters ) throws Exception { - //FIXME: Should not be ignoring type - return m_builder; + + final TypeFactory factory = m_typeManager.getFactory( ProjectBuilder.ROLE ); + final ProjectBuilder builder = (ProjectBuilder)factory.create( type ); + + setupLogger( builder ); + + if( builder instanceof Composable ) + { + ((Composable)builder).compose( m_componentManager ); + } + + if( builder instanceof Parameterizable ) + { + ((Parameterizable)builder).parameterize( parameters ); + } + + if( builder instanceof Initializable ) + { + ((Initializable)builder).initialize(); + } + + return builder; } public ProjectManager createProjectManager( final Project project, @@ -179,7 +199,6 @@ public class DefaultEmbeddor m_converterRegistry = null; m_converter = null; m_executor = null; - m_builder = null; m_deployer = null; m_configurer = null; m_componentManager = null; @@ -221,8 +240,9 @@ public class DefaultEmbeddor "org.apache.myrmidon.components.executor.AspectAwareExecutor" ); defaults.setParameter( ProjectManager.ROLE, "org.apache.myrmidon.components.manager.DefaultProjectManager" ); - defaults.setParameter( ProjectBuilder.ROLE, - "org.apache.myrmidon.components.builder.DefaultProjectBuilder" ); + //defaults.setParameter( ProjectBuilder.ROLE, + //"org.apache.myrmidon.components.builder.DefaultProjectBuilder" ); + //"org.apache.myrmidon.components.builder.XSLProjectBuilder" ); defaults.setParameter( Deployer.ROLE, "org.apache.myrmidon.components.deployer.DefaultDeployer" ); defaults.setParameter( Configurer.ROLE, @@ -243,7 +263,7 @@ public class DefaultEmbeddor componentManager.put( MasterConverter.ROLE, m_converter ); //Following components required when Myrmidon is used as build tool - componentManager.put( ProjectBuilder.ROLE, m_builder ); + componentManager.put( Embeddor.ROLE, this ); //Following components required when Myrmidon allows user deployment of tasks etal. componentManager.put( RoleManager.ROLE, m_roleManager ); @@ -295,9 +315,6 @@ public class DefaultEmbeddor component = getParameter( Executor.ROLE ); m_executor = (Executor)createComponent( component, Executor.class ); - - component = getParameter( ProjectBuilder.ROLE ); - m_builder = (ProjectBuilder)createComponent( component, ProjectBuilder.class ); } /** @@ -313,7 +330,6 @@ public class DefaultEmbeddor setupComponent( m_converterRegistry ); setupComponent( m_converter ); setupComponent( m_executor ); - setupComponent( m_builder ); setupComponent( m_deployer ); setupComponent( m_configurer ); }