git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272351 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -252,7 +252,7 @@ Legal: | |||
| --> | |||
| <patternset refid="myrmidon-launcher.include"/> | |||
| <patternset refid="myrmidon-api.include"/> | |||
| <patternset refid="myrmidon-framework.include"/> | |||
| <patternset refid="myrmidon-container.include"/> | |||
| <patternset refid="ant1.todo.include"/> | |||
| <patternset refid="selftest.include"/> | |||
| @@ -273,11 +273,8 @@ Legal: | |||
| <include name="org/apache/myrmidon/launcher/**" /> | |||
| </patternset> | |||
| <patternset id="myrmidon-api.include"> | |||
| <include name="org/apache/myrmidon/api/**" /> | |||
| <include name="org/apache/myrmidon/aspects/**" /> | |||
| <patternset id="myrmidon-framework.include"> | |||
| <include name="org/apache/myrmidon/interfaces/**" /> | |||
| <include name="org/apache/myrmidon/listeners/**" /> | |||
| <include name="org/apache/myrmidon/framework/**" /> | |||
| </patternset> | |||
| @@ -389,7 +386,7 @@ Legal: | |||
| destdir="${gen.dir}" | |||
| classpathref="project.class.path"> | |||
| <fileset dir="${java.dir}"> | |||
| <patternset refid="myrmidon-api.include"/> | |||
| <patternset refid="myrmidon-framework.include"/> | |||
| </fileset> | |||
| </antlib-descriptor> | |||
| @@ -439,13 +436,13 @@ Legal: | |||
| <patternset refid="myrmidon-container.include"/> | |||
| </antlib-jar> | |||
| <antlib-jar jarfile="${build.lib}/myrmidon-api.jar" | |||
| <antlib-jar jarfile="${build.lib}/myrmidon-framework.jar" | |||
| basedir="${build.classes}" | |||
| manifest="${manifest.dir}/myrmidon-api.mf" | |||
| rolesDescriptor="${gen.dir}/builtin-ant-roles.xml" | |||
| descriptor="${gen.dir}/builtin-ant-descriptor.xml" | |||
| servicesDescriptor="${manifest.dir}/core-services.xml" > | |||
| <patternset refid="myrmidon-api.include"/> | |||
| <patternset refid="myrmidon-framework.include"/> | |||
| </antlib-jar> | |||
| <antlib-jar jarfile="${build.lib}/ant1_todo.jar" | |||
| @@ -1,75 +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.api; | |||
| import java.io.File; | |||
| /** | |||
| * This is the class that Task writers should extend to provide custom tasks. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public abstract class AbstractTask | |||
| implements Task | |||
| { | |||
| ///Variable to hold context for use by sub-classes | |||
| private TaskContext m_context; | |||
| /** | |||
| * Retrieve context from container. | |||
| * | |||
| * @param context the context | |||
| */ | |||
| public void contextualize( final TaskContext context ) | |||
| throws TaskException | |||
| { | |||
| m_context = context; | |||
| } | |||
| /** | |||
| * Execute task. | |||
| * This method is called to perform actual work associated with task. | |||
| * It is called after Task has been configured. | |||
| * | |||
| * @exception TaskException if an error occurs | |||
| */ | |||
| public abstract void execute() | |||
| throws TaskException; | |||
| /** | |||
| * Convenience method for sub-class to retrieve context. | |||
| * | |||
| * @return the context | |||
| */ | |||
| protected final TaskContext getContext() | |||
| { | |||
| return m_context; | |||
| } | |||
| /** | |||
| * Convenience method that returns the project's base directory. | |||
| */ | |||
| protected final File getBaseDirectory() | |||
| { | |||
| return getContext().getBaseDirectory(); | |||
| } | |||
| /** | |||
| * Convenience method that locates a service for this task to use. | |||
| * | |||
| * @param serviceClass the service to locate. | |||
| * @return the service, never returns null. | |||
| * @throws TaskException if the service cannot be located. | |||
| */ | |||
| protected final Object getService( final Class serviceClass ) | |||
| throws TaskException | |||
| { | |||
| return getContext().getService( serviceClass ); | |||
| } | |||
| } | |||
| @@ -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.api; | |||
| /** | |||
| * This is the interface that tasks implement to be executed in Myrmidon runtime. | |||
| * | |||
| * Tasks can also choose to implement Avalon Configurable if they wish to directly | |||
| * receive the Configuration data representing the task. If this interface is | |||
| * not implemented then the container will be responsble for mapping configuration | |||
| * onto the task object. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant:role shorthand="task" | |||
| */ | |||
| public interface Task | |||
| { | |||
| String ROLE = Task.class.getName(); | |||
| /** | |||
| * Specify the context in which the task operates in. | |||
| * The Task will use the TaskContext to receive information | |||
| * about it's environment. | |||
| */ | |||
| void contextualize( TaskContext context ) | |||
| throws TaskException; | |||
| /** | |||
| * Execute task. | |||
| * This method is called to perform actual work associated with task. | |||
| * It is called after Task has been Configured. | |||
| * | |||
| * @exception TaskException if task fails to execute | |||
| */ | |||
| void execute() | |||
| throws TaskException; | |||
| } | |||
| @@ -1,224 +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.api; | |||
| import java.io.File; | |||
| import java.util.Map; | |||
| /** | |||
| * This interface represents the <em>Context</em> in which Task is executed. | |||
| * Like other Component APIs the TaskContext represents the communication | |||
| * path between the container and the Task. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public interface TaskContext | |||
| { | |||
| //these are the names of properties that every TaskContext must contain | |||
| String BASE_DIRECTORY = "myrmidon.base.directory"; | |||
| String NAME = "myrmidon.task.name"; | |||
| /** | |||
| * Retrieve Name of task. | |||
| * | |||
| * @return the name | |||
| */ | |||
| String getName(); | |||
| /** | |||
| * Resolve a value according to the context. | |||
| * This involves evaluating the string and replacing | |||
| * ${} sequences with property values. | |||
| * | |||
| * @param value the value to resolve | |||
| * @return the resolved value | |||
| */ | |||
| Object resolveValue( String value ) | |||
| throws TaskException; | |||
| /** | |||
| * Retrieve property for name. | |||
| * | |||
| * @param name the name of property | |||
| * @return the value of property, or null if the property has no value. | |||
| */ | |||
| Object getProperty( String name ); | |||
| /** | |||
| * Retrieve a copy of all the properties accessible via context. | |||
| * | |||
| * @return the map of all property names to values | |||
| */ | |||
| Map getProperties() | |||
| throws TaskException; | |||
| /** | |||
| * Retrieve a service that is offered by the runtime. | |||
| * The actual services registered and in place for the | |||
| * task is determined by the container. The returned service | |||
| * <b>MUST</b> implement the specified interface. | |||
| * | |||
| * @param serviceClass the interface class that defines the service | |||
| * @return an instance of the service implementing interface specified by parameter | |||
| * @exception TaskException is thrown when the service is unavailable or not supported | |||
| */ | |||
| Object getService( Class serviceClass ) | |||
| throws TaskException; | |||
| /** | |||
| * Retrieve base directory. | |||
| * | |||
| * @return the base directory | |||
| */ | |||
| File getBaseDirectory(); | |||
| /** | |||
| * Resolve filename. | |||
| * This involves resolving it against baseDirectory and | |||
| * removing ../ and ./ references. It also means formatting | |||
| * it appropriately for the particular OS (ie different OS have | |||
| * different volumes, file conventions etc) | |||
| * | |||
| * @param filename the filename to resolve | |||
| * @return the resolved file | |||
| */ | |||
| File resolveFile( String filename ) | |||
| throws TaskException; | |||
| /** | |||
| * Set property value in current context. | |||
| * | |||
| * @param name the name of property | |||
| * @param value the value of property | |||
| */ | |||
| void setProperty( String name, Object value ) | |||
| throws TaskException; | |||
| /** | |||
| * Log a debug message. | |||
| * | |||
| * @param message the message | |||
| */ | |||
| void debug( String message ); | |||
| /** | |||
| * Log a debug message. | |||
| * | |||
| * @param message the message | |||
| * @param throwable the throwable | |||
| */ | |||
| void debug( String message, Throwable throwable ); | |||
| /** | |||
| * Determine if messages of priority "debug" will be logged. | |||
| * | |||
| * @return true if "debug" messages will be logged | |||
| */ | |||
| boolean isDebugEnabled(); | |||
| /** | |||
| * Log a verbose message. | |||
| * | |||
| * @param message the message | |||
| */ | |||
| void verbose( String message ); | |||
| /** | |||
| * Log a verbose message. | |||
| * | |||
| * @param message the message | |||
| * @param throwable the throwable | |||
| */ | |||
| void verbose( String message, Throwable throwable ); | |||
| /** | |||
| * Determine if messages of priority "verbose" will be logged. | |||
| * | |||
| * @return true if "verbose" messages will be logged | |||
| */ | |||
| boolean isVerboseEnabled(); | |||
| /** | |||
| * Log a info message. | |||
| * | |||
| * @param message the message | |||
| */ | |||
| void info( String message ); | |||
| /** | |||
| * Log a info message. | |||
| * | |||
| * @param message the message | |||
| * @param throwable the throwable | |||
| */ | |||
| void info( String message, Throwable throwable ); | |||
| /** | |||
| * Determine if messages of priority "info" will be logged. | |||
| * | |||
| * @return true if "info" messages will be logged | |||
| */ | |||
| boolean isInfoEnabled(); | |||
| /** | |||
| * Log a warn message. | |||
| * | |||
| * @param message the message | |||
| */ | |||
| void warn( String message ); | |||
| /** | |||
| * Log a warn message. | |||
| * | |||
| * @param message the message | |||
| * @param throwable the throwable | |||
| */ | |||
| void warn( String message, Throwable throwable ); | |||
| /** | |||
| * Determine if messages of priority "warn" will be logged. | |||
| * | |||
| * @return true if "warn" messages will be logged | |||
| */ | |||
| boolean isWarnEnabled(); | |||
| /** | |||
| * Log a error message. | |||
| * | |||
| * @param message the message | |||
| */ | |||
| void error( String message ); | |||
| /** | |||
| * Log a error message. | |||
| * | |||
| * @param message the message | |||
| * @param throwable the throwable | |||
| */ | |||
| void error( String message, Throwable throwable ); | |||
| /** | |||
| * Determine if messages of priority "error" will be logged. | |||
| * | |||
| * @return true if "error" messages will be logged | |||
| */ | |||
| boolean isErrorEnabled(); | |||
| /** | |||
| * Create a Child Context. | |||
| * This allows separate hierarchly contexts to be easily constructed. | |||
| * | |||
| * @param name the name of sub-context | |||
| * @return the created TaskContext | |||
| * @exception TaskException if an error occurs | |||
| */ | |||
| TaskContext createSubContext( String name ) | |||
| throws TaskException; | |||
| } | |||
| @@ -1,66 +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.api; | |||
| /** | |||
| * TaskException thrown when a problem with tasks etc. | |||
| * It is cascading so that further embedded information can be contained. | |||
| * ie TaskException was caused by IOException etc. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class TaskException | |||
| extends Exception | |||
| { | |||
| /** | |||
| * The Throwable that caused this exception to be thrown. | |||
| */ | |||
| private final Throwable m_throwable; | |||
| /** | |||
| * Basic constructor for exception that does not specify a message | |||
| */ | |||
| public TaskException() | |||
| { | |||
| this( "", null ); | |||
| } | |||
| /** | |||
| * Basic constructor with a message | |||
| * | |||
| * @param message the message | |||
| */ | |||
| public TaskException( final String message ) | |||
| { | |||
| this( message, null ); | |||
| } | |||
| /** | |||
| * Constructor that builds cascade so that other exception information can be retained. | |||
| * | |||
| * @param message the message | |||
| * @param throwable the throwable | |||
| */ | |||
| public TaskException( final String message, final Throwable throwable ) | |||
| { | |||
| super( message ); | |||
| m_throwable = throwable; | |||
| } | |||
| /** | |||
| * Retrieve root cause of the exception. | |||
| * | |||
| * @return the root cause | |||
| */ | |||
| public final Throwable getCause() | |||
| { | |||
| return m_throwable; | |||
| } | |||
| } | |||
| @@ -1,80 +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.api.metadata; | |||
| /** | |||
| * A ModelElement represents the data necessary to configure | |||
| * the task or sub-object. It usually represents an XML element in a | |||
| * build file and has similar features to XML elements. | |||
| * | |||
| * <p>It has a set of un-ordered attributes with each attribute mapping | |||
| * a key to a value. The ModelElement can also have either a set of ordered | |||
| * sub-elements or text content (one or the other - not both).</p> | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class ModelElement | |||
| { | |||
| /** | |||
| * Return an array containing all the child <code>ModelElement</code>s | |||
| * that are contained within this <code>ModelElement</code>. If this method | |||
| * returns an array containing 1 or more elements then it must return null | |||
| * for getContent() method. | |||
| * | |||
| * @todo determine whether we return null or an empty array when no | |||
| * child elements. | |||
| * @return all the child <code>ModelElement</code>s | |||
| * @see #getContent() | |||
| */ | |||
| public ModelElement[] getChildren() | |||
| { | |||
| return null; | |||
| } | |||
| /** | |||
| * Return an array containing the names of all the attributes stored | |||
| * in this <code>ModelElement</code>. The user can then pass these | |||
| * parameters into the getAttribute() method of this class to get the | |||
| * value of the attribute. | |||
| * | |||
| * @return an array of the attribute names | |||
| * @see #getAttribute(String) | |||
| */ | |||
| public String[] getAttributeNames() | |||
| { | |||
| return null; | |||
| } | |||
| /** | |||
| * Get the value of the attribute passed in. | |||
| * If no such attribute exists return null. | |||
| * | |||
| * @param name the name of the attribute to retrieve value for | |||
| * @return the value of the attribute with specified name or null | |||
| * if no such element. | |||
| */ | |||
| public String getAttribute( final String name ) | |||
| { | |||
| return null; | |||
| } | |||
| /** | |||
| * Retrieve the content of this element if any. Will return | |||
| * null if no content available. Note it is invalid for this | |||
| * method to return a non-null value and the getChildren() | |||
| * method to return an array of 1 or more child elements. | |||
| * | |||
| * @return the content value if any, else null | |||
| * @see #getChildren() | |||
| */ | |||
| public String getContent() | |||
| { | |||
| return null; | |||
| } | |||
| } | |||
| @@ -1,29 +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.api.metadata; | |||
| /** | |||
| * The Modeller interface specifies that the implementing object | |||
| * wishes to handle its own configuration stage. In which case the | |||
| * object is passed the ModelElement representing itself and it uses | |||
| * the element to configure itself. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @see ModelElement | |||
| */ | |||
| public interface Modeller | |||
| { | |||
| /** | |||
| * Pass the object a read-only instance of it's own | |||
| * model. | |||
| * | |||
| * @param element the ModelElement representing object | |||
| */ | |||
| void model( ModelElement element ); | |||
| } | |||
| @@ -1,18 +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.api.metainfo; | |||
| /** | |||
| * This class represents the metadata about the task type. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class TaskInfo | |||
| { | |||
| } | |||
| @@ -1,115 +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.aspects; | |||
| import org.apache.avalon.framework.configuration.Configuration; | |||
| import org.apache.avalon.framework.logger.Logger; | |||
| import org.apache.avalon.framework.parameters.Parameters; | |||
| import org.apache.myrmidon.api.Task; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| /** | |||
| * AspectHandler is the interface through which aspects are handled. | |||
| * | |||
| * @author Conor MacNeill | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public abstract class AbstractAspectHandler | |||
| implements AspectHandler | |||
| { | |||
| private Parameters m_aspectParameters; | |||
| private Configuration[] m_aspectElements; | |||
| private Task m_task; | |||
| private Logger m_logger; | |||
| private Configuration m_taskModel; | |||
| public Configuration preCreate( final Configuration taskModel ) | |||
| throws TaskException | |||
| { | |||
| return taskModel; | |||
| } | |||
| public void aspectSettings( final Parameters parameters, final Configuration[] elements ) | |||
| throws TaskException | |||
| { | |||
| m_aspectParameters = parameters; | |||
| m_aspectElements = elements; | |||
| } | |||
| public void postCreate( final Task task ) | |||
| throws TaskException | |||
| { | |||
| m_task = task; | |||
| } | |||
| public void preLogEnabled( final Logger logger ) | |||
| throws TaskException | |||
| { | |||
| m_logger = logger; | |||
| } | |||
| public void preConfigure( final Configuration taskModel ) | |||
| throws TaskException | |||
| { | |||
| m_taskModel = taskModel; | |||
| } | |||
| public void preExecute() | |||
| throws TaskException | |||
| { | |||
| } | |||
| public void preDestroy() | |||
| throws TaskException | |||
| { | |||
| reset(); | |||
| } | |||
| public boolean error( final TaskException te ) | |||
| throws TaskException | |||
| { | |||
| reset(); | |||
| return false; | |||
| } | |||
| protected void reset() | |||
| { | |||
| m_aspectParameters = null; | |||
| m_aspectElements = null; | |||
| m_task = null; | |||
| m_logger = null; | |||
| m_taskModel = null; | |||
| } | |||
| protected final Configuration getTaskModel() | |||
| { | |||
| return m_taskModel; | |||
| } | |||
| protected final Task getTask() | |||
| { | |||
| return m_task; | |||
| } | |||
| protected final Logger getLogger() | |||
| { | |||
| return m_logger; | |||
| } | |||
| protected final Configuration[] getAspectElements() | |||
| { | |||
| return m_aspectElements; | |||
| } | |||
| protected final Parameters getAspectParameters() | |||
| { | |||
| return m_aspectParameters; | |||
| } | |||
| } | |||
| @@ -1,51 +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.aspects; | |||
| import org.apache.avalon.framework.configuration.Configuration; | |||
| import org.apache.avalon.framework.logger.Logger; | |||
| import org.apache.avalon.framework.parameters.Parameters; | |||
| import org.apache.myrmidon.api.Task; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| /** | |||
| * AspectHandler is the interface through which aspects are handled. | |||
| * | |||
| * @author Conor MacNeill | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant:role shorthand="aspect" | |||
| */ | |||
| public interface AspectHandler | |||
| { | |||
| String ROLE = AspectHandler.class.getName(); | |||
| Configuration preCreate( Configuration taskModel ) | |||
| throws TaskException; | |||
| void aspectSettings( Parameters parameters, Configuration[] children ) | |||
| throws TaskException; | |||
| void postCreate( Task task ) | |||
| throws TaskException; | |||
| void preLogEnabled( Logger logger ) | |||
| throws TaskException; | |||
| void preConfigure( Configuration taskModel ) | |||
| throws TaskException; | |||
| void preExecute() | |||
| throws TaskException; | |||
| void preDestroy() | |||
| throws TaskException; | |||
| boolean error( TaskException te ) | |||
| throws TaskException; | |||
| } | |||
| @@ -1,20 +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.aspects; | |||
| /** | |||
| * A Noop aspect handler that does nothing. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant.type type="aspect" name="noop" | |||
| */ | |||
| public class NoopAspectHandler | |||
| extends AbstractAspectHandler | |||
| { | |||
| } | |||
| @@ -1,68 +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.listeners; | |||
| /** | |||
| * Abstract listener from which to extend. This implementation provedes | |||
| * empty implementions of each of the event methods. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public abstract class AbstractProjectListener | |||
| implements ProjectListener | |||
| { | |||
| /** | |||
| * Notify listener of projectStarted event. | |||
| */ | |||
| public void projectStarted( final ProjectEvent event ) | |||
| { | |||
| } | |||
| /** | |||
| * Notify listener of projectFinished event. | |||
| */ | |||
| public void projectFinished( final ProjectEvent event ) | |||
| { | |||
| } | |||
| /** | |||
| * Notify listener of targetStarted event. | |||
| */ | |||
| public void targetStarted( final TargetEvent event ) | |||
| { | |||
| } | |||
| /** | |||
| * Notify listener of targetFinished event. | |||
| */ | |||
| public void targetFinished( final TargetEvent event ) | |||
| { | |||
| } | |||
| /** | |||
| * Notify listener of taskStarted event. | |||
| */ | |||
| public void taskStarted( final TaskEvent event ) | |||
| { | |||
| } | |||
| /** | |||
| * Notify listener of taskFinished event. | |||
| */ | |||
| public void taskFinished( final TaskEvent event ) | |||
| { | |||
| } | |||
| /** | |||
| * Notify listener of log message event. | |||
| */ | |||
| public void log( final LogEvent event ) | |||
| { | |||
| } | |||
| } | |||
| @@ -1,101 +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.listeners; | |||
| import java.io.PrintWriter; | |||
| import org.apache.avalon.framework.ExceptionUtil; | |||
| /** | |||
| * Classic listener that emulates the default ant1.x listener. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant.type type="listener" name="classic" | |||
| */ | |||
| public class ClassicProjectListener | |||
| extends AbstractProjectListener | |||
| { | |||
| private final PrintWriter m_printWriter; | |||
| public ClassicProjectListener() | |||
| { | |||
| m_printWriter = new PrintWriter( System.out, true ); | |||
| } | |||
| /** | |||
| * Notify listener of targetStarted event. | |||
| */ | |||
| public void targetStarted( final TargetEvent event ) | |||
| { | |||
| writeTargetHeader( event ); | |||
| } | |||
| /** | |||
| * Notify listener of targetFinished event. | |||
| */ | |||
| public void targetFinished( TargetEvent event ) | |||
| { | |||
| getWriter().println(); | |||
| } | |||
| /** | |||
| * Notify listener of log message event. | |||
| */ | |||
| public void log( final LogEvent event ) | |||
| { | |||
| writeMessage( event ); | |||
| writeThrowable( event ); | |||
| } | |||
| /** | |||
| * Returns the PrintWriter to write to. | |||
| */ | |||
| protected PrintWriter getWriter() | |||
| { | |||
| return m_printWriter; | |||
| } | |||
| /** | |||
| * Writes the target header. | |||
| */ | |||
| protected void writeTargetHeader( final TargetEvent event ) | |||
| { | |||
| getWriter().println( event.getTargetName() + ":" ); | |||
| } | |||
| /** | |||
| * Writes a message | |||
| */ | |||
| protected void writeMessage( final LogEvent event ) | |||
| { | |||
| // Write the message | |||
| final String message = event.getMessage(); | |||
| final String task = event.getTaskName(); | |||
| if( null != task ) | |||
| { | |||
| getWriter().println( "\t[" + task + "] " + message ); | |||
| } | |||
| else | |||
| { | |||
| getWriter().println( message ); | |||
| } | |||
| } | |||
| /** | |||
| * Writes a throwable. | |||
| */ | |||
| private void writeThrowable( final LogEvent event ) | |||
| { | |||
| // Write the exception, if any | |||
| final Throwable throwable = event.getThrowable(); | |||
| if( throwable != null ) | |||
| { | |||
| getWriter().println( ExceptionUtil.printStackTrace( throwable, 8, true ) ); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,57 +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.listeners; | |||
| /** | |||
| * Default listener that emulates the Ant 1.x no banner listener. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant.type type="listener" name="default" | |||
| */ | |||
| public class DefaultProjectListener | |||
| extends ClassicProjectListener | |||
| { | |||
| private boolean m_targetOutput; | |||
| /** | |||
| * Notify listener of targetStarted event. | |||
| */ | |||
| public void targetStarted( final TargetEvent target ) | |||
| { | |||
| m_targetOutput = false; | |||
| } | |||
| /** | |||
| * Notify listener of targetFinished event. | |||
| */ | |||
| public void targetFinished( final TargetEvent event ) | |||
| { | |||
| if( m_targetOutput ) | |||
| { | |||
| getWriter().println(); | |||
| } | |||
| } | |||
| /** | |||
| * Notify listener of log message event. | |||
| */ | |||
| public void log( final LogEvent event ) | |||
| { | |||
| // Write the target header, if necessary | |||
| final String target = event.getTargetName(); | |||
| if( target != null && !m_targetOutput ) | |||
| { | |||
| writeTargetHeader( event ); | |||
| m_targetOutput = true; | |||
| } | |||
| // Write the message | |||
| super.log( event ); | |||
| } | |||
| } | |||
| @@ -1,28 +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.listeners; | |||
| /** | |||
| * A log message event. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public interface LogEvent | |||
| extends TaskEvent | |||
| { | |||
| /** | |||
| * Returns the message. | |||
| */ | |||
| String getMessage(); | |||
| /** | |||
| * Returns the error that occurred. | |||
| */ | |||
| Throwable getThrowable(); | |||
| } | |||
| @@ -1,27 +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.listeners; | |||
| /** | |||
| * A project listener that emulated the Ant 1.x -emacs mode. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant.type type="listener" name="noprefix" | |||
| */ | |||
| public class NoPrefixProjectListener | |||
| extends DefaultProjectListener | |||
| { | |||
| /** | |||
| * Writes a message | |||
| */ | |||
| protected void writeMessage( LogEvent event ) | |||
| { | |||
| getWriter().println( event.getMessage() ); | |||
| } | |||
| } | |||
| @@ -1,22 +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.listeners; | |||
| /** | |||
| * A project level event. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public interface ProjectEvent | |||
| { | |||
| /** | |||
| * Returns the name of the project. | |||
| */ | |||
| String getProjectName(); | |||
| } | |||
| @@ -1,65 +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.listeners; | |||
| /** | |||
| * The interface to implement if you want to receive | |||
| * notification of project status. | |||
| * | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @version $Revision$ $Date$ | |||
| * @ant:role shorthand="listener" | |||
| * @todo Think about having a way to indicate that a foreign project | |||
| * is being referenced, a implicit target is being referenced | |||
| * and that a library is being imported. | |||
| */ | |||
| public interface ProjectListener | |||
| { | |||
| String ROLE = ProjectListener.class.getName(); | |||
| /** | |||
| * Notify the listener that a project is about to start. This method | |||
| * is called for top-level projects only. | |||
| */ | |||
| void projectStarted( ProjectEvent event ); | |||
| /** | |||
| * Notify the listener that a project has finished. This method is called | |||
| * for top-level projects only. | |||
| */ | |||
| void projectFinished( ProjectEvent event ); | |||
| /** | |||
| * Notify the listener that a target is about to start. Note that the | |||
| * project name reported by the event may be different to that reported | |||
| * in {@link #projectStarted}. | |||
| */ | |||
| void targetStarted( TargetEvent event ); | |||
| /** | |||
| * Notify the listener that a target has finished. | |||
| */ | |||
| void targetFinished( TargetEvent event ); | |||
| /** | |||
| * Notify the listener that a task is about to start. | |||
| */ | |||
| void taskStarted( TaskEvent event ); | |||
| /** | |||
| * Notify the listener that a task has finished. | |||
| */ | |||
| void taskFinished( TaskEvent event ); | |||
| /** | |||
| * Notify listener of log message event. Note that this method may | |||
| * be called at any time, so the reported task, target, or project names | |||
| * may be null. | |||
| */ | |||
| void log( LogEvent event ); | |||
| } | |||
| @@ -1,23 +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.listeners; | |||
| /** | |||
| * A target level event. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public interface TargetEvent | |||
| extends ProjectEvent | |||
| { | |||
| /** | |||
| * Returns the name of the target. | |||
| */ | |||
| String getTargetName(); | |||
| } | |||
| @@ -1,23 +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.listeners; | |||
| /** | |||
| * A task level event. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public interface TaskEvent | |||
| extends TargetEvent | |||
| { | |||
| /** | |||
| * Returns the name of the task. | |||
| */ | |||
| String getTaskName(); | |||
| } | |||