blob: f24e775eb7e40d014bfbb8fa916d0507c031dd3f [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial Implementation
*
*****************************************************************************/
package org.eclipse.ptp.remotetools.utils.stream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Connects an inputstream to an outputstream.
* <p>
* This is a general facility that allows to forward data received from an
* inputstream to an outputstream.
* <p>
* An example would be to forward automatically data received from a socket
* inputstream to a file outputstream.
* <p>
* Do not forget to call run() method!
*
* @author Daniel Felix Ferber
* @since 1.0
*/
public class StreamBridge {
/*
* TODO: Open issues
* - Handle exceptions
*/
IStreamListener dataForwarder = null;
StreamObserver streamObserver = null;
private class DataForwarder implements IStreamListener {
OutputStream output;
StreamBridge bridge;
public DataForwarder(StreamBridge bridge, OutputStream output) {
this.output = output;
this.bridge = bridge;
}
public void newBytes(byte[] bytes, int length) {
try {
output.write(bytes, 0, length);
} catch (IOException e) {
// TODO Handle exception
bridge.kill();
}
}
public void newChars(char[] chars, int length) {
}
public void streamClosed() {
bridge.kill();
}
public void streamError(Exception e) {
// TODO Handle exception
bridge.kill();
}
}
public StreamBridge(InputStream input, OutputStream output, String name) {
dataForwarder = new DataForwarder(this, output);
streamObserver = new StreamObserver(input, dataForwarder, name);
}
public StreamBridge(InputStream input, OutputStream output) {
dataForwarder = new DataForwarder(this, output);
streamObserver = new StreamObserver(input, dataForwarder);
}
public void kill() {
if (streamObserver != null) {
streamObserver.kill();
}
dataForwarder = null;
streamObserver = null;
}
public void run() {
streamObserver.start();
}
}