/** * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * 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 */ package gov.redhawk.ide.debug.internal.ui; import java.io.IOException; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.console.ConsoleColorProvider; import org.eclipse.debug.ui.console.IConsole; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleOutputStream; import gov.redhawk.ide.debug.ConsoleColor; import gov.redhawk.ide.debug.ILaunchLogger; public class LaunchConsoleLogger implements ILaunchLogger { private Color stdErrColor; public LaunchConsoleLogger() { // Get the color for stderr stdErrColor = new ConsoleColorProvider().getColor(IDebugUIConstants.ID_STANDARD_ERROR_STREAM); } public void writeToConsole(ILaunch launch, String message, ConsoleColor color) throws IllegalStateException { // Find console IOConsole ioConsole = getIOConsole(launch); if (ioConsole == null) { throw new IllegalStateException(); } // Change color, if necessary final IOConsoleOutputStream out = ioConsole.newOutputStream(); if (color == ConsoleColor.STDERR) { Display.getDefault().syncExec(new Runnable() { public void run() { out.setColor(stdErrColor); } }); } // Write message and clean up try { if (message.endsWith("\n")) { out.write(message); } else { out.write(message + "\n"); } } catch (IOException e) { throw new IllegalStateException(e); } finally { try { out.close(); } catch (IOException ex) { // PASS } } } /** * Try to find an {@link IOConsole} for a process associated with the launch * @param launch * @return */ private IOConsole getIOConsole(ILaunch launch) { org.eclipse.ui.console.IConsole[] consoles = ConsolePlugin.getDefault().getConsoleManager().getConsoles(); IProcess[] processes = launch.getProcesses(); for (org.eclipse.ui.console.IConsole console : consoles) { if (!(console instanceof IConsole && console instanceof IOConsole)) { continue; } IConsole debugIConsole = (IConsole) console; IProcess consoleProcess = debugIConsole.getProcess(); for (IProcess process : processes) { if (process.equals(consoleProcess)) { return (IOConsole) debugIConsole; } } } return null; } }