Author: simoneg
Date: Tue Oct  6 00:32:32 2009
New Revision: 822096

URL: http://svn.apache.org/viewvc?rev=822096&view=rev
Log:
LABS-442 : warn and eventually terminate a running magma:run when starting a 
new one.

Modified:
    
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/launch/MagmaLaunchShortcut.java

Modified: 
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/launch/MagmaLaunchShortcut.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/launch/MagmaLaunchShortcut.java?rev=822096&r1=822095&r2=822096&view=diff
==============================================================================
--- 
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/launch/MagmaLaunchShortcut.java
 (original)
+++ 
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/launch/MagmaLaunchShortcut.java
 Tue Oct  6 00:32:32 2009
@@ -15,6 +15,7 @@
 import org.eclipse.core.runtime.IExecutableExtension;
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
@@ -22,11 +23,12 @@
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.ILaunchShortcut2;
 import org.eclipse.debug.ui.RefreshTab;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
-import org.eclipse.wst.common.internal.emf.resource.RootTranslator;
 import org.maven.ide.eclipse.actions.MavenLaunchConstants;
 
 public class MagmaLaunchShortcut implements ILaunchShortcut2,
@@ -108,8 +110,42 @@
        }
 
        protected void launch(IProject prj, String mode) {
-               ILaunchConfiguration config = findLaunchConfiguration(prj,
-                               getConfigurationType());
+               ILaunchConfigurationType myconftype = getConfigurationType();
+
+               // Check for another already running magma:run
+               String mygoals = this.goalName == null ? "magma:run" : 
this.goalName;
+               if (mygoals.equals("magma:run")) {
+                       boolean killrunnings = false;
+                       ILaunch[] launches = 
DebugPlugin.getDefault().getLaunchManager().getLaunches();
+                       for (ILaunch launch : launches) {
+                               if (!launch.isTerminated()) {
+                                       ILaunchConfiguration conf = 
launch.getLaunchConfiguration();
+                                       if (conf != null) {
+                                               try {
+                                                       
ILaunchConfigurationType type = conf.getType();
+                                                       if (type != null && 
type.getIdentifier().equals(myconftype.getIdentifier())) {
+                                                               String goals = 
" " + conf.getAttribute(MavenLaunchConstants.ATTR_GOALS, "") + " ";
+                                                               if 
(goals.indexOf(" magma:run ") != -1) {
+                                                                       if 
(killrunnings ||
+                                                                               
        MessageDialog.openQuestion(
+                                                                               
                        Display.getCurrent().getActiveShell(), 
+                                                                               
                        "Magma:run already running", 
+                                                                               
                        "Magma is already running, and running two at the same 
time will probably cause port conflicts. Do you want to stop the currently 
running one?")) {
+                                                                               
killrunnings = true;
+                                                                               
launch.terminate();
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch (CoreException e) {
+                                                       MLog.exception(e, 
"While checking running configurations");
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+               
+               ILaunchConfiguration config = findLaunchConfiguration(prj, 
getConfigurationType());
                if (config == null) {
                        config = createConfiguration(prj);
                }
@@ -133,6 +169,7 @@
                        wc.setAttribute(MavenLaunchConstants.ATTR_GOALS, goals);
                        wc.setAttribute(RefreshTab.ATTR_REFRESH_SCOPE, 
"${project}");
                        wc.setAttribute(RefreshTab.ATTR_REFRESH_RECURSIVE, 
true);
+                       
                        config = wc.doSave();
                } catch (CoreException ce) {
                        MLog.exception(ce, "Error setting up new 
configuration");
@@ -150,24 +187,27 @@
                        candidateConfigs = new ArrayList(configs.length);
                        String mygoals = this.goalName == null ? "magma:run" : 
this.goalName;
                        for (int i = 0; i < configs.length; i++) {
-                               ILaunchConfiguration config = configs[i];
-                               String pomDir = config.getAttribute(
-                                               
MavenLaunchConstants.ATTR_POM_DIR, "");
-                               String goals = " " + config.getAttribute(
-                                               
MavenLaunchConstants.ATTR_GOALS, "") + " ";
-                               pomDir = VariablesPlugin.getDefault()
-                                               
.getStringVariableManager().performStringSubstitution(
-                                                               pomDir);
-                               File accpd = new File(pomDir);
-                               if (accpd.equals(root)) {
-                                       if (mygoals == null || goals.indexOf(" 
" + mygoals + " ") > -1) {
-                                               candidateConfigs.add(config);
+                               try {
+                                       ILaunchConfiguration config = 
configs[i];
+                                       String pomDir = config.getAttribute(
+                                                       
MavenLaunchConstants.ATTR_POM_DIR, "");
+                                       String goals = " " + 
config.getAttribute(
+                                                       
MavenLaunchConstants.ATTR_GOALS, "") + " ";
+                                       pomDir = VariablesPlugin.getDefault()
+                                                       
.getStringVariableManager().performStringSubstitution(pomDir);
+                                       File accpd = new File(pomDir);
+                                       if (accpd.equals(root)) {
+                                               if (mygoals == null || 
goals.indexOf(" " + mygoals + " ") > -1) {
+                                                       
candidateConfigs.add(config);
+                                               }
                                        }
-                               }
+                               } catch (CoreException e) {
+                                       MLog.exception(e, "Parsing a 
configuration");
+                               }                               
                        }
                } catch (CoreException e) {
                        MLog.exception(e, "Finding candidate configurations");
-               }
+               }                       
                int candidateCount = candidateConfigs.size();
                if (candidateCount >= 1) {
                        return (ILaunchConfiguration) candidateConfigs.get(0);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to