Index: editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/ManageLaunchesDialog.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/ManageLaunchesDialog.java (revision 5323) |
+++ editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/ManageLaunchesDialog.java (working copy) |
@@ -23,6 +23,8 @@ |
import org.eclipse.core.resources.IResource; |
import org.eclipse.core.resources.ResourcesPlugin; |
import org.eclipse.core.runtime.CoreException; |
+import org.eclipse.core.runtime.IStatus; |
+import org.eclipse.core.runtime.Status; |
import org.eclipse.debug.core.DebugPlugin; |
import org.eclipse.debug.core.ILaunchConfiguration; |
import org.eclipse.debug.core.ILaunchConfigurationListener; |
@@ -90,6 +92,8 @@ |
private IAction createAction; |
private IAction deleteAction; |
+ private ILaunchConfiguration launchConfig; |
+ |
public ManageLaunchesDialog(IWorkbenchWindow window) { |
super(window.getShell()); |
@@ -98,6 +102,29 @@ |
setShellStyle(getShellStyle() | SWT.RESIZE); |
} |
+ public boolean canLaunch() { |
+ |
+ if (workingCopy == null) { |
+ return false; |
+ } |
+ try { |
+ verifyName(); |
+ } catch (CoreException e) { |
+ return false; |
+ } |
+ |
+ ILaunchConfigurationTab[] tabs = getTabs(); |
+ if (tabs == null) { |
+ return false; |
+ } |
+ for (int i = 0; i < tabs.length; i++) { |
+ if (!tabs[i].isValid(workingCopy)) { |
+ return false; |
+ } |
+ } |
+ return true; |
+ } |
+ |
@Override |
public String generateName(String name) { |
if (name == null) { |
@@ -220,7 +247,7 @@ |
if (getButton(IDialogConstants.OK_ID) != null) { |
// Run button |
getButton(IDialogConstants.OK_ID).setEnabled( |
- activeTab != null && activeTab.getErrorMessage() == null); |
+ activeTab != null && activeTab.getErrorMessage() == null && canLaunch()); |
// Delete action |
getDeleteAction().setEnabled(selectedConfig != null); |
@@ -229,6 +256,14 @@ |
@Override |
public void updateMessage() { |
+ |
+ try { |
+ verifyName(); |
+ } catch (CoreException ce) { |
+ setErrorMessage(ce.getStatus().getMessage()); |
+ return; |
+ } |
+ |
if (activeTab != null) { |
String errorMessage = activeTab.getErrorMessage(); |
@@ -475,6 +510,10 @@ |
launchesViewer.refresh(); |
} |
+// private boolean isDirty() { |
+// return workingCopy == null ? false : workingCopy.isDirty(); |
+// } |
+ |
private void saveConfig() { |
if (currentTabGroup != null) { |
currentTabGroup.performApply(workingCopy); |
@@ -491,10 +530,6 @@ |
updateMessage(); |
} |
-// private boolean isDirty() { |
-// return workingCopy == null ? false : workingCopy.isDirty(); |
-// } |
- |
private void selectFirstLaunchConfig() { |
final ILaunchConfiguration launchConfig = (ILaunchConfiguration) launchesViewer.getElementAt(0); |
@@ -524,7 +559,8 @@ |
private void show(ILaunchConfiguration config) { |
try { |
- workingCopy = config.getWorkingCopy(); |
+ launchConfig = config; |
+ workingCopy = launchConfig.getWorkingCopy(); |
configNameText.setText(workingCopy.getName()); |
currentTabGroup = LaunchConfigurationPresentationManager.getDefault().getTabGroup( |
@@ -544,4 +580,34 @@ |
} |
} |
+ /** |
+ * Verify that the launch configuration name is valid. |
+ */ |
+ private void verifyName() throws CoreException { |
+ if (configNameText.isVisible()) { |
+ ILaunchManager mgr = getLaunchManager(); |
+ String currentName = configNameText.getText().trim(); |
+ |
+ // If there is no name, complain |
+ if (currentName.length() < 1) { |
+ throw new CoreException(new Status(IStatus.ERROR, DartDebugUIPlugin.PLUGIN_ID, 0, |
+ Messages.ManageLaunchesDialog_Name_required_for_launch_configuration, null)); |
+ } |
+ try { |
+ mgr.isValidLaunchConfigurationName(currentName); |
+ } catch (IllegalArgumentException iae) { |
+ throw new CoreException(new Status(IStatus.ERROR, DartDebugUIPlugin.PLUGIN_ID, 0, |
+ iae.getMessage(), null)); |
+ } |
+ // Otherwise, if there's already a config with the same name, complain |
+ if (!launchConfig.getName().equals(currentName)) { |
+ if (mgr.isExistingLaunchConfigurationName(currentName)) { |
+ throw new CoreException(new Status(IStatus.ERROR, DartDebugUIPlugin.PLUGIN_ID, 0, |
+ Messages.ManageLaunchesDialog_Launch_configuration_already_exists_with_this_name, |
+ null)); |
+ } |
+ } |
+ } |
+ } |
+ |
} |