diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/BuildEvent.java b/proposal/myrmidon/src/main/org/apache/tools/ant/BuildEvent.java deleted file mode 100644 index 29221c8a5..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/BuildEvent.java +++ /dev/null @@ -1,100 +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.tools.ant; - -import java.util.EventObject; - -public class BuildEvent - extends EventObject -{ - private int m_priority = Project.MSG_VERBOSE; - private Throwable m_exception; - private String m_message; - private String m_target; - private String m_task; - - /** - * Construct a BuildEvent for a target level event - * - * @param target the target that emitted the event. - */ - public BuildEvent( String target ) - { - super( target ); - m_target = target; - } - - public void setException( Throwable exception ) - { - m_exception = exception; - } - - public void setMessage( String message, int priority ) - { - m_message = message; - m_priority = priority; - } - - /** - * Returns the exception that was thrown, if any. This field will only be - * set for "taskFinished", "targetFinished", and "buildFinished" events. - * - * @return The Exception value - * @see BuildListener#taskFinished(BuildEvent) - * @see BuildListener#targetFinished(BuildEvent) - * @see BuildListener#buildFinished(BuildEvent) - */ - public Throwable getException() - { - return m_exception; - } - - /** - * Returns the logging message. This field will only be set for - * "messageLogged" events. - * - * @return The Message value - * @see BuildListener#messageLogged(BuildEvent) - */ - public String getMessage() - { - return m_message; - } - - /** - * Returns the priority of the logging message. This field will only be set - * for "messageLogged" events. - * - * @return The Priority value - * @see BuildListener#messageLogged(BuildEvent) - */ - public int getPriority() - { - return m_priority; - } - - /** - * Returns the target that fired this event. - * - * @return The Target value - */ - public String getTarget() - { - return m_target; - } - - /** - * Returns the task that fired this event. - * - * @return The Task value - */ - public String getTask() - { - return m_task; - } -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/BuildListener.java b/proposal/myrmidon/src/main/org/apache/tools/ant/BuildListener.java deleted file mode 100644 index 46df2a925..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/BuildListener.java +++ /dev/null @@ -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.tools.ant; - -import java.util.EventListener; - -/** - * Classes that implement this interface will be notified when things happend - * during a build. - * - * @see BuildEvent - * @see Project#addBuildListener(BuildListener) - */ -public interface BuildListener - extends EventListener -{ - /** - * Fired before any targets are started. - * - * @param event Description of Parameter - */ - void buildStarted( BuildEvent event ); - - /** - * Fired after the last target has finished. This event will still be thrown - * if an error occured during the build. - * - * @param event Description of Parameter - * @see BuildEvent#getException() - */ - void buildFinished( BuildEvent event ); - - /** - * Fired when a target is started. - * - * @param event Description of Parameter - * @see BuildEvent#getTarget() - */ - void targetStarted( BuildEvent event ); - - /** - * Fired when a target has finished. This event will still be thrown if an - * error occured during the build. - * - * @param event Description of Parameter - * @see BuildEvent#getException() - */ - void targetFinished( BuildEvent event ); - - /** - * Fired when a task is started. - * - * @param event Description of Parameter - * @see BuildEvent#getTask() - */ - void taskStarted( BuildEvent event ); - - /** - * Fired when a task has finished. This event will still be throw if an - * error occured during the build. - * - * @param event Description of Parameter - * @see BuildEvent#getException() - */ - void taskFinished( BuildEvent event ); - - /** - * Fired whenever a message is logged. - * - * @param event Description of Parameter - * @see BuildEvent#getMessage() - * @see BuildEvent#getPriority() - */ - void messageLogged( BuildEvent event ); -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/BuildLogger.java b/proposal/myrmidon/src/main/org/apache/tools/ant/BuildLogger.java deleted file mode 100644 index 0d8f70e05..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/BuildLogger.java +++ /dev/null @@ -1,55 +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.tools.ant; - -import java.io.PrintStream; - -/** - * Interface used by Ant to log the build output. A build logger is a build - * listener which has the 'right' to send output to the ant log, which is - * usually System.out unles redirected by the -logfile option. - * - * @author Conor MacNeill - */ -public interface BuildLogger extends BuildListener -{ - /** - * Set the msgOutputLevel this logger is to respond to. Only messages with a - * message level lower than or equal to the given level are output to the - * log.
- *
- * Constants for the message levels are in Project.java. The order of the
- * levels, from least to most verbose, is MSG_ERR, MSG_WARN, MSG_INFO,
- * MSG_VERBOSE, MSG_DEBUG.
- *
- * @param level the logging level for the logger.
- */
- void setMessageOutputLevel( int level );
-
- /**
- * Set the output stream to which this logger is to send its output.
- *
- * @param output the output stream for the logger.
- */
- void setOutputPrintStream( PrintStream output );
-
- /**
- * Set this logger to produce emacs (and other editor) friendly output.
- *
- * @param emacsMode true if output is to be unadorned so that emacs and
- * other editors can parse files names, etc.
- */
- void setEmacsMode( boolean emacsMode );
-
- /**
- * Set the output stream to which this logger is to send error messages.
- *
- * @param err the error stream for the logger.
- */
- void setErrorPrintStream( PrintStream err );
-}
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/Project.java b/proposal/myrmidon/src/main/org/apache/tools/ant/Project.java
index 9f0e1569b..386654837 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/Project.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/Project.java
@@ -8,15 +8,11 @@
package org.apache.tools.ant;
import java.io.File;
-import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
-import java.util.Iterator;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskException;
+import org.apache.myrmidon.listeners.ProjectListener;
import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
/**
* Central representation of an Ant project. This class defines a Ant project
@@ -125,9 +121,8 @@ public class Project
return null;
}
- public void addBuildListener( BuildListener listener )
+ public void addProjectListener( final ProjectListener listener )
{
-
}
/**
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/ActionChoices.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/ActionChoices.java
new file mode 100644
index 000000000..c86d2983b
--- /dev/null
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/ActionChoices.java
@@ -0,0 +1,25 @@
+/*
+ * 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.tools.ant.taskdefs;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * A list of possible values for the setAction()
method.
+ * Possible values include: start and stop.
+ */
+public class ActionChoices
+ extends EnumeratedAttribute
+{
+ private final static String[] values = {"start", "stop"};
+
+ public String[] getValues()
+ {
+ return values;
+ }
+}
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Recorder.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Recorder.java
index 6996c5e4d..309558aa1 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Recorder.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Recorder.java
@@ -7,6 +7,7 @@
*/
package org.apache.tools.ant.taskdefs;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
@@ -14,7 +15,6 @@ import java.util.Hashtable;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
/**
* This task is the manager for RecorderEntry's. It is this class that holds all
@@ -25,29 +25,30 @@ import org.apache.tools.ant.types.EnumeratedAttribute;
* @version 0.5
* @see RecorderEntry
*/
-public class Recorder extends Task
+public class Recorder
+ extends Task
{
/**
* The list of recorder entries.
*/
- private static Hashtable recorderEntries = new Hashtable();
-
- //////////////////////////////////////////////////////////////////////
- // ATTRIBUTES
+ private final static Hashtable c_recorderEntries = new Hashtable();
/**
* The name of the file to record to.
*/
- private String filename = null;
+ private String m_filename;
+
/**
* Whether or not to append. Need Boolean to record an unset state (null).
*/
- private Boolean append = null;
+ private Boolean m_append;
+
/**
* Whether to start or stop recording. Need Boolean to record an unset state
* (null).
*/
- private Boolean start = null;
+ private Boolean m_start;
+
/**
* What level to log? -1 means not initialized yet.
*/
@@ -58,15 +59,15 @@ public class Recorder extends Task
*
* @param action The action for the entry to take: start or stop.
*/
- public void setAction( ActionChoices action )
+ public void setAction( final ActionChoices action )
{
if( action.getValue().equalsIgnoreCase( "start" ) )
{
- start = Boolean.TRUE;
+ m_start = Boolean.TRUE;
}
else
{
- start = Boolean.FALSE;
+ m_start = Boolean.FALSE;
}
}
@@ -75,9 +76,9 @@ public class Recorder extends Task
*
* @param append The new Append value
*/
- public void setAppend( boolean append )
+ public void setAppend( final boolean append )
{
- this.append = new Boolean( append );
+ m_append = new Boolean( append );
}
/**
@@ -86,7 +87,7 @@ public class Recorder extends Task
* @param level The new Loglevel value
* @see VerbosityLevelChoices
*/
- public void setLoglevel( VerbosityLevelChoices level )
+ public void setLoglevel( final VerbosityLevelChoices level )
{
//I hate cascading if/elseif clauses !!!
String lev = level.getValue();
@@ -112,12 +113,6 @@ public class Recorder extends Task
}
}
- //////////////////////////////////////////////////////////////////////
- // CONSTRUCTORS / INITIALIZERS
-
- //////////////////////////////////////////////////////////////////////
- // ACCESSOR METHODS
-
/**
* Sets the name of the file to log to, and the name of the recorder entry.
*
@@ -125,12 +120,9 @@ public class Recorder extends Task
*/
public void setName( String fname )
{
- filename = fname;
+ m_filename = fname;
}
- //////////////////////////////////////////////////////////////////////
- // CORE / MAIN BODY
-
/**
* The main execution.
*
@@ -139,101 +131,69 @@ public class Recorder extends Task
public void execute()
throws TaskException
{
- if( filename == null )
+ if( m_filename == null )
+ {
throw new TaskException( "No filename specified" );
+ }
- getLogger().debug( "setting a recorder for name " + filename );
+ getLogger().debug( "setting a recorder for name " + m_filename );
// get the recorder entry
- RecorderEntry recorder = getRecorder( filename, getProject() );
+ final RecorderEntry recorder = getRecorder( m_filename );
+
+ getProject().addProjectListener( recorder );
+
// set the values on the recorder
- recorder.setMessageOutputLevel( loglevel );
- recorder.setRecordState( start );
+ recorder.setLogLevel( loglevel );
+
+ if( null != m_start )
+ {
+ recorder.setRecordState( m_start.booleanValue() );
+ }
}
/**
* Gets the recorder that's associated with the passed in name. If the
* recorder doesn't exist, then a new one is created.
- *
- * @param name Description of Parameter
- * @param proj Description of Parameter
- * @return The Recorder value
- * @exception TaskException Description of Exception
*/
- protected RecorderEntry getRecorder( String name, Project proj )
+ protected RecorderEntry getRecorder( final String name )
throws TaskException
{
- Object o = recorderEntries.get( name );
- RecorderEntry entry;
- if( o == null )
+ final Object o = c_recorderEntries.get( name );
+ if( null == o )
{
- // create a recorder entry
- try
- {
- entry = new RecorderEntry( name );
- PrintStream out = null;
- if( append == null )
- {
- out = new PrintStream(
- new FileOutputStream( name ) );
- }
- else
- {
- out = new PrintStream(
- new FileOutputStream( name, append.booleanValue() ) );
- }
- entry.setErrorPrintStream( out );
- entry.setOutputPrintStream( out );
- }
- catch( IOException ioe )
- {
- throw new TaskException( "Problems creating a recorder entry",
- ioe );
- }
- proj.addBuildListener( entry );
- recorderEntries.put( name, entry );
+ return (RecorderEntry)o;
}
- else
+
+ // create a recorder entry
+ try
{
- entry = (RecorderEntry)o;
+ final PrintStream output = createOutput( name );
+ final RecorderEntry entry = new RecorderEntry( output );
+ c_recorderEntries.put( name, entry );
+ return entry;
}
- return entry;
- }
-
- //////////////////////////////////////////////////////////////////////
- // INNER CLASSES
-
- /**
- * A list of possible values for the setAction()
method.
- * Possible values include: start and stop.
- *
- * @author RT
- */
- public static class ActionChoices extends EnumeratedAttribute
- {
- private final static String[] values = {"start", "stop"};
-
- public String[] getValues()
+ catch( final IOException ioe )
{
- return values;
+ throw new TaskException( "Problems creating a recorder entry",
+ ioe );
}
}
- /**
- * A list of possible values for the setLoglevel()
method.
- * Possible values include: error, warn, info, verbose, debug.
- *
- * @author RT
- */
- public static class VerbosityLevelChoices extends EnumeratedAttribute
+ private PrintStream createOutput( final String name )
+ throws FileNotFoundException
{
- private final static String[] values = {"error", "warn", "info",
- "verbose", "debug"};
-
- public String[] getValues()
+ FileOutputStream outputStream = null;
+ if( m_append == null )
{
- return values;
+ outputStream = new FileOutputStream( name );
+ }
+ else
+ {
+ outputStream = new FileOutputStream( name, m_append.booleanValue() );
}
- }
+ final PrintStream out = new PrintStream( outputStream );
+ return out;
+ }
}
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
index 78be72653..2ba5b87db 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
@@ -8,9 +8,10 @@
package org.apache.tools.ant.taskdefs;
import java.io.PrintStream;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildLogger;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.excalibur.util.StringUtil;
+import org.apache.myrmidon.listeners.AbstractProjectListener;
import org.apache.tools.ant.Project;
/**
@@ -18,50 +19,54 @@ import org.apache.tools.ant.Project;
* process.
*
* @author J D Glanville
- * @version 0.5
*/
public class RecorderEntry
- extends AbstractLogEnabled
- implements BuildLogger
+ extends AbstractProjectListener
+ implements LogEnabled
{
- /**
- * the line separator for this OS
- */
- private final static String LINE_SEP = System.getProperty( "line.separator" );
-
- //////////////////////////////////////////////////////////////////////
- // ATTRIBUTES
-
- /**
- * The name of the file associated with this recorder entry.
- */
- private String filename = null;
/**
* The state of the recorder (recorder on or off).
*/
- private boolean record = true;
+ private boolean m_record;
+
/**
* The current verbosity level to record at.
*/
- private int loglevel = Project.MSG_INFO;
+ private int m_loglevel = Project.MSG_INFO;
+
/**
* The output PrintStream to record to.
*/
- private PrintStream out = null;
+ private final PrintStream m_output;
+
/**
* The start time of the last know target.
*/
- private long targetStartTime = 0l;
+ private long m_targetStartTime = 0l;
- //////////////////////////////////////////////////////////////////////
- // CONSTRUCTORS / INITIALIZERS
+ private Logger m_logger;
/**
* @param name The name of this recorder (used as the filename).
*/
- protected RecorderEntry( String name )
+ protected RecorderEntry( final PrintStream output )
+ {
+ m_output = output;
+ }
+
+ /**
+ * Provide component with a logger.
+ *
+ * @param logger the logger
+ */
+ public void enableLogging( final Logger logger )
{
- filename = name;
+ m_logger = logger;
+ }
+
+ protected final Logger getLogger()
+ {
+ return m_logger;
}
private static String formatTime( long millis )
@@ -71,38 +76,18 @@ public class RecorderEntry
if( minutes > 0 )
{
- return Long.toString( minutes ) + " minute"
- + ( minutes == 1 ? " " : "s " )
- + Long.toString( seconds % 60 ) + " second"
- + ( seconds % 60 == 1 ? "" : "s" );
+ return minutes + " minute" + ( minutes == 1 ? " " : "s " ) +
+ ( seconds % 60 ) + " second" + ( seconds % 60 == 1 ? "" : "s" );
}
else
{
- return Long.toString( seconds ) + " second"
- + ( seconds % 60 == 1 ? "" : "s" );
+ return seconds + " second" + ( seconds % 60 == 1 ? "" : "s" );
}
-
- }
-
- public void setEmacsMode( boolean emacsMode )
- {
- throw new java.lang.RuntimeException( "Method setEmacsMode() not yet implemented." );
}
- public void setErrorPrintStream( PrintStream err )
+ public void setLogLevel( final int loglevel )
{
- out = err;
- }
-
- public void setMessageOutputLevel( int level )
- {
- if( level >= Project.MSG_ERR && level <= Project.MSG_DEBUG )
- loglevel = level;
- }
-
- public void setOutputPrintStream( PrintStream output )
- {
- out = output;
+ m_loglevel = loglevel;
}
/**
@@ -110,105 +95,125 @@ public class RecorderEntry
*
* @param state true for on, false for off, null for no change.
*/
- public void setRecordState( Boolean state )
+ public void setRecordState( final boolean record )
{
- if( state != null )
- record = state.booleanValue();
+ m_record = record;
}
- //////////////////////////////////////////////////////////////////////
- // ACCESSOR METHODS
+ /**
+ * Notify listener of log message event.
+ *
+ * @param message the message
+ * @param throwable the throwable
+ */
+ public void log( final String message, final Throwable throwable )
+ {
+ m_output.println( StringUtil.LINE_SEPARATOR + "BUILD FAILED" + StringUtil.LINE_SEPARATOR );
+ throwable.printStackTrace( m_output );
+ finishRecording();
+ }
/**
- * @return the name of the file the output is sent to.
+ * Notify listener of projectFinished event.
*/
- public String getFilename()
+ public void projectFinished()
{
- return filename;
+ m_output.println( StringUtil.LINE_SEPARATOR + "BUILD SUCCESSFUL" );
+ finishRecording();
}
- public void buildFinished( BuildEvent event )
+ private void finishRecording()
{
getLogger().debug( "< BUILD FINISHED" );
-
- Throwable error = event.getException();
- if( error == null )
- {
- out.println( LINE_SEP + "BUILD SUCCESSFUL" );
- }
- else
- {
- out.println( LINE_SEP + "BUILD FAILED" + LINE_SEP );
- error.printStackTrace( out );
- }
- out.flush();
- out.close();
+ m_output.flush();
+ m_output.close();
}
- public void buildStarted( BuildEvent event )
+ /**
+ * Notify listener of projectStarted event.
+ */
+ public void projectStarted()
{
getLogger().debug( "> BUILD STARTED" );
}
- public void messageLogged( BuildEvent event )
+ /**
+ * Notify listener of log message event.
+ *
+ * @param message the message
+ */
+ public void log( final String message )
{
getLogger().debug( "--- MESSAGE LOGGED" );
- StringBuffer buf = new StringBuffer();
- if( event.getTask() != null )
+ final StringBuffer sb = new StringBuffer();
+
+ final String task = getTask();
+ if( task != null )
{
- String name = "[" + event.getTask() + "]";
- /**
- * @todo replace 12 with DefaultLogger.LEFT_COLUMN_SIZE
- */
- for( int i = 0; i < ( 12 - name.length() ); i++ )
+ final String name = "[" + task + "]";
+ final int padding = 12 - name.length();
+ for( int i = 0; i < padding; i++ )
{
- buf.append( " " );
- }// for
- buf.append( name );
- }// if
- buf.append( event.getMessage() );
+ sb.append( " " );
+ }
+ sb.append( name );
+ }
- log( buf.toString(), event.getPriority() );
- }
+ sb.append( message );
- public void targetFinished( BuildEvent event )
- {
- getLogger().debug( "<< TARGET FINISHED -- " + event.getTarget() );
- String time = formatTime( System.currentTimeMillis() - targetStartTime );
- getLogger().debug( event.getTarget() + ": duration " + time );
- out.flush();
+ //FIXME: Check log level here
+ if( m_record )
+ {
+ m_output.println( sb.toString() );
+ }
}
- public void targetStarted( final BuildEvent event )
+ /**
+ * Notify listener of targetFinished event.
+ */
+ public void targetFinished()
{
- getLogger().debug( ">> TARGET STARTED -- " + event.getTarget() );
- getLogger().info( LINE_SEP + event.getTarget() + ":" );
- targetStartTime = System.currentTimeMillis();
+ getLogger().debug( "<< TARGET FINISHED -- " + getTarget() );
+ final long millis = System.currentTimeMillis() - m_targetStartTime;
+ final String duration = formatTime( millis );
+ getLogger().debug( getTarget() + ": duration " + duration );
+ m_output.flush();
+ super.targetFinished();
}
- public void taskFinished( BuildEvent event )
+ /**
+ * Notify listener of targetStarted event.
+ *
+ * @param target the name of target
+ */
+ public void targetStarted( final String target )
{
- getLogger().debug( "<<< TASK FINISHED -- " + event.getTask() );
- out.flush();
+ super.targetStarted( target );
+ getLogger().debug( ">> TARGET STARTED -- " + getTarget() );
+ getLogger().info( StringUtil.LINE_SEPARATOR + getTarget() + ":" );
+ m_targetStartTime = System.currentTimeMillis();
+
}
- public void taskStarted( BuildEvent event )
+ /**
+ * Notify listener of taskStarted event.
+ *
+ * @param task the name of task
+ */
+ public void taskStarted( String task )
{
- getLogger().debug( ">>> TASK STARTED -- " + event.getTask() );
+ super.taskStarted( task );
+ getLogger().debug( ">>> TASK STARTED -- " + getTask() );
}
/**
- * The thing that actually sends the information to the output.
- *
- * @param mesg The message to log.
- * @param level The verbosity level of the message.
+ * Notify listener of taskFinished event.
*/
- private void log( String mesg, int level )
+ public void taskFinished()
{
- if( record && ( level <= loglevel ) )
- {
- out.println( mesg );
- }
+ getLogger().debug( "<<< TASK FINISHED -- " + getTask() );
+ m_output.flush();
+ super.taskFinished();
}
}
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/VerbosityLevelChoices.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/VerbosityLevelChoices.java
new file mode 100644
index 000000000..15170406c
--- /dev/null
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/VerbosityLevelChoices.java
@@ -0,0 +1,26 @@
+/*
+ * 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.tools.ant.taskdefs;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * A list of possible values for the setLoglevel()
method.
+ * Possible values include: error, warn, info, verbose, debug.
+ */
+public class VerbosityLevelChoices
+ extends EnumeratedAttribute
+{
+ private final static String[] values =
+ {"error", "warn", "info", "verbose", "debug"};
+
+ public String[] getValues()
+ {
+ return values;
+ }
+}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildEvent.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildEvent.java
deleted file mode 100644
index 29221c8a5..000000000
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildEvent.java
+++ /dev/null
@@ -1,100 +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.tools.ant;
-
-import java.util.EventObject;
-
-public class BuildEvent
- extends EventObject
-{
- private int m_priority = Project.MSG_VERBOSE;
- private Throwable m_exception;
- private String m_message;
- private String m_target;
- private String m_task;
-
- /**
- * Construct a BuildEvent for a target level event
- *
- * @param target the target that emitted the event.
- */
- public BuildEvent( String target )
- {
- super( target );
- m_target = target;
- }
-
- public void setException( Throwable exception )
- {
- m_exception = exception;
- }
-
- public void setMessage( String message, int priority )
- {
- m_message = message;
- m_priority = priority;
- }
-
- /**
- * Returns the exception that was thrown, if any. This field will only be
- * set for "taskFinished", "targetFinished", and "buildFinished" events.
- *
- * @return The Exception value
- * @see BuildListener#taskFinished(BuildEvent)
- * @see BuildListener#targetFinished(BuildEvent)
- * @see BuildListener#buildFinished(BuildEvent)
- */
- public Throwable getException()
- {
- return m_exception;
- }
-
- /**
- * Returns the logging message. This field will only be set for
- * "messageLogged" events.
- *
- * @return The Message value
- * @see BuildListener#messageLogged(BuildEvent)
- */
- public String getMessage()
- {
- return m_message;
- }
-
- /**
- * Returns the priority of the logging message. This field will only be set
- * for "messageLogged" events.
- *
- * @return The Priority value
- * @see BuildListener#messageLogged(BuildEvent)
- */
- public int getPriority()
- {
- return m_priority;
- }
-
- /**
- * Returns the target that fired this event.
- *
- * @return The Target value
- */
- public String getTarget()
- {
- return m_target;
- }
-
- /**
- * Returns the task that fired this event.
- *
- * @return The Task value
- */
- public String getTask()
- {
- return m_task;
- }
-}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildListener.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildListener.java
deleted file mode 100644
index 46df2a925..000000000
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildListener.java
+++ /dev/null
@@ -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.tools.ant;
-
-import java.util.EventListener;
-
-/**
- * Classes that implement this interface will be notified when things happend
- * during a build.
- *
- * @see BuildEvent
- * @see Project#addBuildListener(BuildListener)
- */
-public interface BuildListener
- extends EventListener
-{
- /**
- * Fired before any targets are started.
- *
- * @param event Description of Parameter
- */
- void buildStarted( BuildEvent event );
-
- /**
- * Fired after the last target has finished. This event will still be thrown
- * if an error occured during the build.
- *
- * @param event Description of Parameter
- * @see BuildEvent#getException()
- */
- void buildFinished( BuildEvent event );
-
- /**
- * Fired when a target is started.
- *
- * @param event Description of Parameter
- * @see BuildEvent#getTarget()
- */
- void targetStarted( BuildEvent event );
-
- /**
- * Fired when a target has finished. This event will still be thrown if an
- * error occured during the build.
- *
- * @param event Description of Parameter
- * @see BuildEvent#getException()
- */
- void targetFinished( BuildEvent event );
-
- /**
- * Fired when a task is started.
- *
- * @param event Description of Parameter
- * @see BuildEvent#getTask()
- */
- void taskStarted( BuildEvent event );
-
- /**
- * Fired when a task has finished. This event will still be throw if an
- * error occured during the build.
- *
- * @param event Description of Parameter
- * @see BuildEvent#getException()
- */
- void taskFinished( BuildEvent event );
-
- /**
- * Fired whenever a message is logged.
- *
- * @param event Description of Parameter
- * @see BuildEvent#getMessage()
- * @see BuildEvent#getPriority()
- */
- void messageLogged( BuildEvent event );
-}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildLogger.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildLogger.java
deleted file mode 100644
index 0d8f70e05..000000000
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/BuildLogger.java
+++ /dev/null
@@ -1,55 +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.tools.ant;
-
-import java.io.PrintStream;
-
-/**
- * Interface used by Ant to log the build output. A build logger is a build
- * listener which has the 'right' to send output to the ant log, which is
- * usually System.out unles redirected by the -logfile option.
- *
- * @author Conor MacNeill
- */
-public interface BuildLogger extends BuildListener
-{
- /**
- * Set the msgOutputLevel this logger is to respond to. Only messages with a
- * message level lower than or equal to the given level are output to the
- * log.
- *
- * Constants for the message levels are in Project.java. The order of the
- * levels, from least to most verbose, is MSG_ERR, MSG_WARN, MSG_INFO,
- * MSG_VERBOSE, MSG_DEBUG.
- *
- * @param level the logging level for the logger.
- */
- void setMessageOutputLevel( int level );
-
- /**
- * Set the output stream to which this logger is to send its output.
- *
- * @param output the output stream for the logger.
- */
- void setOutputPrintStream( PrintStream output );
-
- /**
- * Set this logger to produce emacs (and other editor) friendly output.
- *
- * @param emacsMode true if output is to be unadorned so that emacs and
- * other editors can parse files names, etc.
- */
- void setEmacsMode( boolean emacsMode );
-
- /**
- * Set the output stream to which this logger is to send error messages.
- *
- * @param err the error stream for the logger.
- */
- void setErrorPrintStream( PrintStream err );
-}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/Project.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/Project.java
index 9f0e1569b..386654837 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/Project.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/Project.java
@@ -8,15 +8,11 @@
package org.apache.tools.ant;
import java.io.File;
-import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
-import java.util.Iterator;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskException;
+import org.apache.myrmidon.listeners.ProjectListener;
import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
/**
* Central representation of an Ant project. This class defines a Ant project
@@ -125,9 +121,8 @@ public class Project
return null;
}
- public void addBuildListener( BuildListener listener )
+ public void addProjectListener( final ProjectListener listener )
{
-
}
/**
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/ActionChoices.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/ActionChoices.java
new file mode 100644
index 000000000..c86d2983b
--- /dev/null
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/ActionChoices.java
@@ -0,0 +1,25 @@
+/*
+ * 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.tools.ant.taskdefs;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * A list of possible values for the setAction()
method.
+ * Possible values include: start and stop.
+ */
+public class ActionChoices
+ extends EnumeratedAttribute
+{
+ private final static String[] values = {"start", "stop"};
+
+ public String[] getValues()
+ {
+ return values;
+ }
+}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Recorder.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Recorder.java
index 6996c5e4d..309558aa1 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Recorder.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Recorder.java
@@ -7,6 +7,7 @@
*/
package org.apache.tools.ant.taskdefs;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
@@ -14,7 +15,6 @@ import java.util.Hashtable;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
/**
* This task is the manager for RecorderEntry's. It is this class that holds all
@@ -25,29 +25,30 @@ import org.apache.tools.ant.types.EnumeratedAttribute;
* @version 0.5
* @see RecorderEntry
*/
-public class Recorder extends Task
+public class Recorder
+ extends Task
{
/**
* The list of recorder entries.
*/
- private static Hashtable recorderEntries = new Hashtable();
-
- //////////////////////////////////////////////////////////////////////
- // ATTRIBUTES
+ private final static Hashtable c_recorderEntries = new Hashtable();
/**
* The name of the file to record to.
*/
- private String filename = null;
+ private String m_filename;
+
/**
* Whether or not to append. Need Boolean to record an unset state (null).
*/
- private Boolean append = null;
+ private Boolean m_append;
+
/**
* Whether to start or stop recording. Need Boolean to record an unset state
* (null).
*/
- private Boolean start = null;
+ private Boolean m_start;
+
/**
* What level to log? -1 means not initialized yet.
*/
@@ -58,15 +59,15 @@ public class Recorder extends Task
*
* @param action The action for the entry to take: start or stop.
*/
- public void setAction( ActionChoices action )
+ public void setAction( final ActionChoices action )
{
if( action.getValue().equalsIgnoreCase( "start" ) )
{
- start = Boolean.TRUE;
+ m_start = Boolean.TRUE;
}
else
{
- start = Boolean.FALSE;
+ m_start = Boolean.FALSE;
}
}
@@ -75,9 +76,9 @@ public class Recorder extends Task
*
* @param append The new Append value
*/
- public void setAppend( boolean append )
+ public void setAppend( final boolean append )
{
- this.append = new Boolean( append );
+ m_append = new Boolean( append );
}
/**
@@ -86,7 +87,7 @@ public class Recorder extends Task
* @param level The new Loglevel value
* @see VerbosityLevelChoices
*/
- public void setLoglevel( VerbosityLevelChoices level )
+ public void setLoglevel( final VerbosityLevelChoices level )
{
//I hate cascading if/elseif clauses !!!
String lev = level.getValue();
@@ -112,12 +113,6 @@ public class Recorder extends Task
}
}
- //////////////////////////////////////////////////////////////////////
- // CONSTRUCTORS / INITIALIZERS
-
- //////////////////////////////////////////////////////////////////////
- // ACCESSOR METHODS
-
/**
* Sets the name of the file to log to, and the name of the recorder entry.
*
@@ -125,12 +120,9 @@ public class Recorder extends Task
*/
public void setName( String fname )
{
- filename = fname;
+ m_filename = fname;
}
- //////////////////////////////////////////////////////////////////////
- // CORE / MAIN BODY
-
/**
* The main execution.
*
@@ -139,101 +131,69 @@ public class Recorder extends Task
public void execute()
throws TaskException
{
- if( filename == null )
+ if( m_filename == null )
+ {
throw new TaskException( "No filename specified" );
+ }
- getLogger().debug( "setting a recorder for name " + filename );
+ getLogger().debug( "setting a recorder for name " + m_filename );
// get the recorder entry
- RecorderEntry recorder = getRecorder( filename, getProject() );
+ final RecorderEntry recorder = getRecorder( m_filename );
+
+ getProject().addProjectListener( recorder );
+
// set the values on the recorder
- recorder.setMessageOutputLevel( loglevel );
- recorder.setRecordState( start );
+ recorder.setLogLevel( loglevel );
+
+ if( null != m_start )
+ {
+ recorder.setRecordState( m_start.booleanValue() );
+ }
}
/**
* Gets the recorder that's associated with the passed in name. If the
* recorder doesn't exist, then a new one is created.
- *
- * @param name Description of Parameter
- * @param proj Description of Parameter
- * @return The Recorder value
- * @exception TaskException Description of Exception
*/
- protected RecorderEntry getRecorder( String name, Project proj )
+ protected RecorderEntry getRecorder( final String name )
throws TaskException
{
- Object o = recorderEntries.get( name );
- RecorderEntry entry;
- if( o == null )
+ final Object o = c_recorderEntries.get( name );
+ if( null == o )
{
- // create a recorder entry
- try
- {
- entry = new RecorderEntry( name );
- PrintStream out = null;
- if( append == null )
- {
- out = new PrintStream(
- new FileOutputStream( name ) );
- }
- else
- {
- out = new PrintStream(
- new FileOutputStream( name, append.booleanValue() ) );
- }
- entry.setErrorPrintStream( out );
- entry.setOutputPrintStream( out );
- }
- catch( IOException ioe )
- {
- throw new TaskException( "Problems creating a recorder entry",
- ioe );
- }
- proj.addBuildListener( entry );
- recorderEntries.put( name, entry );
+ return (RecorderEntry)o;
}
- else
+
+ // create a recorder entry
+ try
{
- entry = (RecorderEntry)o;
+ final PrintStream output = createOutput( name );
+ final RecorderEntry entry = new RecorderEntry( output );
+ c_recorderEntries.put( name, entry );
+ return entry;
}
- return entry;
- }
-
- //////////////////////////////////////////////////////////////////////
- // INNER CLASSES
-
- /**
- * A list of possible values for the setAction()
method.
- * Possible values include: start and stop.
- *
- * @author RT
- */
- public static class ActionChoices extends EnumeratedAttribute
- {
- private final static String[] values = {"start", "stop"};
-
- public String[] getValues()
+ catch( final IOException ioe )
{
- return values;
+ throw new TaskException( "Problems creating a recorder entry",
+ ioe );
}
}
- /**
- * A list of possible values for the setLoglevel()
method.
- * Possible values include: error, warn, info, verbose, debug.
- *
- * @author RT
- */
- public static class VerbosityLevelChoices extends EnumeratedAttribute
+ private PrintStream createOutput( final String name )
+ throws FileNotFoundException
{
- private final static String[] values = {"error", "warn", "info",
- "verbose", "debug"};
-
- public String[] getValues()
+ FileOutputStream outputStream = null;
+ if( m_append == null )
{
- return values;
+ outputStream = new FileOutputStream( name );
+ }
+ else
+ {
+ outputStream = new FileOutputStream( name, m_append.booleanValue() );
}
- }
+ final PrintStream out = new PrintStream( outputStream );
+ return out;
+ }
}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/RecorderEntry.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/RecorderEntry.java
index 78be72653..2ba5b87db 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/RecorderEntry.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/RecorderEntry.java
@@ -8,9 +8,10 @@
package org.apache.tools.ant.taskdefs;
import java.io.PrintStream;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildLogger;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.excalibur.util.StringUtil;
+import org.apache.myrmidon.listeners.AbstractProjectListener;
import org.apache.tools.ant.Project;
/**
@@ -18,50 +19,54 @@ import org.apache.tools.ant.Project;
* process.
*
* @author J D Glanville
- * @version 0.5
*/
public class RecorderEntry
- extends AbstractLogEnabled
- implements BuildLogger
+ extends AbstractProjectListener
+ implements LogEnabled
{
- /**
- * the line separator for this OS
- */
- private final static String LINE_SEP = System.getProperty( "line.separator" );
-
- //////////////////////////////////////////////////////////////////////
- // ATTRIBUTES
-
- /**
- * The name of the file associated with this recorder entry.
- */
- private String filename = null;
/**
* The state of the recorder (recorder on or off).
*/
- private boolean record = true;
+ private boolean m_record;
+
/**
* The current verbosity level to record at.
*/
- private int loglevel = Project.MSG_INFO;
+ private int m_loglevel = Project.MSG_INFO;
+
/**
* The output PrintStream to record to.
*/
- private PrintStream out = null;
+ private final PrintStream m_output;
+
/**
* The start time of the last know target.
*/
- private long targetStartTime = 0l;
+ private long m_targetStartTime = 0l;
- //////////////////////////////////////////////////////////////////////
- // CONSTRUCTORS / INITIALIZERS
+ private Logger m_logger;
/**
* @param name The name of this recorder (used as the filename).
*/
- protected RecorderEntry( String name )
+ protected RecorderEntry( final PrintStream output )
+ {
+ m_output = output;
+ }
+
+ /**
+ * Provide component with a logger.
+ *
+ * @param logger the logger
+ */
+ public void enableLogging( final Logger logger )
{
- filename = name;
+ m_logger = logger;
+ }
+
+ protected final Logger getLogger()
+ {
+ return m_logger;
}
private static String formatTime( long millis )
@@ -71,38 +76,18 @@ public class RecorderEntry
if( minutes > 0 )
{
- return Long.toString( minutes ) + " minute"
- + ( minutes == 1 ? " " : "s " )
- + Long.toString( seconds % 60 ) + " second"
- + ( seconds % 60 == 1 ? "" : "s" );
+ return minutes + " minute" + ( minutes == 1 ? " " : "s " ) +
+ ( seconds % 60 ) + " second" + ( seconds % 60 == 1 ? "" : "s" );
}
else
{
- return Long.toString( seconds ) + " second"
- + ( seconds % 60 == 1 ? "" : "s" );
+ return seconds + " second" + ( seconds % 60 == 1 ? "" : "s" );
}
-
- }
-
- public void setEmacsMode( boolean emacsMode )
- {
- throw new java.lang.RuntimeException( "Method setEmacsMode() not yet implemented." );
}
- public void setErrorPrintStream( PrintStream err )
+ public void setLogLevel( final int loglevel )
{
- out = err;
- }
-
- public void setMessageOutputLevel( int level )
- {
- if( level >= Project.MSG_ERR && level <= Project.MSG_DEBUG )
- loglevel = level;
- }
-
- public void setOutputPrintStream( PrintStream output )
- {
- out = output;
+ m_loglevel = loglevel;
}
/**
@@ -110,105 +95,125 @@ public class RecorderEntry
*
* @param state true for on, false for off, null for no change.
*/
- public void setRecordState( Boolean state )
+ public void setRecordState( final boolean record )
{
- if( state != null )
- record = state.booleanValue();
+ m_record = record;
}
- //////////////////////////////////////////////////////////////////////
- // ACCESSOR METHODS
+ /**
+ * Notify listener of log message event.
+ *
+ * @param message the message
+ * @param throwable the throwable
+ */
+ public void log( final String message, final Throwable throwable )
+ {
+ m_output.println( StringUtil.LINE_SEPARATOR + "BUILD FAILED" + StringUtil.LINE_SEPARATOR );
+ throwable.printStackTrace( m_output );
+ finishRecording();
+ }
/**
- * @return the name of the file the output is sent to.
+ * Notify listener of projectFinished event.
*/
- public String getFilename()
+ public void projectFinished()
{
- return filename;
+ m_output.println( StringUtil.LINE_SEPARATOR + "BUILD SUCCESSFUL" );
+ finishRecording();
}
- public void buildFinished( BuildEvent event )
+ private void finishRecording()
{
getLogger().debug( "< BUILD FINISHED" );
-
- Throwable error = event.getException();
- if( error == null )
- {
- out.println( LINE_SEP + "BUILD SUCCESSFUL" );
- }
- else
- {
- out.println( LINE_SEP + "BUILD FAILED" + LINE_SEP );
- error.printStackTrace( out );
- }
- out.flush();
- out.close();
+ m_output.flush();
+ m_output.close();
}
- public void buildStarted( BuildEvent event )
+ /**
+ * Notify listener of projectStarted event.
+ */
+ public void projectStarted()
{
getLogger().debug( "> BUILD STARTED" );
}
- public void messageLogged( BuildEvent event )
+ /**
+ * Notify listener of log message event.
+ *
+ * @param message the message
+ */
+ public void log( final String message )
{
getLogger().debug( "--- MESSAGE LOGGED" );
- StringBuffer buf = new StringBuffer();
- if( event.getTask() != null )
+ final StringBuffer sb = new StringBuffer();
+
+ final String task = getTask();
+ if( task != null )
{
- String name = "[" + event.getTask() + "]";
- /**
- * @todo replace 12 with DefaultLogger.LEFT_COLUMN_SIZE
- */
- for( int i = 0; i < ( 12 - name.length() ); i++ )
+ final String name = "[" + task + "]";
+ final int padding = 12 - name.length();
+ for( int i = 0; i < padding; i++ )
{
- buf.append( " " );
- }// for
- buf.append( name );
- }// if
- buf.append( event.getMessage() );
+ sb.append( " " );
+ }
+ sb.append( name );
+ }
- log( buf.toString(), event.getPriority() );
- }
+ sb.append( message );
- public void targetFinished( BuildEvent event )
- {
- getLogger().debug( "<< TARGET FINISHED -- " + event.getTarget() );
- String time = formatTime( System.currentTimeMillis() - targetStartTime );
- getLogger().debug( event.getTarget() + ": duration " + time );
- out.flush();
+ //FIXME: Check log level here
+ if( m_record )
+ {
+ m_output.println( sb.toString() );
+ }
}
- public void targetStarted( final BuildEvent event )
+ /**
+ * Notify listener of targetFinished event.
+ */
+ public void targetFinished()
{
- getLogger().debug( ">> TARGET STARTED -- " + event.getTarget() );
- getLogger().info( LINE_SEP + event.getTarget() + ":" );
- targetStartTime = System.currentTimeMillis();
+ getLogger().debug( "<< TARGET FINISHED -- " + getTarget() );
+ final long millis = System.currentTimeMillis() - m_targetStartTime;
+ final String duration = formatTime( millis );
+ getLogger().debug( getTarget() + ": duration " + duration );
+ m_output.flush();
+ super.targetFinished();
}
- public void taskFinished( BuildEvent event )
+ /**
+ * Notify listener of targetStarted event.
+ *
+ * @param target the name of target
+ */
+ public void targetStarted( final String target )
{
- getLogger().debug( "<<< TASK FINISHED -- " + event.getTask() );
- out.flush();
+ super.targetStarted( target );
+ getLogger().debug( ">> TARGET STARTED -- " + getTarget() );
+ getLogger().info( StringUtil.LINE_SEPARATOR + getTarget() + ":" );
+ m_targetStartTime = System.currentTimeMillis();
+
}
- public void taskStarted( BuildEvent event )
+ /**
+ * Notify listener of taskStarted event.
+ *
+ * @param task the name of task
+ */
+ public void taskStarted( String task )
{
- getLogger().debug( ">>> TASK STARTED -- " + event.getTask() );
+ super.taskStarted( task );
+ getLogger().debug( ">>> TASK STARTED -- " + getTask() );
}
/**
- * The thing that actually sends the information to the output.
- *
- * @param mesg The message to log.
- * @param level The verbosity level of the message.
+ * Notify listener of taskFinished event.
*/
- private void log( String mesg, int level )
+ public void taskFinished()
{
- if( record && ( level <= loglevel ) )
- {
- out.println( mesg );
- }
+ getLogger().debug( "<<< TASK FINISHED -- " + getTask() );
+ m_output.flush();
+ super.taskFinished();
}
}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/VerbosityLevelChoices.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/VerbosityLevelChoices.java
new file mode 100644
index 000000000..15170406c
--- /dev/null
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/VerbosityLevelChoices.java
@@ -0,0 +1,26 @@
+/*
+ * 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.tools.ant.taskdefs;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * A list of possible values for the setLoglevel()
method.
+ * Possible values include: error, warn, info, verbose, debug.
+ */
+public class VerbosityLevelChoices
+ extends EnumeratedAttribute
+{
+ private final static String[] values =
+ {"error", "warn", "info", "verbose", "debug"};
+
+ public String[] getValues()
+ {
+ return values;
+ }
+}