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";
+}