aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java252
1 files changed, 0 insertions, 252 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java
deleted file mode 100644
index df95eedb..00000000
--- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Copies all data from an input stream to an output stream.
- *
- * @since Ant 1.2
- */
-public class StreamPumper implements Runnable {
-
- private static final int SMALL_BUFFER_SIZE = 128;
-
- private final InputStream is;
- private final OutputStream os;
- private volatile boolean finish;
- private volatile boolean finished;
- private final boolean closeWhenExhausted;
- private boolean autoflush = false;
- private Exception exception = null;
- private int bufferSize = SMALL_BUFFER_SIZE;
- private boolean started = false;
- private final boolean useAvailable;
-
- /**
- * Create a new StreamPumper.
- *
- * @param is input stream to read data from
- * @param os output stream to write data to.
- * @param closeWhenExhausted if true, the output stream will be closed when
- * the input is exhausted.
- */
- public StreamPumper(InputStream is, OutputStream os, boolean closeWhenExhausted) {
- this(is, os, closeWhenExhausted, false);
- }
-
-
- /**
- * Create a new StreamPumper.
- *
- * <p><b>Note:</b> If you set useAvailable to true, you must
- * explicitly invoke {@link #stop stop} or interrupt the
- * corresponding Thread when you are done or the run method will
- * never finish on some JVMs (namely those where available returns
- * 0 on a closed stream). Setting it to true may also impact
- * performance negatively. This flag should only be set to true
- * if you intend to stop the pumper before the input stream gets
- * closed.</p>
- *
- * @param is input stream to read data from
- * @param os output stream to write data to.
- * @param closeWhenExhausted if true, the output stream will be closed when
- * the input is exhausted.
- * @param useAvailable whether the pumper should use {@link
- * java.io.InputStream#available available} to determine
- * whether input is ready, thus trying to emulate
- * non-blocking behavior.
- *
- * @since Ant 1.8.0
- */
- public StreamPumper(InputStream is, OutputStream os,
- boolean closeWhenExhausted,
- boolean useAvailable) {
- this.is = is;
- this.os = os;
- this.closeWhenExhausted = closeWhenExhausted;
- this.useAvailable = useAvailable;
- }
-
- /**
- * Create a new StreamPumper.
- *
- * @param is input stream to read data from
- * @param os output stream to write data to.
- */
- public StreamPumper(InputStream is, OutputStream os) {
- this(is, os, false);
- }
-
- /**
- * Set whether data should be flushed through to the output stream.
- * @param autoflush if true, push through data; if false, let it be buffered
- * @since Ant 1.6.3
- */
- /*package*/ void setAutoflush(boolean autoflush) {
- this.autoflush = autoflush;
- }
-
- /**
- * Copies data from the input stream to the output stream.
- *
- * Terminates as soon as the input stream is closed or an error occurs.
- */
- public void run() {
- synchronized (this) {
- started = true;
- }
- finished = false;
-
- final byte[] buf = new byte[bufferSize];
-
- int length;
- try {
- while (true) {
- waitForInput(is);
-
- if (finish || Thread.interrupted()) {
- break;
- }
-
- length = is.read(buf);
- if (length <= 0 || Thread.interrupted()) {
- break;
- }
- os.write(buf, 0, length);
- if (autoflush) {
- os.flush();
- }
- if (finish) {
- break;
- }
- }
- // On completion, drain any available data (which might be the first data available for quick executions)
- if (finish) {
- while((length = is.available()) > 0) {
- if (Thread.interrupted()) {
- break;
- }
- length = is.read(buf, 0, Math.min(length, buf.length));
- if (length <= 0) {
- break;
- }
- os.write(buf, 0, length);
- }
- }
- os.flush();
- } catch (InterruptedException ie) {
- // likely PumpStreamHandler trying to stop us
- } catch (Exception e) {
- synchronized (this) {
- exception = e;
- }
- } finally {
- if (closeWhenExhausted) {
- FileUtils.close(os);
- }
- finished = true;
- finish = false;
- synchronized (this) {
- notifyAll();
- }
- }
- }
-
- /**
- * Tells whether the end of the stream has been reached.
- * @return true is the stream has been exhausted.
- */
- public boolean isFinished() {
- return finished;
- }
-
- /**
- * This method blocks until the StreamPumper finishes.
- * @throws InterruptedException if interrupted.
- * @see #isFinished()
- */
- public synchronized void waitFor() throws InterruptedException {
- while (!isFinished()) {
- wait();
- }
- }
-
- /**
- * Set the size in bytes of the read buffer.
- * @param bufferSize the buffer size to use.
- * @throws IllegalStateException if the StreamPumper is already running.
- */
- public synchronized void setBufferSize(int bufferSize) {
- if (started) {
- throw new IllegalStateException("Cannot set buffer size on a running StreamPumper");
- }
- this.bufferSize = bufferSize;
- }
-
- /**
- * Get the size in bytes of the read buffer.
- * @return the int size of the read buffer.
- */
- public synchronized int getBufferSize() {
- return bufferSize;
- }
-
- /**
- * Get the exception encountered, if any.
- * @return the Exception encountered.
- */
- public synchronized Exception getException() {
- return exception;
- }
-
- /**
- * Stop the pumper as soon as possible.
- * Note that it may continue to block on the input stream
- * but it will really stop the thread as soon as it gets EOF
- * or any byte, and it will be marked as finished.
- * @since Ant 1.6.3
- */
- /*package*/ synchronized void stop() {
- finish = true;
- notifyAll();
- }
-
- private static final long POLL_INTERVAL = 100;
-
- private void waitForInput(InputStream is)
- throws IOException, InterruptedException {
- if (useAvailable) {
- while (!finish && is.available() == 0) {
- if (Thread.interrupted()) {
- throw new InterruptedException();
- }
-
- synchronized (this) {
- this.wait(POLL_INTERVAL);
- }
- }
- }
- }
-
-}