blob: 38f6929ae01bc81ccd0bfa735b7014a5ce9958ec [file] [log] [blame]
/*
* Copyright (c) 2012 Google Inc.
*
* 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 com.google.eclipse.protobuf.ui.builder.protoc;
import static com.google.common.io.Closeables.closeQuietly;
import static com.google.eclipse.protobuf.ui.util.Workbenches.activeWorkbenchPage;
import static org.eclipse.core.runtime.Status.OK_STATUS;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.console.*;
import org.eclipse.ui.progress.UIJob;
/**
* @author alruiz@google.com (Alex Ruiz)
*/
class ConsolePrinter {
private static final String CONSOLE_NAME = "protoc";
private MessageConsoleStream signalStream;
private MessageConsoleStream outputStream;
static ConsolePrinter createAndDisplayConsole() throws PartInitException {
MessageConsole console = findConsole();
IWorkbenchPage page = activeWorkbenchPage();
if (page != null) {
String id = IConsoleConstants.ID_CONSOLE_VIEW;
IConsoleView view = (IConsoleView) page.showView(id);
view.display(console);
}
return new ConsolePrinter(console);
}
private static MessageConsole findConsole() {
IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
for (IConsole console : consoleManager.getConsoles()) {
if (CONSOLE_NAME.equals(console.getName()) && console instanceof MessageConsole) {
return (MessageConsole) console;
}
}
MessageConsole console = new MessageConsole(CONSOLE_NAME, null);
consoleManager.addConsoles(new IConsole[] { console });
return console;
}
private ConsolePrinter(MessageConsole console) {
signalStream = console.newMessageStream();
outputStream = console.newMessageStream();
UIJob job = new UIJob("Set colors in protoc console") {
@Override public IStatus runInUIThread(IProgressMonitor monitor) {
Display display = getDisplay();
signalStream.setColor(new Color(display, 0, 0, 255));
outputStream.setColor(new Color(display, 255, 0, 0));
return OK_STATUS;
}
};
job.schedule();
}
void printSignal(String s) {
signalStream.println(s);
}
void printOutput(String s) {
outputStream.println(s);
}
void close() {
close(signalStream);
close(outputStream);
}
private static void close(MessageConsoleStream stream) {
Color color = stream.getColor();
if (color != null) {
color.dispose();
}
closeQuietly(stream);
}
}