You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@locus.apache.org on 2000/07/21 13:44:34 UTC

cvs commit: jakarta-ant/src/main/org/apache/tools/ant XmlLogger.java

bodewig     00/07/21 04:44:34

  Modified:    src/main/org/apache/tools/ant XmlLogger.java
  Log:
  Better support for subbuilds in XmlLogger. Output of XmlLogger can be
  sent to another file using the XmlLogger.file property.
  Submitted by:	Glenn McAllister <gl...@ca.ibm.com>
  
  Revision  Changes    Path
  1.3       +44 -9     jakarta-ant/src/main/org/apache/tools/ant/XmlLogger.java
  
  Index: XmlLogger.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/XmlLogger.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XmlLogger.java	2000/06/29 15:32:37	1.2
  +++ XmlLogger.java	2000/07/21 11:44:34	1.3
  @@ -55,6 +55,7 @@
   package org.apache.tools.ant;
   
   import java.io.*;
  +import java.util.*;
   import javax.xml.parsers.*;
   import org.w3c.dom.*;
   
  @@ -97,6 +98,11 @@
       private long targetStartTime;
       private long taskStartTime;
   
  +    private Stack targetTimeStack = new Stack();
  +    private Stack targetStack = new Stack();
  +    private Stack taskTimeStack = new Stack();
  +    private Stack taskStack = new Stack();
  +
       /**
        *  Constructs a new BuildListener that logs build events to an XML file.
        */
  @@ -119,19 +125,30 @@
           }
   
           try {
  -                Writer out = new FileWriter("log.xml");
  -                out.write("<?xml:stylesheet type=\"text/xsl\" href=\"log.xsl\"?>\n\n");
  -                write(buildElement, out, 0);
  -                out.flush();
  -                out.close();
  +            String outFilename = 
  +                event.getProject().getProperty("XmlLogger.file");
   
  -        }
  -        catch(IOException exc) {
  +            if (outFilename == null) {
  +                outFilename = "log.xml";
  +            }
  +
  +            Writer out = new FileWriter(outFilename);
  +            out.write("<?xml:stylesheet type=\"text/xsl\" href=\"log.xsl\"?>\n\n");
  +            write(buildElement, out, 0);
  +            out.flush();
  +            out.close();
  +            
  +        } catch(IOException exc) {
               throw new BuildException("Unable to close log file", exc);
           }
  +        buildElement = null;
       }
   
       public void targetStarted(BuildEvent event) {
  +        if (targetElement != null) {
  +            targetTimeStack.push(new Long(targetStartTime));
  +            targetStack.push(targetElement);
  +        }
           targetStartTime = System.currentTimeMillis();
           targetElement = doc.createElement(TARGET_TAG);
           targetElement.setAttribute(NAME_ATTR, event.getTarget().getName());
  @@ -140,12 +157,26 @@
       public void targetFinished(BuildEvent event) {
           long totalTime = System.currentTimeMillis() - targetStartTime;
           targetElement.setAttribute(TIME_ATTR, formatTime(totalTime));
  -        buildElement.appendChild(targetElement);
  +        if (taskElement == null) {
  +            buildElement.appendChild(targetElement);
  +        } else {
  +            taskElement.appendChild(targetElement);
  +        }
   
           targetElement = null;
  +
  +        if (!targetStack.isEmpty()) {
  +            targetStartTime = ((Long) targetTimeStack.pop()).longValue();
  +            targetElement = (Element) targetStack.pop();
  +        }
       }
   
       public void taskStarted(BuildEvent event) {
  +        if (taskElement != null) {
  +            taskTimeStack.push(new Long(taskStartTime));
  +            taskStack.push(taskElement);
  +        }
  +
           taskStartTime = System.currentTimeMillis();
           taskElement = doc.createElement(TASK_TAG);
   
  @@ -165,6 +196,10 @@
           targetElement.appendChild(taskElement);
   
           taskElement = null;
  +        if (!taskStack.isEmpty()) {
  +            taskStartTime = ((Long) taskTimeStack.pop()).longValue();
  +            taskElement = (Element) taskStack.pop();
  +        }
       }
   
       public void messageLogged(BuildEvent event) {
  @@ -266,4 +301,4 @@
           }
   
       }
  -}
  \ No newline at end of file
  +}