diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/builder/DefaultProjectBuilder.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/builder/DefaultProjectBuilder.java index 174c5b413..0f69668fd 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/builder/DefaultProjectBuilder.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/builder/DefaultProjectBuilder.java @@ -16,10 +16,11 @@ import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; +import org.apache.avalon.excalibur.util.StringUtil; import org.apache.avalon.framework.ExceptionUtil; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; -import org.apache.avalon.framework.configuration.SAXConfigurationHandler; +import org.apache.avalon.framework.configuration.ClassicSAXConfigurationHandler; import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.avalon.framework.parameters.Parameters; import org.apache.log.Logger; @@ -75,7 +76,7 @@ public class DefaultProjectBuilder return result; } - final SAXConfigurationHandler handler = new SAXConfigurationHandler(); + final ClassicSAXConfigurationHandler handler = new ClassicSAXConfigurationHandler(); process( systemID, handler ); @@ -92,7 +93,7 @@ public class DefaultProjectBuilder } protected void process( final URL systemID, - final SAXConfigurationHandler handler ) + final ClassicSAXConfigurationHandler handler ) throws Exception { final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 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 ca46a6fb1..ca6b53a05 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.interfaces.converter.MasterConverter; import org.apache.myrmidon.interfaces.deployer.Deployer; import org.apache.myrmidon.interfaces.deployer.DeploymentException; import org.apache.myrmidon.interfaces.executor.Executor; +import org.apache.myrmidon.interfaces.extensions.ExtensionManager; import org.apache.myrmidon.interfaces.embeddor.Embeddor; import org.apache.myrmidon.interfaces.model.Project; import org.apache.myrmidon.interfaces.role.RoleManager; @@ -57,6 +58,7 @@ public class DefaultEmbeddor private TypeManager m_typeManager; private MasterConverter m_converter; private ConverterRegistry m_converterRegistry; + private ExtensionManager m_extensionManager; private Executor m_executor; private Configurer m_configurer; @@ -197,6 +199,7 @@ public class DefaultEmbeddor */ public void dispose() { + m_extensionManager = null; m_aspectManager = null; m_roleManager = null; m_converterRegistry = null; @@ -228,26 +231,20 @@ public class DefaultEmbeddor defaults.setParameter( "myrmidon.lib.path", "lib" ); //create all the default properties for components - defaults.setParameter( AspectManager.ROLE, - "org.apache.myrmidon.components.aspect.DefaultAspectManager" ); - defaults.setParameter( RoleManager.ROLE, - "org.apache.myrmidon.components.role.DefaultRoleManager" ); - defaults.setParameter( MasterConverter.ROLE, - "org.apache.myrmidon.components.converter.DefaultMasterConverter" ); - defaults.setParameter( ConverterRegistry.ROLE, - "org.apache.myrmidon.components.converter.DefaultConverterRegistry" ); - defaults.setParameter( TypeManager.ROLE, - "org.apache.myrmidon.components.type.DefaultTypeManager" ); + final String PREFIX = "org.apache.myrmidon.components."; + defaults.setParameter( AspectManager.ROLE, PREFIX + "aspect.DefaultAspectManager" ); + defaults.setParameter( RoleManager.ROLE, PREFIX + "role.DefaultRoleManager" ); + defaults.setParameter( MasterConverter.ROLE, PREFIX + "converter.DefaultMasterConverter" ); + defaults.setParameter( ConverterRegistry.ROLE, PREFIX + "converter.DefaultConverterRegistry" ); + defaults.setParameter( TypeManager.ROLE, PREFIX + "type.DefaultTypeManager" ); defaults.setParameter( Executor.ROLE, //"org.apache.myrmidon.components.executor.DefaultExecutor" ); //"org.apache.myrmidon.components.executor.PrintingExecutor" ); - "org.apache.myrmidon.components.executor.AspectAwareExecutor" ); - defaults.setParameter( Workspace.ROLE, - "org.apache.myrmidon.components.workspace.DefaultWorkspace" ); - defaults.setParameter( Deployer.ROLE, - "org.apache.myrmidon.components.deployer.DefaultDeployer" ); - defaults.setParameter( Configurer.ROLE, - "org.apache.myrmidon.components.configurer.DefaultConfigurer" ); + PREFIX + "executor.AspectAwareExecutor" ); + defaults.setParameter( Workspace.ROLE, PREFIX + "workspace.DefaultWorkspace" ); + defaults.setParameter( Deployer.ROLE, PREFIX + "deployer.DefaultDeployer" ); + defaults.setParameter( Configurer.ROLE, PREFIX + "configurer.DefaultConfigurer" ); + defaults.setParameter( ExtensionManager.ROLE, PREFIX + "extensions.DefaultExtensionManager" ); return defaults; } @@ -269,6 +266,7 @@ public class DefaultEmbeddor //Following components required when Myrmidon allows user deployment of tasks etal. componentManager.put( RoleManager.ROLE, m_roleManager ); componentManager.put( Deployer.ROLE, m_deployer ); + componentManager.put( ExtensionManager.ROLE, m_extensionManager ); //Following components used when want to types (ie tasks/mappers etc) componentManager.put( TypeManager.ROLE, m_typeManager ); @@ -296,6 +294,9 @@ public class DefaultEmbeddor component = getParameter( ConverterRegistry.ROLE ); m_converterRegistry = (ConverterRegistry)createComponent( component, ConverterRegistry.class ); + component = getParameter( ExtensionManager.ROLE ); + m_extensionManager = (ExtensionManager)createComponent( component, ExtensionManager.class ); + component = getParameter( MasterConverter.ROLE ); m_converter = (MasterConverter)createComponent( component, MasterConverter.class ); @@ -326,6 +327,7 @@ public class DefaultEmbeddor private void setupComponents() throws Exception { + setupComponent( m_extensionManager ); setupComponent( m_roleManager ); setupComponent( m_aspectManager ); setupComponent( m_converterRegistry ); @@ -351,6 +353,11 @@ public class DefaultEmbeddor ((Composable)component).compose( m_componentManager ); } + if( component instanceof Parameterizable ) + { + ((Parameterizable)component).parameterize( m_parameters ); + } + if( component instanceof Initializable ) { ((Initializable)component).initialize(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/extensions/DefaultExtensionManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/extensions/DefaultExtensionManager.java new file mode 100644 index 000000000..fd26259e2 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/extensions/DefaultExtensionManager.java @@ -0,0 +1,82 @@ +/* + * 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.extensions; + +import java.io.File; +import org.apache.avalon.excalibur.extension.DefaultPackageRepository; +import org.apache.avalon.excalibur.util.StringUtil; +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.activity.Initializable; +import org.apache.avalon.framework.logger.Loggable; +//import org.apache.avalon.framework.logger.LogEnabled; +//import org.apache.avalon.framework.logger.Logger; +import org.apache.avalon.framework.parameters.ParameterException; +import org.apache.avalon.framework.parameters.Parameterizable; +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.myrmidon.interfaces.extensions.ExtensionManager; +import org.apache.log.Logger; + +/** + * PhoenixPackageRepository + * + * @author Peter Donald + * @version $Revision$ $Date$ + */ +public class DefaultExtensionManager + extends DefaultPackageRepository + implements Loggable, Parameterizable, Initializable, Disposable, ExtensionManager +{ + private Logger m_logger; + + private String m_path; + + public DefaultExtensionManager() + { + super( new File[ 0 ] ); + } + + //enableLogging + public void setLogger( final Logger logger ) + { + m_logger = logger; + } + + public void parameterize( final Parameters parameters ) + throws ParameterException + { + final String phoenixHome = parameters.getParameter( "myrmidon.home" ); + final String defaultExtPath = phoenixHome + File.separator + "ext"; + m_path = parameters.getParameter( "myrmidon.ext.path", defaultExtPath ); + } + + public void initialize() + throws Exception + { + final String[] pathElements = StringUtil.split( m_path, "|" ); + + final File[] dirs = new File[ pathElements.length ]; + for( int i = 0; i < dirs.length; i++ ) + { + dirs[ i ] = new File( pathElements[ i ] ); + } + + setPath( dirs ); + + scanPath(); + } + + public void dispose() + { + clearCache(); + } + + protected void debug( final String message ) + { + m_logger.debug( message ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java new file mode 100644 index 000000000..a7bda7f3e --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java @@ -0,0 +1,23 @@ +/* + * 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.interfaces.extensions; + +import org.apache.avalon.framework.component.Component; +import org.apache.avalon.excalibur.extension.PackageRepository; + +/** + * PackageRepository + * + * @author Peter Donald + * @version $Revision$ $Date$ + */ +public interface ExtensionManager + extends PackageRepository, Component +{ + String ROLE = "org.apache.myrmidon.interfaces.extensions.ExtensionManager"; +}