package org.eclipse.maven.core;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PrintStream;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
public class OutPutHandler implements Runnable {
private MessageConsole console;
private BufferedReader input;
private PrintStream printStream;
private volatile boolean end;
private static final String CONSOLE_NAME = "CONSOLE_MAVEN";
public OutPutHandler() {
InputStream in = new PipedInputStream();
OutputStream out;
try {
out = new PipedOutputStream((PipedInputStream) in);
printStream = new PrintStream(out);
} catch (IOException e) {
System.err.println(e);
}
input = new BufferedReader(new InputStreamReader(in));
}
public void write(String line) {
if (console == null)
console = findConsole(CONSOLE_NAME);
MessageConsoleStream out = console.newMessageStream();
out.println(line);
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
end = false;
if (console == null)
console = findConsole(CONSOLE_NAME);
MessageConsoleStream out = console.newMessageStream();
String line = null;
try {
while ((line = input.readLine()) != null) {
out.println(line);
}
} catch (IOException e) {
if ( !end )
e.printStackTrace();
} finally {
try {
out.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public synchronized void outPutEnd() {
end = true;
}
private MessageConsole findConsole(String name) {
ConsolePlugin plugin = ConsolePlugin.getDefault();
IConsoleManager conMan = plugin.getConsoleManager();
IConsole[] existing = conMan.getConsoles();
for (IConsole iCons : existing)
if (name.equals(iCons.getName()))
return (MessageConsole) iCons;
// on n'a pas trouv� la console, on en cr�e une nouvelle
MessageConsole myConsole = new MessageConsole(name, null);
conMan.addConsoles(new IConsole[] { myConsole });
return myConsole;
}
public PrintStream getPrintStream() {
return printStream;
}
public void setPrintStream(PrintStream printStream) {
this.printStream = printStream;
}
}