/******************************************************************************* * Copyright (C) 2003-2007, 2013 Guillaume Brocker * Copyright (C) 2015, Andre Bossert * * 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: * Guillaume Brocker - Initial API and implementation * Andre Bossert - added show command in console / title * ******************************************************************************/ package eclox.ui.console; import java.util.HashMap; import java.util.Map; import org.eclipse.ui.console.AbstractConsole; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IConsoleView; import org.eclipse.ui.part.IPageBookViewPage; import eclox.core.doxygen.BuildJob; import eclox.core.doxygen.IBuildJobListener; /** * Implements the doxygen output console * * @author Guillaume Brocker */ public class Console extends AbstractConsole { /** * @brief Implements a build job listener. */ private class MyBuildJobListener implements IBuildJobListener { /** * @see eclox.core.doxygen.IBuildJobListener#buildJobLogCleared(eclox.core.doxygen.BuildJob) */ public void buildJobLogCleared(BuildJob job) {} /** * @see eclox.core.doxygen.IBuildJobListener#buildJobLogUpdated(eclox.core.doxygen.BuildJob, java.lang.String) */ public void buildJobLogUpdated(BuildJob job, String output) {} /** * @see eclox.core.doxygen.IBuildJobListener#buildJobRemoved(eclox.core.doxygen.BuildJob) */ public void buildJobRemoved(BuildJob job) { final BuildJob localJob = job; ConsolePlugin.getStandardDisplay().asyncExec( new Runnable() { public void run() { remove(localJob); } } ); } } private static Map<BuildJob, Console> consoles = new HashMap<BuildJob, Console>(); ///< Holds all known console instances. private BuildJob job; ///< the build job /** * Constructor * * @param job the build job whose output must be shown */ private Console(BuildJob job) { super( job.getName(), null ); this.job = job; this.job.addBuidJobListener(new MyBuildJobListener()); } /** * @see org.eclipse.ui.console.IConsole#createPage(org.eclipse.ui.console.IConsoleView) */ public IPageBookViewPage createPage(IConsoleView view) { return new ConsolePage(this); } /** * @see org.eclipse.ui.console.AbstractConsole#dispose() */ protected void dispose() { consoles.remove(job); super.dispose(); } /** * @see org.eclipse.ui.console.AbstractConsole#init() */ protected void init() { consoles.put(job, this); super.init(); } /** * Retrieves the job currently monitored by the console * * @return a build job or null if none */ public BuildJob getJob() { return job; } /** * Shows a console for the given job. * * @param job a build that needs a console to be shown */ static public void show( BuildJob job ) { // Retrieves the active workbench window and console manager. IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager(); Console console = null; if( consoles.containsKey(job) ) { console = (Console) consoles.get(job); } else { console = new Console(job); consoleManager.addConsoles( new IConsole[] {console} ); } // anb0s: refresh the name console.setName(job.getName()); // Shows the console view. console.activate(); } /** * Removes the console for the given build job. * * @param job a build job */ public static void remove(BuildJob job) { if( consoles.containsKey(job) ) { Console console = (Console) consoles.get(job); ConsolePlugin.getDefault().getConsoleManager().removeConsoles( new IConsole[] {console} ); } } }