/******************************************************************************* * Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>. * 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 org.axdt.launch; import java.io.IOException; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Color; 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; import com.google.common.collect.Lists; /** * @author nkuebler * @author mb0 */ public abstract class AbstractConsole extends MessageConsole { @SuppressWarnings("unchecked") public static <T extends AbstractConsole> T setConsole( T newConsole) { return setConsole(newConsole, (Class<T>)newConsole.getClass()); } public static <T extends AbstractConsole> T setConsole( T newConsole, Class<T> type) { IConsoleManager consoleManager = ConsolePlugin.getDefault() .getConsoleManager(); List<T> toRemove = Lists.newArrayList(); for (IConsole c : consoleManager.getConsoles()) if (type.isInstance(c)) toRemove.add(type.cast(c)); consoleManager.removeConsoles(toRemove.toArray( new IConsole[toRemove.size()])); consoleManager.addConsoles(new IConsole[] { newConsole }); consoleManager.showConsoleView(newConsole); return newConsole; } public AbstractConsole(String name, ImageDescriptor imageDescriptor) { super(name, imageDescriptor); configure(); } protected void configure() { } public void appendAsync(final String str, final int colorCode) { final Display display = Display.getDefault(); display.asyncExec(new Runnable() { public void run() { Color color = colorCode < 0 ? null : display .getSystemColor(colorCode); append(str, color); } }); } public void append(String str) { append(str, null); } public void append(String str, Color color) { try { MessageConsoleStream stream = newMessageStream(); if (color != null) stream.setColor(color); stream.println(str); stream.close(); } catch (IOException e) { Logger.getLogger(getClass()).error("error closing console stream", e); } } }