/**
* Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.tools.forge.ui.internal.ext.provider;
import java.io.PrintStream;
import org.eclipse.swt.SWT;
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 org.jboss.forge.addon.ui.UIDesktop;
import org.jboss.forge.addon.ui.UIProvider;
import org.jboss.forge.addon.ui.output.UIOutput;
import org.jboss.tools.forge.core.furnace.FurnaceRuntime;
/**
* Eclipse implementation of {@link UIProvider}
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public class ForgeUIProvider implements UIProvider, UIOutput {
private MessageConsole forgeConsole;
private PrintStream forgeConsoleOutputStream;
private PrintStream forgeConsoleErrorStream;
private Color red;
private MessageConsole getForgeConsole() {
if (forgeConsole == null) {
forgeConsole = findForgeConsole();
}
return forgeConsole;
}
@Override
public String getName() {
return "Forge " + FurnaceRuntime.INSTANCE.getVersion() + " Console";
}
@Override
public boolean isEmbedded() {
return true;
}
private MessageConsole findForgeConsole() {
ConsolePlugin consolePlugin = ConsolePlugin.getDefault();
IConsoleManager consoleManager = consolePlugin.getConsoleManager();
IConsole[] allConsoles = consoleManager.getConsoles();
for (int i = 0; i < allConsoles.length; i++) {
if (getName().equals(allConsoles[i].getName())) {
return (MessageConsole) allConsoles[i];
}
}
MessageConsole myConsole = new MessageConsole(getName(), null);
consoleManager.addConsoles(new IConsole[] { myConsole });
return myConsole;
}
@Override
public boolean isGUI() {
return true;
}
@Override
public UIOutput getOutput() {
return this;
}
@Override
public PrintStream out() {
if (forgeConsoleOutputStream == null) {
forgeConsoleOutputStream = new PrintStream(getForgeConsole().newMessageStream(), true);
}
return forgeConsoleOutputStream;
}
@Override
public PrintStream err() {
if (forgeConsoleErrorStream == null) {
MessageConsoleStream messageConsoleStream = getForgeConsole().newMessageStream();
Display.getDefault().syncExec(() -> messageConsoleStream.setColor(getRed()));
forgeConsoleErrorStream = new PrintStream(messageConsoleStream, true);
}
return forgeConsoleErrorStream;
}
private Color getRed() {
if (red == null) {
Display.getDefault().syncExec(() -> red = Display.getDefault().getSystemColor(SWT.COLOR_RED));
}
return red;
}
@Override
public void error(PrintStream writer, String message) {
writer.print("[ERROR] ");
writer.println(message);
}
@Override
public void success(PrintStream writer, String message) {
writer.print("[SUCCESS] ");
writer.println(message);
}
@Override
public void info(PrintStream writer, String message) {
writer.print("[INFO] ");
writer.println(message);
}
@Override
public void warn(PrintStream writer, String message) {
writer.print("[WARNING] ");
writer.println(message);
}
@Override
public UIDesktop getDesktop() {
return new ForgeUIDesktop();
}
}