You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by do...@apache.org on 2002/01/06 02:39:50 UTC

cvs commit: jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/impl LogOutputStream.java

donaldp     02/01/05 17:39:50

  Added:       proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/impl
                        LogOutputStream.java
  Log:
  Created a OutputStream that redirected to an appropriate handler
  
  Revision  Changes    Path
  1.1                  jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/impl/LogOutputStream.java
  
  Index: LogOutputStream.java
  ===================================================================
  /*
   * 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.framework.exec.impl;
  
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import org.apache.myrmidon.framework.exec.ExecOutputHandler;
  import org.apache.avalon.framework.logger.Logger;
  
  /**
   * Logs each line written to this stream to the specified
   * <code>ExecOutputHandler</code>. Tries to be smart about
   * line separators.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/01/06 01:39:50 $
   */
  class LogOutputStream
      extends OutputStream
  {
      private final boolean m_isError;
      private final ExecOutputHandler m_handler;
  
      private final ByteArrayOutputStream m_buffer = new ByteArrayOutputStream();
      private boolean m_skip;
  
      public LogOutputStream( final ExecOutputHandler handler,
                              final boolean isError )
      {
          m_handler = handler;
          m_isError = isError;
      }
  
      /**
       * Writes all remaining
       */
      public void close()
          throws IOException
      {
          if( m_buffer.size() > 0 )
          {
              processBuffer();
          }
          super.close();
      }
  
      /**
       * Write the data to the buffer and flush the buffer, if a line separator is
       * detected.
       *
       * @param ch data to log (byte).
       */
      public void write( final int ch )
          throws IOException
      {
          if( ( ch == '\n' ) || ( ch == '\r' ) )
          {
              if( !m_skip )
              {
                  processBuffer();
              }
          }
          else
          {
              m_buffer.write( (byte)ch );
          }
  
          m_skip = ( ch == '\r' );
      }
  
      /**
       * Converts the buffer to a string and sends it to <code>ExecOutputHandler</code>
       */
      private void processBuffer()
      {
          final String line = m_buffer.toString();
          if( m_isError )
          {
              m_handler.stderr( line );
          }
          else
          {
              m_handler.stdout( line );
          }
          m_buffer.reset();
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>