diff --git a/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java b/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java index 263ba531a..a97364eeb 100644 --- a/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java +++ b/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java @@ -17,37 +17,21 @@ package org.apache.tools.ant.taskdefs; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.OutputStream; + import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectComponent; import org.apache.tools.ant.Task; - +import org.apache.tools.ant.util.LineOrientedOutputStream; /** * Logs each line written to this stream to the log system of ant. * * Tries to be smart about line separators.
- * TODO: This class can be split to implement other line based processing - * of data written to the stream. * * @since Ant 1.2 */ -public class LogOutputStream extends OutputStream { - - /** Initial buffer size. */ - private static final int INTIAL_SIZE = 132; - - /** Carriage return */ - private static final int CR = 0x0d; - - /** Linefeed */ - private static final int LF = 0x0a; - - private ByteArrayOutputStream buffer - = new ByteArrayOutputStream(INTIAL_SIZE); - private boolean skip = false; +public class LogOutputStream extends LineOrientedOutputStream { private ProjectComponent pc; private int level = Project.MSG_INFO; @@ -74,41 +58,16 @@ public class LogOutputStream extends OutputStream { this.level = level; } - - /** - * Write the data to the buffer and flush the buffer, if a line - * separator is detected. - * - * @param cc data to log (byte). - */ - public void write(int cc) throws IOException { - final byte c = (byte) cc; - if ((c == '\n') || (c == '\r')) { - if (!skip) { - processBuffer(); - } - } else { - buffer.write(cc); - } - skip = (c == '\r'); - } - - /** - * Flush this log stream - */ - public void flush() { - if (buffer.size() > 0) { - processBuffer(); - } - } - - /** * Converts the buffer to a string and sends it to processLine */ protected void processBuffer() { - processLine(buffer.toString()); - buffer.reset(); + try { + super.processBuffer(); + } catch (IOException e) { + // impossible since *our* processLine doesn't throw an IOException + throw new RuntimeException("Impossible IOException caught: " + e); + } } /** @@ -129,52 +88,8 @@ public class LogOutputStream extends OutputStream { pc.log(line, level); } - - /** - * Writes all remaining - */ - public void close() throws IOException { - if (buffer.size() > 0) { - processBuffer(); - } - super.close(); - } - public int getMessageLevel() { return level; } - /** - * Write a block of characters to the output stream - * - * @param b the array containing the data - * @param off the offset into the array where data starts - * @param len the length of block - * - * @throws IOException if the data cannot be written into the stream. - */ - public void write(byte[] b, int off, int len) throws IOException { - // find the line breaks and pass other chars through in blocks - int offset = off; - int blockStartOffset = offset; - int remaining = len; - while (remaining > 0) { - while (remaining > 0 && b[offset] != LF && b[offset] != CR) { - offset++; - remaining--; - } - // either end of buffer or a line separator char - int blockLength = offset - blockStartOffset; - if (blockLength > 0) { - buffer.write(b, blockStartOffset, blockLength); - } - while (remaining > 0 && (b[offset] == LF || b[offset] == CR)) { - write(b[offset]); - offset++; - remaining--; - } - blockStartOffset = offset; - } - } - } diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java index f5bd60728..fe1c605f2 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright 2002,2004 The Apache Software Foundation + * Copyright 2002,2004-2005 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,29 +16,23 @@ */ package org.apache.tools.ant.taskdefs.cvslib; -import org.apache.tools.ant.taskdefs.LogOutputStream; +import org.apache.tools.ant.util.LineOrientedOutputStream; /** * A dummy stream that just passes stuff to the parser. - * - * @version $Revision$ $Date$ */ -class RedirectingOutputStream - extends LogOutputStream { +class RedirectingOutputStream extends LineOrientedOutputStream { private final ChangeLogParser parser; - /** * Creates a new instance of this class. * * @param parser the parser to which output is sent. */ public RedirectingOutputStream(final ChangeLogParser parser) { - super(null, 0); this.parser = parser; } - /** * Logs a line to the log system of ant. * diff --git a/src/main/org/apache/tools/ant/util/LineOrientedOutputStream.java b/src/main/org/apache/tools/ant/util/LineOrientedOutputStream.java index 86dfe1dc2..3da0556f1 100644 --- a/src/main/org/apache/tools/ant/util/LineOrientedOutputStream.java +++ b/src/main/org/apache/tools/ant/util/LineOrientedOutputStream.java @@ -73,7 +73,7 @@ public abstract class LineOrientedOutputStream extends OutputStream { * Converts the buffer to a string and sends it to * processLine */ - private void processBuffer() throws IOException { + protected void processBuffer() throws IOException { try { processLine(buffer.toString()); } finally {