| // Copyright 2017 The Bazel Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.devtools.bazel.e4b; |
| |
| import com.google.devtools.bazel.e4b.command.CommandConsole; |
| import com.google.devtools.bazel.e4b.command.CommandConsole.CommandConsoleFactory; |
| import java.io.IOException; |
| import java.io.OutputStream; |
| 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; |
| |
| /** Implementation of {@link CommandConsoleFactory} using Eclipse's console */ |
| class CommandConsoleFactoryImpl implements CommandConsoleFactory { |
| |
| private static class CommandConsoleImpl implements CommandConsole { |
| |
| private MessageConsole console; |
| |
| CommandConsoleImpl(MessageConsole console) { |
| this.console = console; |
| } |
| |
| @Override |
| public OutputStream createOutputStream() { |
| return console.newMessageStream(); |
| } |
| |
| @Override |
| public OutputStream createErrorStream() { |
| // Get the error stream for the given console (a stream that print in red). |
| final MessageConsoleStream errorStream = console.newMessageStream(); |
| Display display = Display.getCurrent(); |
| if (display == null) { |
| display = Display.getDefault(); |
| } |
| display.asyncExec(() -> errorStream.setColor(new Color(null, 255, 0, 0))); |
| return errorStream; |
| } |
| } |
| |
| @Override |
| public CommandConsole get(String name, String title) throws IOException { |
| MessageConsole console = findConsole(name); |
| MessageConsoleStream stream = console.newMessageStream(); |
| stream.setActivateOnWrite(true); |
| stream.write("*** " + title + " ***\n"); |
| return new CommandConsoleImpl(console); |
| } |
| |
| // Taken from the eclipse website, find a console |
| private static MessageConsole findConsole(String name) { |
| ConsolePlugin plugin = ConsolePlugin.getDefault(); |
| IConsoleManager conMan = plugin.getConsoleManager(); |
| 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; |
| } |
| } |