buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StatusAndLogListener.java
changeset 628 7c4a911dc066
parent 588 c7c26511138f
equal deleted inserted replaced
588:c7c26511138f 628:7c4a911dc066
     1 /*
     1 /*
     2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
     2  * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3  * All rights reserved.
     4 * This component and the accompanying materials are made available
     4  * This component and the accompanying materials are made available
     5 * under the terms of the License "Eclipse Public License v1.0"
     5  * under the terms of the License "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6  * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     8  *
     9 * Initial Contributors:
     9  * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10  * Nokia Corporation - initial contribution.
    11 *
    11  *
    12 * Contributors:
    12  * Contributors:
    13 *
    13  *
    14 * Description:  
    14  * Description:  
    15 *
    15  *
    16 */
    16  */
    17 package com.nokia.helium.logger.ant.listener;
    17 package com.nokia.helium.logger.ant.listener;
    18 
    18 
    19 import java.util.Vector;
    19 import java.util.Vector;
    20 
    20 
    21 import org.apache.log4j.Logger;
    21 import org.apache.log4j.Logger;
    22 import org.apache.tools.ant.BuildEvent;
    22 import org.apache.tools.ant.BuildEvent;
    23 import org.apache.tools.ant.BuildListener;
    23 import org.apache.tools.ant.BuildListener;
       
    24 import org.apache.tools.ant.Project;
    24 import org.apache.tools.ant.SubBuildListener;
    25 import org.apache.tools.ant.SubBuildListener;
    25 import org.apache.tools.ant.Project;
       
    26 
    26 
    27 /**
    27 /**
    28  * <code>StatusAndLogListener</code> implements {@link BuildListener} and
    28  * <code>StatusAndLogListener</code> implements {@link BuildListener} and listens to build events in
    29  * listens to build events in particularly for activities such as ant logging
    29  * particularly for activities such as ant logging and displaying build stage summary at the end of
    30  * and displaying build stage summary at the end of build process.
    30  * build process.
    31  * 
    31  * 
    32  */
    32  */
    33 public class StatusAndLogListener implements BuildListener, SubBuildListener {
    33 public class StatusAndLogListener implements BuildListener, SubBuildListener {
    34     private static StatusAndLogListener self;
    34     private static StatusAndLogListener self;
    35     
    35 
    36     private Vector<BuildEventHandler> buildHandlers = new Vector<BuildEventHandler>();
    36     private Vector<BuildEventHandler> buildHandlers = new Vector<BuildEventHandler>();
    37     private Vector<TargetEventHandler> targetHandlers = new Vector<TargetEventHandler>();
    37     private Vector<TargetEventHandler> targetHandlers = new Vector<TargetEventHandler>();
    38     private Vector<TaskEventHandler> taskHandlers = new Vector<TaskEventHandler>();
    38     private Vector<TaskEventHandler> taskHandlers = new Vector<TaskEventHandler>();
    39     private Vector<MessageEventHandler> messageHandlers = new Vector<MessageEventHandler>();
    39     private Vector<MessageEventHandler> messageHandlers = new Vector<MessageEventHandler>();
    40     private Vector<SubBuildEventHandler> subBuildHandlers = new Vector<SubBuildEventHandler>();
    40     private Vector<SubBuildEventHandler> subBuildHandlers = new Vector<SubBuildEventHandler>();
    47     public StatusAndLogListener() {
    47     public StatusAndLogListener() {
    48         self = this;
    48         self = this;
    49     }
    49     }
    50 
    50 
    51     /**
    51     /**
    52      * Signals that the last target has finished. This event will still be fired
    52      * Signals that the last target has finished. This event will still be fired if an error
    53      * if an error occurred during the build.
    53      * occurred during the build.
    54      * 
    54      * 
    55      * @param event
    55      * @param event An event with any relevant extra information. Must not be <code>null</code>.
    56      *            An event with any relevant extra information. Must not be
       
    57      *            <code>null</code>.
       
    58      * 
    56      * 
    59      * @see BuildEvent#getException()
    57      * @see BuildEvent#getException()
    60      */
    58      */
    61     public synchronized void buildStarted(BuildEvent event) {
    59     public synchronized void buildStarted(BuildEvent event) {
    62         project = event.getProject();
    60         project = event.getProject();
    63         for (BuildEventHandler handler : buildHandlers) {
    61         for (BuildEventHandler handler : buildHandlers) {
    64             handler.handleBuildStarted(event);
    62             handler.handleBuildStarted(event);
    65         }
    63         }
    66         
    64 
    67     }
    65     }
    68     /**
    66 
    69      * Signals that a build has started. This event is fired before any targets
    67     /**
    70      * have started.
    68      * Signals that a build has started. This event is fired before any targets have started.
    71      * 
    69      * 
    72      * @param event
    70      * @param event An event with any relevant extra information. Must not be <code>null</code>.
    73      *            An event with any relevant extra information. Must not be
       
    74      *            <code>null</code>.
       
    75      */
    71      */
    76     public synchronized void buildFinished(BuildEvent event) {
    72     public synchronized void buildFinished(BuildEvent event) {
    77         for ( BuildEventHandler handler : buildHandlers ) {
    73         for (BuildEventHandler handler : buildHandlers) {
    78             handler.handleBuildFinished( event );
    74             handler.handleBuildFinished(event);
    79         }
    75         }
    80     }
    76     }
    81     
       
    82 
    77 
    83     /**
    78     /**
    84      * Signals that a target is starting.
    79      * Signals that a target is starting.
    85      * 
    80      * 
    86      * @param event
    81      * @param event An event with any relevant extra information. Must not be <code>null</code>.
    87      *            An event with any relevant extra information. Must not be
       
    88      *            <code>null</code>.
       
    89      * 
    82      * 
    90      * @see BuildEvent#getTarget()
    83      * @see BuildEvent#getTarget()
    91      */
    84      */
    92     public synchronized void targetStarted(BuildEvent event) {
    85     public synchronized void targetStarted(BuildEvent event) {
    93         for (TargetEventHandler handler : targetHandlers) {
    86         for (TargetEventHandler handler : targetHandlers) {
    94             handler.handleTargetStarted(event);
    87             handler.handleTargetStarted(event);
    95         }
    88         }
    96     }
    89     }
    97 
    90 
    98     /**
    91     /**
    99      * Signals that a target has finished. This event will still be fired if an
    92      * Signals that a target has finished. This event will still be fired if an error occurred
   100      * error occurred during the build.
    93      * during the build.
   101      * 
    94      * 
   102      * @param event
    95      * @param event An event with any relevant extra information. Must not be <code>null</code>.
   103      *            An event with any relevant extra information. Must not be
       
   104      *            <code>null</code>.
       
   105      * 
    96      * 
   106      * @see BuildEvent#getException()
    97      * @see BuildEvent#getException()
   107      */
    98      */
   108     public synchronized void targetFinished(BuildEvent event) {
    99     public synchronized void targetFinished(BuildEvent event) {
   109         for (TargetEventHandler handler : targetHandlers) {
   100         for (TargetEventHandler handler : targetHandlers) {
   112     }
   103     }
   113 
   104 
   114     /**
   105     /**
   115      * Signals that a task is starting.
   106      * Signals that a task is starting.
   116      * 
   107      * 
   117      * @param event
   108      * @param event An event with any relevant extra information. Must not be <code>null</code>.
   118      *            An event with any relevant extra information. Must not be
       
   119      *            <code>null</code>.
       
   120      * 
   109      * 
   121      * @see BuildEvent#getTask()
   110      * @see BuildEvent#getTask()
   122      */
   111      */
   123     public synchronized void taskStarted(BuildEvent event) {
   112     public synchronized void taskStarted(BuildEvent event) {
   124         for (TaskEventHandler handler : taskHandlers) {
   113         for (TaskEventHandler handler : taskHandlers) {
   125             handler.handleTaskStarted(event);
   114             handler.handleTaskStarted(event);
   126         }
   115         }
   127     }
   116     }
   128 
   117 
   129     /**
   118     /**
   130      * Signals that a task has finished. This event will still be fired if an
   119      * Signals that a task has finished. This event will still be fired if an error occurred during
   131      * error occurred during the build.
   120      * the build.
   132      * 
   121      * 
   133      * @param event
   122      * @param event An event with any relevant extra information. Must not be <code>null</code>.
   134      *            An event with any relevant extra information. Must not be
       
   135      *            <code>null</code>.
       
   136      * 
   123      * 
   137      * @see BuildEvent#getException()
   124      * @see BuildEvent#getException()
   138      */
   125      */
   139     public synchronized void taskFinished(BuildEvent event) {
   126     public synchronized void taskFinished(BuildEvent event) {
   140         for (TaskEventHandler handler : taskHandlers) {
   127         for (TaskEventHandler handler : taskHandlers) {
   141             handler.handleTaskFinished(event);
   128             handler.handleTaskFinished(event);
   142         }
   129         }
   143     }
   130     }
   144     
   131 
   145     /**
   132     /**
   146      * Signals that a subbuild has started. This event is fired before any targets have started. 
   133      * Signals that a subbuild has started. This event is fired before any targets have started.
       
   134      * 
   147      * @param event
   135      * @param event
   148      */
   136      */
   149     public synchronized void subBuildStarted(BuildEvent event) {
   137     public synchronized void subBuildStarted(BuildEvent event) {
   150         for (SubBuildEventHandler handler : subBuildHandlers) {
   138         for (SubBuildEventHandler handler : subBuildHandlers) {
   151             handler.handleSubBuildStarted(event);
   139             handler.handleSubBuildStarted(event);
   152         }
   140         }
   153     }
   141     }
   154     
   142 
   155     /**
   143     /**
   156      * Signals that the last target has finished. This event will still be fired if an error occurred during the build. 
   144      * Signals that the last target has finished. This event will still be fired if an error
       
   145      * occurred during the build.
       
   146      * 
   157      * @param event
   147      * @param event
   158      */
   148      */
   159     
   149 
   160     public synchronized void subBuildFinished(BuildEvent event) {
   150     public synchronized void subBuildFinished(BuildEvent event) {
   161         for (SubBuildEventHandler handler : subBuildHandlers) {
   151         for (SubBuildEventHandler handler : subBuildHandlers) {
   162             handler.handleSubBuildStarted(event);
   152             handler.handleSubBuildStarted(event);
   163         }
   153         }
   164     }
   154     }
   165     
       
   166     
       
   167 
   155 
   168     /**
   156     /**
   169      * Signals a message logging event.
   157      * Signals a message logging event.
   170      * 
   158      * 
   171      * @param event
   159      * @param event An event with any relevant extra information. Must not be <code>null</code>.
   172      *            An event with any relevant extra information. Must not be
       
   173      *            <code>null</code>.
       
   174      * 
   160      * 
   175      * @see BuildEvent#getMessage()
   161      * @see BuildEvent#getMessage()
   176      * @see BuildEvent#getException()
   162      * @see BuildEvent#getException()
   177      * @see BuildEvent#getPriority()
   163      * @see BuildEvent#getPriority()
   178      */
   164      */
   183     }
   169     }
   184 
   170 
   185     /**
   171     /**
   186      * Register the given handler.
   172      * Register the given handler.
   187      * 
   173      * 
   188      * @param handler
   174      * @param handler is the handler to register
   189      *            is the handler to register
   175      */
   190      */
   176     public synchronized void register(Handler handler) {
   191     public synchronized void register( Handler handler ) {
       
   192         Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers);
   177         Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers);
   193         tmpBuildHandlers.add( handler );
   178         tmpBuildHandlers.add(handler);
   194         buildHandlers = tmpBuildHandlers;
   179         buildHandlers = tmpBuildHandlers;
   195         Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers);
   180         Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers);
   196         tmpTargetHandlers.add( handler );
   181         tmpTargetHandlers.add(handler);
   197         targetHandlers  = tmpTargetHandlers;
   182         targetHandlers = tmpTargetHandlers;
   198     }
   183     }
   199     
   184 
   200     /**
   185     /**
   201      * Register the given handler.
   186      * Register the given handler.
   202      * 
   187      * 
   203      * @param handler
   188      * @param handler is the handler to register
   204      *            is the handler to register
   189      */
   205      */
   190     public synchronized void remove(Handler handler) {
   206     public synchronized void remove( Handler handler ) {
       
   207         Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers);
   191         Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers);
   208         tmpBuildHandlers.remove( handler );
   192         tmpBuildHandlers.remove(handler);
   209         buildHandlers = tmpBuildHandlers;
   193         buildHandlers = tmpBuildHandlers;
   210         Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers);
   194         Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers);
   211         tmpTargetHandlers.remove( handler );
   195         tmpTargetHandlers.remove(handler);
   212         targetHandlers  = tmpTargetHandlers;
   196         targetHandlers = tmpTargetHandlers;
   213     }
   197     }
   214 
   198 
   215     /**
   199     /**
   216      * Register the given handler.
   200      * Register the given handler.
   217      * 
   201      * 
   218      * @param handler
   202      * @param handler is the handler to register
   219      *            is the handler to register
   203      */
   220      */
   204     public synchronized void register(BuildEventHandler handler) {
   221     public synchronized void register( BuildEventHandler handler ) {
       
   222         Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
   205         Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
   223         tmp.add( handler );
   206         tmp.add(handler);
   224         buildHandlers = tmp;
   207         buildHandlers = tmp;
   225     }
   208     }
   226     
   209 
   227     /**
   210     /**
   228      * Remove the given handler.
   211      * Remove the given handler.
   229      * 
   212      * 
   230      * @param handler
   213      * @param handler is the handler to register
   231      *            is the handler to register
   214      */
   232      */
   215     public synchronized void remove(BuildEventHandler handler) {
   233     public synchronized void remove( BuildEventHandler handler ) {
       
   234         Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
   216         Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
   235         tmp.remove( handler );
   217         tmp.remove(handler);
   236         buildHandlers = tmp;
   218         buildHandlers = tmp;
   237     }
   219     }
   238     
   220 
   239     /**
   221     /**
   240      * Register the given handler.
   222      * Register the given handler.
   241      * 
   223      * 
   242      * @param handler
   224      * @param handler is the handler to register
   243      *            is the handler to register
   225      */
   244      */
   226     public synchronized void register(TargetEventHandler handler) {
   245     public synchronized void register( TargetEventHandler handler ) {
       
   246         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
   227         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
   247         tmp.add( handler );
   228         tmp.add(handler);
   248         targetHandlers  = tmp;
   229         targetHandlers = tmp;
   249     }
   230     }
   250     
   231 
   251     /**
   232     /**
   252      * Remove the given handler.
   233      * Remove the given handler.
   253      * 
   234      * 
   254      * @param handler
   235      * @param handler is the handler to register
   255      *            is the handler to register
   236      */
   256      */
   237     public synchronized void remove(TargetEventHandler handler) {
   257     public synchronized void remove( TargetEventHandler handler ) {
       
   258         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
   238         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
   259         tmp.remove( handler );
   239         tmp.remove(handler);
   260         targetHandlers  = tmp;
   240         targetHandlers = tmp;
   261     }
   241     }
   262     
   242 
   263     
       
   264     /**
   243     /**
   265      * Register the given SubBuildEventHandler.
   244      * Register the given SubBuildEventHandler.
   266      * 
   245      * 
   267      * @param handler
   246      * @param handler is the handler to register
   268      *            is the handler to register
   247      */
   269      */
   248     public synchronized void register(SubBuildEventHandler handler) {
   270     public synchronized void register( SubBuildEventHandler handler ) {
       
   271         Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers);
   249         Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers);
   272         tmp.add( handler );
   250         tmp.add(handler);
   273         subBuildHandlers  = tmp;
   251         subBuildHandlers = tmp;
   274     }
   252     }
   275 
   253 
   276     /**
   254     /**
   277      * Remove the given SubBuildEventHandler.
   255      * Remove the given SubBuildEventHandler.
   278      * 
   256      * 
   279      * @param handler
   257      * @param handler is the handler to register
   280      *            is the handler to register
   258      */
   281      */
   259     public synchronized void remove(SubBuildEventHandler handler) {
   282     public synchronized void remove( SubBuildEventHandler handler ) {
       
   283         Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers);
   260         Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers);
   284         tmp.remove( handler );
   261         tmp.remove(handler);
   285         subBuildHandlers  = tmp;
   262         subBuildHandlers = tmp;
   286     }
   263     }
   287 
   264 
   288     /**
   265     /**
   289      * Register the given MessageEventHandler.
   266      * Register the given MessageEventHandler.
   290      * 
   267      * 
   291      * @param handler
   268      * @param handler is the handler to register
   292      *            is the handler to register
   269      */
   293      */
   270     public synchronized void register(MessageEventHandler handler) {
   294     public synchronized void register( MessageEventHandler handler ) {
       
   295         Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers);
   271         Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers);
   296         tmp.add( handler );
   272         tmp.add(handler);
   297         messageHandlers  = tmp;
   273         messageHandlers = tmp;
   298     }
   274     }
   299     
   275 
   300     /**
   276     /**
   301      * Remove the given MessageEventHandler.
   277      * Remove the given MessageEventHandler.
   302      * 
   278      * 
   303      * @param handler
   279      * @param handler is the handler to register
   304      *            is the handler to register
   280      */
   305      */
   281     public synchronized void remove(MessageEventHandler handler) {
   306     public synchronized void remove( MessageEventHandler handler ) {
       
   307         Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers);
   282         Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers);
   308         tmp.remove( handler );
   283         tmp.remove(handler);
   309         messageHandlers  = tmp;
   284         messageHandlers = tmp;
   310     }
   285     }
   311 
   286 
   312     /**
   287     /**
   313      * Register the given TaskEventHandler.
   288      * Register the given TaskEventHandler.
   314      * 
   289      * 
   315      * @param handler
   290      * @param handler is the handler to register
   316      *            is the handler to register
   291      */
   317      */
   292     public synchronized void register(TaskEventHandler handler) {
   318     public synchronized void register( TaskEventHandler handler ) {
       
   319         Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers);
   293         Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers);
   320         tmp.add( handler );
   294         tmp.add(handler);
   321         taskHandlers  = tmp;
   295         taskHandlers = tmp;
   322     }
   296     }
   323     
   297 
   324     /**
   298     /**
   325      * Remove the given TaskEventHandler.
   299      * Remove the given TaskEventHandler.
   326      * 
   300      * 
   327      * @param handler
   301      * @param handler is the handler to register
   328      *            is the handler to register
   302      */
   329      */
   303     public synchronized void remove(TaskEventHandler handler) {
   330     public synchronized void remove( TaskEventHandler handler ) {
       
   331         Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers);
   304         Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers);
   332         tmp.remove( handler );
   305         tmp.remove(handler);
   333         taskHandlers  = tmp;
   306         taskHandlers = tmp;
   334     }
   307     }
   335 
       
   336 
   308 
   337     /**
   309     /**
   338      * Return root project.
   310      * Return root project.
       
   311      * 
   339      * @return
   312      * @return
   340      */
   313      */
   341     public Project getProject() {
   314     public Project getProject() {
   342       return project;
   315         return project;
   343     }
   316     }
   344     
   317 
   345     /**
   318     /**
   346      * Get the main StatusAndLogListener.
   319      * Get the main StatusAndLogListener.
       
   320      * 
   347      * @return
   321      * @return
   348      */
   322      */
   349     public static StatusAndLogListener getStatusAndLogListener() {
   323     public static StatusAndLogListener getStatusAndLogListener() {
   350         return self;
   324         return self;
   351     }
   325     }
   352     
   326 
   353     /**
   327     /**
   354      * Check and return required type handler.
   328      * Check and return required type handler.
       
   329      * 
   355      * @param handlerType
   330      * @param handlerType
   356      * @return
   331      * @return
   357      */
   332      */
   358     public synchronized Handler getHandler(Class<?> handlerType) {
   333     public synchronized Handler getHandler(Class<?> handlerType) {
   359         for (BuildEventHandler handler : buildHandlers) {
   334         for (BuildEventHandler handler : buildHandlers) {
   360             if (handlerType.isInstance(handler)) {
   335             if (handlerType.isInstance(handler)) {
   361                 return (Handler)handler;
   336                 return (Handler) handler;
   362             }
   337             }
   363         }
   338         }
   364         return null;
   339         return null;
   365     }
   340     }
   366 
   341