package org.eparapher.rcp.views; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.URL; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.MessageConsole; import org.eclipse.ui.console.MessageConsoleStream; import org.eparapher.rcp.Application; import org.eparapher.rcp.tools.GUIIcons; public class DebugConsoleView extends MessageConsole { private static Logger log = Logger.getLogger(DebugConsoleView.class); private MessageConsoleStream outMessageStream; private MessageConsoleStream errMessageStream; /* * Default Constructor * Redirect JVM Standard output and error output */ public DebugConsoleView() { super(Application.PLUGIN_ID + " Debug Console", ImageDescriptor.createFromImage(GUIIcons.VIEW_CONSOLE_ICON) ); initStreams(); try { //Redirect the std and err output System.setOut(getOutputStream()); System.setErr(getErrorOutputStream()); //Reload Log4J Configuration URL log4JConfig= Platform.getBundle( Application.PLUGIN_ID ).getResource( "log4j.properties" ); PropertyConfigurator.configure( log4JConfig ); } catch (SecurityException e) { System.err.println("Cannot redirect stdout and stderr to eParapher Console"); } ConsolePlugin.getDefault().getConsoleManager().addConsoles( new IConsole[] { this } ); } public DebugConsoleView(String mName, InputStream min, InputStream merr) { super(mName, ImageDescriptor.createFromImage(GUIIcons.VIEW_CONSOLE_ICON) ); initStreams(); StreamGobbler err = new StreamGobbler(merr); StreamGobbler out = new StreamGobbler(min); err.start(); out.start(); ConsolePlugin.getDefault().getConsoleManager().addConsoles( new IConsole[] { this } ); } private void initStreams() { outMessageStream = newMessageStream(); Display d = Display.getCurrent(); outMessageStream.setColor(d.getSystemColor(SWT.COLOR_BLUE)); errMessageStream = newMessageStream(); errMessageStream.setColor(d.getSystemColor(SWT.COLOR_RED)); } public PrintStream getOutputStream() { return new PrintStream(outMessageStream); } public PrintStream getErrorOutputStream() { return new PrintStream(errMessageStream); } /** * A Thread to get Output from External Process */ public static class StreamGobbler extends Thread { InputStream is; StreamGobbler(InputStream is) { this.is = is; } public void run() { try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) System.out.println(line); br.close(); } catch (Throwable ioe) { ioe.printStackTrace(); } } } }