diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java index f4467d8a1..0343eef0c 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java @@ -15,9 +15,9 @@ import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.io.FileUtil; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.ContextException; -import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.logger.Logger; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.interfaces.model.DefaultNameValidator; @@ -36,18 +36,18 @@ public class DefaultTaskContext ResourceManager.getPackageResources( DefaultTaskContext.class ); // Property name validator allows digits, but no internal whitespace. - private static DefaultNameValidator m_propertyNameValidator = new DefaultNameValidator(); + private static DefaultNameValidator c_propertyNameValidator = new DefaultNameValidator(); static { - m_propertyNameValidator.setAllowInternalWhitespace( false ); + c_propertyNameValidator.setAllowInternalWhitespace( false ); } private final Map m_contextData = new Hashtable(); private final TaskContext m_parent; - private ServiceManager m_serviceManager; - private Logger m_logger; - private PropertyResolver m_propertyResolver; + private final ServiceManager m_serviceManager; + private final Logger m_logger; + private final PropertyResolver m_propertyResolver; /** * Constructor that takes both parent context and a service directory. @@ -55,10 +55,12 @@ public class DefaultTaskContext public DefaultTaskContext( final TaskContext parent, final ServiceManager serviceManager, final Logger logger ) + throws TaskException { m_parent = parent; m_serviceManager = serviceManager; m_logger = logger; + m_propertyResolver = (PropertyResolver)getService( PropertyResolver.class ); } /** @@ -96,7 +98,7 @@ public class DefaultTaskContext { // Try this context first final String name = serviceClass.getName(); - if( m_serviceManager != null && m_serviceManager.hasService( name ) ) + if( null != m_serviceManager && m_serviceManager.hasService( name ) ) { try { @@ -148,15 +150,8 @@ public class DefaultTaskContext { try { - // Lazy lookup of the PropertyResolver - if( m_propertyResolver == null ) - { - m_propertyResolver = (PropertyResolver)getService( PropertyResolver.class ); - } - final Object object = m_propertyResolver.resolveProperties( value, this ); - if( null == object ) { final String message = REZ.getString( "null-resolved-value.error", value ); @@ -347,9 +342,8 @@ public class DefaultTaskContext public TaskContext createSubContext( final String name ) throws TaskException { - final Logger logger = m_logger.getChildLogger( name ); final DefaultTaskContext context = - new DefaultTaskContext( this, m_serviceManager, logger ); + new DefaultTaskContext( this, m_serviceManager, m_logger ); context.setProperty( TaskContext.NAME, getName() + "." + name ); context.setProperty( TaskContext.BASE_DIRECTORY, getBaseDirectory() ); @@ -378,7 +372,7 @@ public class DefaultTaskContext { try { - m_propertyNameValidator.validate( name ); + c_propertyNameValidator.validate( name ); } catch( Exception e ) { diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java index 0aac4ed8c..d500de173 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java @@ -16,7 +16,6 @@ import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.logger.AbstractLogEnabled; -import org.apache.avalon.framework.logger.LogKitLogger; import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.parameters.ParameterException; import org.apache.avalon.framework.parameters.Parameterizable; @@ -25,7 +24,6 @@ import org.apache.avalon.framework.service.DefaultServiceManager; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.Serviceable; -import org.apache.log.Hierarchy; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.framework.conditions.Condition; @@ -62,8 +60,6 @@ public class DefaultWorkspace private HashMap m_entries = new HashMap(); private TypeManager m_typeManager; private Deployer m_deployer; - private Hierarchy m_hierarchy; - private int m_projectID; /** * Add a listener to project events. @@ -110,11 +106,6 @@ public class DefaultWorkspace throws Exception { m_baseContext = createBaseContext(); - - m_hierarchy = new Hierarchy(); - - final LogTargetToListenerAdapter target = new LogTargetToListenerAdapter( m_listenerSupport ); - m_hierarchy.setDefaultLogTarget( target ); } /** @@ -258,8 +249,7 @@ public class DefaultWorkspace // Create a logger final Logger logger = - new LogKitLogger( m_hierarchy.getLoggerFor( "project" + m_projectID ) ); - m_projectID++; + new RoutingLogger( RoutingLogger.LEVEL_DEBUG, m_listenerSupport ); // Create and configure the context final DefaultTaskContext context = diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/LogTargetToListenerAdapter.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/LogTargetToListenerAdapter.java deleted file mode 100644 index c62e470f3..000000000 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/LogTargetToListenerAdapter.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.txt file. - */ -package org.apache.myrmidon.components.workspace; - -import org.apache.log.LogEvent; -import org.apache.log.LogTarget; - -/** - * Adapter between Avalon LogKit and Project listener interfaces. - * - * @author Peter Donald - * @version $Revision$ $Date$ - */ -public class LogTargetToListenerAdapter - implements LogTarget -{ - private final ProjectListenerSupport m_listenerSupport; - - /** - * Constructor taking listener to convert to. - * - * @param listenerSupport the ProjectListener - */ - public LogTargetToListenerAdapter( final ProjectListenerSupport listenerSupport ) - { - m_listenerSupport = listenerSupport; - } - - /** - * Process a log event. - * - * @param event the event - */ - public void processEvent( final LogEvent event ) - { - m_listenerSupport.log( event.getMessage(), event.getThrowable() ); - } -} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/RoutingLogger.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/RoutingLogger.java new file mode 100644 index 000000000..d4d7e843a --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/RoutingLogger.java @@ -0,0 +1,44 @@ +/* + * 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.txt file. + */ +package org.apache.myrmidon.components.workspace; + +import org.apache.myrmidon.frontends.BasicLogger; + +/** + * A basic logger that just routes the messages to the ProjectListenerSupport. + * + * @author Peter Donald + * @version $Revision$ $Date$ + */ +final class RoutingLogger + extends BasicLogger +{ + /** + * The endpoint of all the logging messages. + */ + private final ProjectListenerSupport m_listenerSupport; + + /** + * Create a Logger that routes messages at specified level + * to specified support. + */ + public RoutingLogger( final int logLevel, + final ProjectListenerSupport listenerSupport ) + { + super( null, logLevel ); + m_listenerSupport = listenerSupport; + } + + /** + * Utility method to output messages. + */ + protected void output( final String message, final Throwable throwable ) + { + m_listenerSupport.log( message, throwable ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/BasicLogger.java b/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/BasicLogger.java index 5fe6cb84a..46f68ed7b 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/BasicLogger.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/BasicLogger.java @@ -16,7 +16,7 @@ import org.apache.avalon.framework.logger.Logger; * @author Peter Donald * @version $Revision$ $Date$ */ -class BasicLogger +public class BasicLogger implements Logger { public final static int LEVEL_DEBUG = 0; @@ -246,7 +246,7 @@ class BasicLogger /** * Utility method to output messages. */ - private void output( final String message, final Throwable throwable ) + protected void output( final String message, final Throwable throwable ) { final StringBuffer sb = new StringBuffer( m_prefix ); if( null != message )