| /****************************************************************************** |
| * 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(); |
| } |
| } |