/******************************************************************************* * Copyright (c) 2013 Cloud Bees, Inc. * All rights reserved. * This program is 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: * Cloud Bees, Inc. - initial API and implementation *******************************************************************************/ package com.cloudbees.eclipse.dev.ui.views.jobs; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleListener; import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.MessageConsole; public class JobConsoleManager { private final Map<String, JobConsole> consoles = new HashMap<String, JobConsole>(); private final IConsoleManager consoleManager; private final IConsoleListener listener = new IConsoleListener() { public void consolesAdded(final IConsole[] consoles) { // ignore } public void consolesRemoved(final IConsole[] consoles) { for (IConsole console : consoles) { remove(console); } } }; public JobConsoleManager() { this.consoleManager = ConsolePlugin.getDefault().getConsoleManager(); this.consoleManager.addConsoleListener(this.listener); } public void unregister() { this.consoleManager.removeConsoleListener(this.listener); } protected void remove(final IConsole console) { if (JobConsole.CONSOLE_TYPE.equals(console.getType())) { Object url = ((MessageConsole) console).getAttribute(JobConsole.ATTRIBUTE_URL); if (url instanceof String) { JobConsole jobConsole = this.consoles.get(url); if (jobConsole != null) { jobConsole.dispose(); this.consoles.remove(url); } } } } public JobConsole showConsole(final String name, final String url) { Assert.isNotNull(name); Assert.isNotNull(url); JobConsole console = this.consoles.get(url); if (console == null) { console = new JobConsole(this.consoleManager, name, url); this.consoles.put(url, console); } console.show(); return console; } }