diff options
author | Uwe Stieber | 2012-12-16 09:12:04 +0000 |
---|---|---|
committer | Uwe Stieber | 2012-12-16 09:12:04 +0000 |
commit | b91689e18e03cf0a3e7cdd176e0eb1b40d41156c (patch) | |
tree | 8d9e05d288f5a9b9230cb5c77de25aadabb92b9c /target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator | |
parent | 2748f009f784d92372388259df87f7fda4aa7b94 (diff) | |
download | org.eclipse.tcf-b91689e18e03cf0a3e7cdd176e0eb1b40d41156c.tar.gz org.eclipse.tcf-b91689e18e03cf0a3e7cdd176e0eb1b40d41156c.tar.xz org.eclipse.tcf-b91689e18e03cf0a3e7cdd176e0eb1b40d41156c.zip |
Target Explorer: Allow participation at TCF communication channel shutdown for cleanup
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator')
-rw-r--r-- | target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator/UIPlugin.java | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator/UIPlugin.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator/UIPlugin.java index cfc336de7..f2cfe0f99 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator/UIPlugin.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator/UIPlugin.java @@ -11,6 +11,8 @@ package org.eclipse.tcf.te.tcf.ui.activator; import java.net.URL; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.ListenerList; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; @@ -32,6 +34,8 @@ public class UIPlugin extends AbstractUIPlugin { private static UIPlugin plugin; // The workbench listener instance private IWorkbenchListener listener; + // Reference to the workbench listener + /* default */ final ListenerList listeners = new ListenerList(); /** * Constructor. @@ -71,12 +75,31 @@ public class UIPlugin extends AbstractUIPlugin { @Override public boolean preShutdown(IWorkbench workbench, boolean forced) { - Tcf.getChannelManager().closeAll(); - return true; + boolean proceedShutdown = true; + + // If there are workbench listener registered here, than + // invoke them now before closing all the channels. + Object[] candidates = listeners.getListeners(); + for (Object listener : candidates) { + if (!(listener instanceof IWorkbenchListener)) continue; + proceedShutdown &= ((IWorkbenchListener)listener).preShutdown(workbench, forced); + if (!proceedShutdown && !forced) break; + } + + // Close all channels now + if (proceedShutdown || forced) Tcf.getChannelManager().closeAll(true); + + return proceedShutdown; } @Override public void postShutdown(IWorkbench workbench) { + // If there are workbench listener registered here, than invoke them now. + Object[] candidates = listeners.getListeners(); + for (Object listener : candidates) { + if (!(listener instanceof IWorkbenchListener)) continue; + ((IWorkbenchListener)listener).postShutdown(workbench); + } } }; PlatformUI.getWorkbench().addWorkbenchListener(listener); @@ -92,6 +115,30 @@ public class UIPlugin extends AbstractUIPlugin { super.stop(context); } + /** + * Adds the given workbench listener. + * <p> + * Has not effect if the same listener is already registered. + * + * @param listener The listener. Must not be <code>null</code>. + */ + public void addListener(IWorkbenchListener listener) { + Assert.isNotNull(listener); + listeners.add(listener); + } + + /** + * Removes the given workbench listener. + * <p> + * Has no effect if the same listener was not already registered. + * + * @param listener The listener. Must not be <code>null</code>. + */ + public void removeListener(IWorkbenchListener listener) { + Assert.isNotNull(listener); + listeners.remove(listener); + } + /* (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry) */ |