package rhogenwizard; 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.IConsoleManager; import org.eclipse.ui.console.MessageConsole; import org.eclipse.ui.console.MessageConsoleStream; public class ConsoleHelper { public interface Stream { void print(String message); void println(); void println(String message); } public interface Console { void show(); void showOnNextMessage(); void clear(); void disable(); Stream getStream(); Stream getOutputStream(); Stream getErrorStream(); } public static Stream nullStream = new Stream() { @Override public void println(String message) { } @Override public void println() { } @Override public void print(String message) { } }; public static Console nullConsole = new Console() { @Override public void show() { } @Override public void showOnNextMessage() { } @Override public void clear() { } @Override public void disable() { } @Override public Stream getStream() { return nullStream; } @Override public Stream getOutputStream() { return nullStream; } @Override public Stream getErrorStream() { return nullStream; } }; private static class StreamImpl implements Stream { private boolean m_enabled; private Runnable m_callback; private MessageConsoleStream m_stream; public StreamImpl(MessageConsole console, Runnable callback, int swtColorId) { m_enabled = true; m_callback = callback; m_stream = console.newMessageStream(); setColor(m_stream, swtColorId); } public void disable() { m_enabled = false; } @Override public void print(String message) { if (m_enabled) { m_callback.run(); m_stream.print(message); } } @Override public void println() { if (m_enabled) { m_callback.run(); m_stream.println(); } } @Override public void println(String message) { if (m_enabled) { m_callback.run(); m_stream.println(message); } } private static void setColor(final MessageConsoleStream stream, final int swtColorId) { Display display1 = Display.getCurrent(); if (display1 != null) { stream.setColor(display1.getSystemColor(swtColorId)); return; } final Display display2 = Display.getDefault(); if (display2 != null) { display2.asyncExec(new Runnable() { @Override public void run() { stream.setColor(display2.getSystemColor(swtColorId)); } }); } } } private static class ConsoleImpl implements Console { private final MessageConsole m_console; private final StreamImpl m_stream; private final StreamImpl m_outputStream; private final StreamImpl m_errorStream; private boolean m_enabled; private boolean m_showOnNextMessage; public ConsoleImpl(String name) { Runnable callback = new Runnable() { @Override public void run() { if (m_showOnNextMessage) { show(); m_showOnNextMessage = false; } } }; m_console = findConsole(name); m_stream = new StreamImpl(m_console, callback, SWT.COLOR_BLACK); m_outputStream = new StreamImpl(m_console, callback, SWT.COLOR_DARK_BLUE); m_errorStream = new StreamImpl(m_console, callback, SWT.COLOR_DARK_RED); m_enabled = true; m_showOnNextMessage = false; } @Override public void clear() { if (m_enabled) { m_console.clearConsole(); } } @Override public void show() { if (m_enabled) { IConsoleManager conMan = ConsolePlugin.getDefault().getConsoleManager(); conMan.showConsoleView(m_console); conMan.refresh(m_console); } } @Override public void showOnNextMessage() { if (m_enabled) { m_showOnNextMessage = true; } } @Override public Stream getStream() { return m_stream; } @Override public Stream getOutputStream() { return m_outputStream; } @Override public Stream getErrorStream() { return m_errorStream; } public void disable() { m_enabled = false; m_stream.disable(); m_outputStream.disable(); m_errorStream.disable(); } private static MessageConsole findConsole(String name) { ConsolePlugin plugin = ConsolePlugin.getDefault(); if (plugin == null) return null; IConsoleManager conMan = plugin.getConsoleManager(); if (conMan == null) return null; IConsole[] existing = conMan.getConsoles(); for (int i = 0; i < existing.length; i++) { if (name.equals(existing[i].getName())) { return (MessageConsole) existing[i]; } } // no console found, so create a new one MessageConsole myConsole = new MessageConsole(name, null); conMan.addConsoles(new IConsole[] { myConsole }); return myConsole; } } private static Console appConsole = null; private static Console buildConsole = null; public static void initialize() { if (appConsole == null) { appConsole = new ConsoleImpl("Rhomobile application console"); } if (buildConsole == null) { buildConsole = new ConsoleImpl("Rhomobile build console"); } } public static void setupNullConsoles() { appConsole = nullConsole; buildConsole = nullConsole; } public static void disableConsoles() { initialize(); appConsole.disable(); buildConsole.disable(); } public static Console getAppConsole() { initialize(); return appConsole; } public static Console getBuildConsole() { initialize(); return buildConsole; } }