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(); | |||
} |