diff options
author | Dejan Glozic | 2002-12-17 03:29:57 +0000 |
---|---|---|
committer | Dejan Glozic | 2002-12-17 03:29:57 +0000 |
commit | c99c35f374e516c7f428c9628ade936a6d90676a (patch) | |
tree | 5e8533e5e110e727538b7a3291fa158949af4989 | |
parent | 4dbe19d0d0d883ba04f116aa667140b7a634bb7c (diff) | |
download | eclipse.pde.ui-20021217.tar.gz eclipse.pde.ui-20021217.tar.xz eclipse.pde.ui-20021217.zip |
*** empty log message ***v20021217
4 files changed, 128 insertions, 100 deletions
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java index f4fe1a1818..32e7f7a880 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java @@ -21,6 +21,7 @@ import org.eclipse.pde.internal.ui.editor.feature.FeatureAdapterFactory; import org.eclipse.pde.internal.ui.editor.manifest.PluginAdapterFactory; import org.eclipse.pde.internal.ui.editor.schema.SchemaAdapterFactory; import org.eclipse.pde.internal.ui.editor.text.ColorManager; +import org.eclipse.pde.internal.ui.launcher.LaunchListener; import org.eclipse.pde.internal.ui.util.SWTUtil; import org.eclipse.pde.internal.ui.view.PluginsViewAdapterFactory; import org.eclipse.swt.widgets.*; @@ -36,6 +37,8 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants { private ResourceBundle resourceBundle; // Shared label labelProvider private PDELabelProvider labelProvider; + // Launches listener + private LaunchListener launchListener; private java.util.Hashtable counters; @@ -173,6 +176,8 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants { } public void shutdown() throws CoreException { + if (launchListener!=null) + launchListener.shutdown(); super.shutdown(); } @@ -193,6 +198,12 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants { return labelProvider; } + public LaunchListener getLaunchesListener() { + if (launchListener == null) + launchListener = new LaunchListener(); + return launchListener; + } + protected void initializeDefaultPreferences(IPreferenceStore store) { ColorManager.initializeDefaults(store); } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java new file mode 100644 index 0000000000..c3a728b104 --- /dev/null +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java @@ -0,0 +1,116 @@ +package org.eclipse.pde.internal.ui.launcher; + +import java.util.ArrayList; + +import org.eclipse.core.runtime.*; +import org.eclipse.debug.core.*; +import org.eclipse.debug.core.model.IProcess; +import org.eclipse.pde.internal.ui.PDEPlugin; + +/** + * @author dejan + * + * To change this generated comment edit the template variable "typecomment": + * Window>Preferences>Java>Templates. + * To enable and disable the creation of type comments go to + * Window>Preferences>Java>Code Generation. + */ +public class LaunchListener + implements ILaunchListener, IDebugEventSetListener { + private ArrayList managedLaunches; + + public LaunchListener() { + managedLaunches = new ArrayList(); + } + + public void manage(ILaunch launch) { + if (managedLaunches.size() == 0) + hookListener(true); + + if (!managedLaunches.contains(launch)) + managedLaunches.add(launch); + } + + /** + * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch) + */ + public void launchRemoved(ILaunch launch) { + update(launch, true); + } + + /** + * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch) + */ + public void launchAdded(ILaunch launch) { + } + + /** + * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch) + */ + public void launchChanged(ILaunch launch) { + } + + private void update(ILaunch launch, boolean remove) { + if (managedLaunches.contains(launch)) { + if (remove || launch.isTerminated()) { + managedLaunches.remove(launch); + if (managedLaunches.size() == 0) { + hookListener(false); + } + } + } + } + + private void hookListener(boolean add) { + DebugPlugin debugPlugin = DebugPlugin.getDefault(); + ILaunchManager launchManager = debugPlugin.getLaunchManager(); + if (add) { + launchManager.addLaunchListener(this); + debugPlugin.addDebugEventListener(this); + } else { + launchManager.removeLaunchListener(this); + debugPlugin.removeDebugEventListener(this); + } + } + + private void doRestart(ILaunch launch) { + ILaunchConfiguration config = launch.getLaunchConfiguration(); + try { + config.launch(launch.getLaunchMode(), new NullProgressMonitor()); + } catch (CoreException e) { + PDEPlugin.logException(e); + } + } + + public void shutdown() { + hookListener(false); + } + /** + * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent) + */ + public void handleDebugEvents(DebugEvent[] events) { + for (int i = 0; i < events.length; i++) { + DebugEvent event = events[i]; + Object source = event.getSource(); + if (source instanceof IProcess + && event.getKind() == DebugEvent.TERMINATE) { + IProcess process = (IProcess) source; + ILaunch launch = process.getLaunch(); + if (launch != null) { + try { + launchTerminated(launch, process.getExitValue()); + } catch (DebugException e) { + } + } + } + } + } + + private void launchTerminated(ILaunch launch, int returnValue) { + if (managedLaunches.contains(launch)) { + update(launch, true); + if (returnValue == 23) + doRestart(launch); + } + } +} diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java deleted file mode 100644 index a38b117cfa..0000000000 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.eclipse.pde.internal.ui.launcher; - -import java.util.ArrayList; - -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.ILaunchesListener; -import org.eclipse.debug.core.model.IProcess; - -/** - * @author dejan - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. - */ -public class LaunchesListener implements ILaunchesListener { - private ArrayList managedLaunches; - - public LaunchesListener() { - managedLaunches = new ArrayList(); - } - - public void manage(ILaunch launch) { - //if (managedLaunches) - } - - /** - * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch) - */ - public void launchesRemoved(ILaunch[] launches) { - update(launches); - } - - /** - * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch) - */ - public void launchesAdded(ILaunch[] launches) { - } - - /** - * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch) - */ - public void launchesChanged(ILaunch[] launches) { - checkForRestart(launches); - update(launches); - } - - private void update(ILaunch[] launches) { - for (int i = 0; i < launches.length; i++) { - ILaunch launch = launches[i]; - if (managedLaunches.contains(launch)) { - if (launch.isTerminated()) { - managedLaunches.remove(launch); - } - } - } - if (managedLaunches.size() == 0) { - hookListener(false); - } - } - - private void hookListener(boolean add) { - ILaunchManager launchManager = - DebugPlugin.getDefault().getLaunchManager(); - if (add) - launchManager.addLaunchListener(this); - else - launchManager.removeLaunchListener(this); - } - - private void checkForRestart(ILaunch[] launches) { - for (int i = 0; i < launches.length; i++) { - ILaunch launch = launches[i]; - checkForRestart(launch); - } - } - - private void checkForRestart(ILaunch launch) { - if (launch.isTerminated()) { - IProcess[] processes = launch.getProcesses(); - for (int i = 0; i < processes.length; i++) { - IProcess process = processes[i]; - try { - if (process.getExitValue() == 23) { - doRestart(launch); - return; - } - } catch (DebugException e) { - } - } - } - } - - private void doRestart(ILaunch launch) { - } -} diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java index fe6aef7286..9574d98380 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java @@ -423,6 +423,7 @@ public class WorkbenchLaunchConfigurationDelegate if (monitor.isCanceled()) { return false; } + PDEPlugin.getDefault().getLaunchesListener().manage(launch); runner.run(runnerConfig, launch, monitor); monitor.worked(1); ISourceLocator sourceLocator = constructSourceLocator(plugins); |