Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Stieber2012-12-16 09:12:04 +0000
committerUwe Stieber2012-12-16 09:12:04 +0000
commitb91689e18e03cf0a3e7cdd176e0eb1b40d41156c (patch)
tree8d9e05d288f5a9b9230cb5c77de25aadabb92b9c /target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/activator
parent2748f009f784d92372388259df87f7fda4aa7b94 (diff)
downloadorg.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.java51
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)
*/

Back to the top