/**
* Copyright (c) 2016 committers of YAKINDU and others.
* 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
*
* Contributors:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.generator.builder.console;
import java.io.IOException;
import java.io.PrintWriter;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.PlatformUI;
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.yakindu.sct.generator.builder.BuilderActivator;
import org.yakindu.sct.generator.core.console.IConsoleLogger;
/**
* @author Johannes Dicks - Initial contribution and API
*/
public class EclipseConsoleLogger implements IConsoleLogger {
public static final String SCT_GENERATOR_CONSOLE = "SCT Generator Console";
private MessageConsoleStream info;
private MessageConsoleStream error;
public EclipseConsoleLogger() {
init();
}
public void init() {
if (Platform.isRunning()) {
info = getConsole().newMessageStream();
error = getConsole().newMessageStream();
error.setActivateOnWrite(true);
}
}
private MessageConsole getConsole() {
ConsolePlugin plugin = ConsolePlugin.getDefault();
IConsoleManager conMan = plugin.getConsoleManager();
IConsole[] existing = conMan.getConsoles();
for (int i = 0; i < existing.length; i++) {
if (SCT_GENERATOR_CONSOLE.equals(existing[i].getName())) {
return (MessageConsole) existing[i];
}
}
MessageConsole myConsole = new MessageConsole(SCT_GENERATOR_CONSOLE, null);
conMan.addConsoles(new IConsole[] { myConsole });
return myConsole;
}
public void close() {
try {
info.close();
error.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void logError(Throwable t) {
if (error != null && !error.isClosed() && PlatformUI.isWorkbenchRunning()) {
PrintWriter printWriter = new PrintWriter(error);
t.printStackTrace(printWriter);
printWriter.flush();
printWriter.close();
BuilderActivator.getDefault().getLog()
.log(new Status(IStatus.ERROR, BuilderActivator.PLUGIN_ID, t.getMessage(), t));
}
}
@Override
public void log(String line) {
if (info != null && !info.isClosed() && PlatformUI.isWorkbenchRunning()) {
info.println(line);
}
}
}