/******************************************************************************* * Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0-standalone.html ******************************************************************************/ package se.unlogic.standardutils.exec; import se.unlogic.standardutils.readwrite.ReadWriteUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; /** * A simple buffered {@link StreamHandler} implementation that prints the input from the {@link InputStream} to the given {@link OutputStream}. If no {@link OutputStream} is given it defaults to System.out.<p> * * This implementation inputStream based on the {@link PrintWriter}, {@link InputStreamReader} and {@link BufferedReader} classes. * * @author Robert "Unlogic" Olofsson (unlogic@unlogic.se) * */ public class StreamPrinter extends Thread implements StreamHandler { private InputStream inputStream; private String prefix; private OutputStream outputStream; private boolean terminated = false; public StreamPrinter(String prefix, OutputStream os) { super(); this.outputStream = os; this.prefix = prefix; } public StreamPrinter(OutputStream os) { super(); this.outputStream = os; } public StreamPrinter() {} public boolean isTerminated(){ return terminated; } public void terminate(){ this.terminated = true; } @Override public void run() { InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; try { PrintWriter pw = null; if (outputStream != null) { pw = new PrintWriter(outputStream); }else{ pw = new PrintWriter(System.out); } inputStreamReader = new InputStreamReader(inputStream); bufferedReader = new BufferedReader(inputStreamReader); String line = null; if(prefix != null){ while (!terminated && (line = bufferedReader.readLine()) != null) { pw.println(prefix + line); } }else{ while (!terminated && (line = bufferedReader.readLine()) != null) { pw.println(line); } } if (pw != null) { pw.flush(); } } catch (IOException e) { throw new RuntimeException(e); }finally{ ReadWriteUtils.closeReader(bufferedReader); ReadWriteUtils.closeReader(inputStreamReader); this.terminated = true; } } public void handleStream(InputStream is) { this.inputStream = is; this.start(); } public String getPrefix() { return prefix; } public OutputStream getOutputStream() { return outputStream; } public boolean isFinished() { return !this.isAlive(); } public void awaitFinish() { try { this.join(); } catch (InterruptedException e) { throw new RuntimeException(e); } } }