Bug 514355 - Offer "Retry" button in "Workspace unavailable" dialog

Added "Retry" button to retry loading a "Worksace unavailable"

Change-Id: I43e1a820a7a45be6e852bd040501d447c8233cce
Signed-off-by: Patrik Suzzi <psuzzi@gmail.com>
diff --git a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
index 3f162cf..e73976c 100644
--- a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
+++ b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
@@ -11,6 +11,7 @@
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 422954
  *     Christian Georgi (SAP) - Bug 423882 - Warn user if workspace is newer than IDE
  *     Andrey Loskutov <loskutov@gmx.de> - Bug 427393, 455162
+ *     Patrik Suzzi <psuzzi@gmail.com> - Bug 514355
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.application;
 
@@ -83,6 +84,11 @@
 
     private static final String PROP_EXIT_CODE = "eclipse.exitcode"; //$NON-NLS-1$
 
+	/**
+	 * Return value when the user wants to retry loading the current workspace
+	 */
+    private static final int RETRY_LOAD = 0;
+
     /**
      * A special return code that will be recognized by the launcher and used to
      * restart the workbench.
@@ -264,8 +270,13 @@
 				shell.setVisible(false);
 			}
 		}
+
+		int returnValue = -1;
+		URL workspaceUrl = null;
         while (true) {
-            URL workspaceUrl = promptForWorkspace(shell, launchData, force);
+			if (returnValue != RETRY_LOAD) {
+				workspaceUrl = promptForWorkspace(shell, launchData, force);
+			}
             if (workspaceUrl == null) {
 				return EXIT_OK;
 			}
@@ -306,8 +317,12 @@
 
             // by this point it has been determined that the workspace is
             // already in use -- force the user to choose again
-            MessageDialog.openError(shell, IDEWorkbenchMessages.IDEApplication_workspaceInUseTitle,
-                    NLS.bind(IDEWorkbenchMessages.IDEApplication_workspaceInUseMessage, workspaceUrl.getFile()));
+			MessageDialog dialog = new MessageDialog(shell, IDEWorkbenchMessages.IDEApplication_workspaceInUseTitle,
+					null, NLS.bind(IDEWorkbenchMessages.IDEApplication_workspaceInUseMessage, workspaceUrl.getFile()),
+					MessageDialog.ERROR, 1, IDEWorkbenchMessages.IDEApplication_workspaceInUse_Retry,
+					IDEWorkbenchMessages.IDEApplication_workspaceInUse_Ok);
+			// the return value influences the next loop's iteration
+			returnValue = dialog.open();
         }
     }
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
index bc327df..cd7a5b0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
@@ -18,7 +18,7 @@
  * Lars Vogel <Lars.Vogel@vogella.com> - Bug 431862
  * Christian Georgi (SAP SE)           - bug 432480, bug 458811
  * Jan-Ove Weichel <janove.weichel@vogella.com> - Bug 411578
- * Patrik Suzzi <psuzzi@gmail.com> - Bug 485201, 502050
+ * Patrik Suzzi <psuzzi@gmail.com> - Bug 485201, 502050, 514355
  * Simon Scholz <simon.scholz@vogella.com> - Bug 486777
  *******************************************************************************/
 package org.eclipse.ui.internal.ide;
@@ -972,6 +972,8 @@
 	public static String IDEApplication_workspaceMandatoryMessage;
 	public static String IDEApplication_workspaceInUseTitle;
 	public static String IDEApplication_workspaceInUseMessage;
+	public static String IDEApplication_workspaceInUse_Ok;
+	public static String IDEApplication_workspaceInUse_Retry;
 	public static String IDEApplication_workspaceEmptyTitle;
 	public static String IDEApplication_workspaceEmptyMessage;
 	public static String IDEApplication_workspaceInvalidTitle;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties
index b0277f0..ced1603 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties
@@ -25,7 +25,7 @@
 #        - Bug 90292: Customizable strategy for unassociated files
 #     Robert Roth <robert.roth.off@gmail.com> - bug 310483, duplicate mnemonic
 #     Jan-Ove Weichel <janove.weichel@vogella.com> - Bug 411578
-#     Patrik Suzzi <psuzzi@gmail.com> - Bug 485201
+#     Patrik Suzzi <psuzzi@gmail.com> - Bug 485201, 514355
 #     Simon Scholz <simon.scholz@vogella.com> - Bug 486777
 #     Lars Vogel <Lars.Vogel@vogella.com> - Bug 431862
 #     Axel Richard <axel.richard@obeo.fr> - Bug 486644
@@ -996,6 +996,8 @@
 IDEApplication_workspaceMandatoryMessage=IDEs need a valid workspace. Restart without the @none option.
 IDEApplication_workspaceInUseTitle=Workspace Unavailable
 IDEApplication_workspaceInUseMessage=The default workspace ''{0}'' is in use or cannot be created. Please choose a different one.
+IDEApplication_workspaceInUse_Ok=Ok
+IDEApplication_workspaceInUse_Retry=Retry
 IDEApplication_workspaceEmptyTitle=Workspace Required
 IDEApplication_workspaceEmptyMessage=Workspace field must not be empty; enter a path to continue.
 IDEApplication_workspaceInvalidTitle=Invalid Workspace