Fixes 472132 - TimeoutException in AbstractJmxServerCommand.execute (89) during redeployment
Signed-off-by: GianMaria Romanato <gm.romanato@gmail.com>
diff --git a/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/DefaultServerDeployer.java b/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/DefaultServerDeployer.java
index ad6e43d..b914f48 100644
--- a/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/DefaultServerDeployer.java
+++ b/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/DefaultServerDeployer.java
@@ -21,6 +21,7 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.ui.statushandlers.StatusManager;
 import org.eclipse.virgo.ide.facet.core.FacetCorePlugin;
 import org.eclipse.virgo.ide.facet.core.FacetUtils;
 import org.eclipse.virgo.ide.manifest.core.BundleManifestCorePlugin;
@@ -248,7 +249,7 @@
 		} catch (IOException e) {
 			StatusUtil.error("Failed execution of deployer command " + serverCommand, e);
 		} catch (TimeoutException e) {
-			StatusUtil.error("Failed execution of deployer command " + serverCommand, e);
+			StatusUtil.error("Failed execution of deployer command " + serverCommand, e, StatusManager.SHOW);
 		}
 		return null;
 	}
diff --git a/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/utils/StatusUtil.java b/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/utils/StatusUtil.java
index 376328e..a91d060 100644
--- a/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/utils/StatusUtil.java
+++ b/org.eclipse.virgo.ide.runtime.core/src/org/eclipse/virgo/ide/runtime/internal/core/utils/StatusUtil.java
@@ -24,10 +24,20 @@
  */
 public class StatusUtil {
 	public static void error(String message, Exception e) {
-		StatusManager.getManager().handle(	new Status(IStatus.ERROR, ServerCorePlugin.PLUGIN_ID,
-												"An IO Exception occurred.", e));
+		error(message, e, StatusManager.LOG);
 	}
-
+	/**
+	 * @param message
+	 *            the message to be reported
+	 * @param e
+	 *            the cause
+	 * @param style
+	 *            a bitmask of style bits as enumerated on {@link StatusManager}
+	 */
+	public static void error(String message, Exception e, int style) {
+		StatusManager.getManager().handle(
+				new Status(IStatus.ERROR, ServerCorePlugin.PLUGIN_ID, "An IO Exception occurred.", e), style);
+	}
 	public static void error(Exception e) {
 		if (e instanceof IOException) {
 			error("An IO Exception occurred.", e);
diff --git a/org.eclipse.virgo.ide.runtime.ui/src/org/eclipse/virgo/ide/runtime/internal/ui/editor/ServerDeployEditorSection.java b/org.eclipse.virgo.ide.runtime.ui/src/org/eclipse/virgo/ide/runtime/internal/ui/editor/ServerDeployEditorSection.java
index ae77534..e77cc9e 100644
--- a/org.eclipse.virgo.ide.runtime.ui/src/org/eclipse/virgo/ide/runtime/internal/ui/editor/ServerDeployEditorSection.java
+++ b/org.eclipse.virgo.ide.runtime.ui/src/org/eclipse/virgo/ide/runtime/internal/ui/editor/ServerDeployEditorSection.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -115,11 +116,13 @@
 				if (updating) {
 					return;
 				}
+				getManagedForm().getMessageManager().removeMessages(port);
 				int newPort = -1;
 				try {
 					newPort = Integer.valueOf(port.getText());
 				} catch (NumberFormatException nfe) {
-					setErrorMessage(port.getText() + " is not a valid port number");
+					getManagedForm().getMessageManager().addMessage("MALFORMED-PORT", "Port must be a positive number",
+							null, IMessageProvider.ERROR, port);
 					return;
 				}
 				setErrorMessage(null);
@@ -138,14 +141,20 @@
 				if (updating) {
 					return;
 				}
-				int newTimeout = -1;
+				getManagedForm().getMessageManager().removeMessages(timeout);
+				Integer newTimeout = null;
 				try {
 					newTimeout = Integer.valueOf(timeout.getText());
 				} catch (NumberFormatException nfe) {
-					setErrorMessage(timeout.getText() + " is not a valid timeout");
+					getManagedForm().getMessageManager().addMessage("MALFORMED-TIMEOUT",
+							"Timeout must be a positive number", null, IMessageProvider.ERROR, timeout);
 					return;
 				}
-				setErrorMessage(null);
+				if (newTimeout < 5) {
+					getManagedForm().getMessageManager().addMessage("INVALID-TIMEOUT", "Timeout cannot be less than 5",
+							null, IMessageProvider.ERROR, timeout);
+					return;
+				}
 				updating = true;
 				execute(new ModifyDeployerTimeoutCommand(serverWorkingCopy, newTimeout));
 				updating = false;
@@ -217,6 +226,8 @@
 
 	@Override
 	public IStatus[] getSaveStatus() {
+		// this errors should never happen as the port and timeout controls now prevent the user
+		// from entering invalid values.
 		try {
 			Integer.valueOf(port.getText());
 		} catch (NumberFormatException nfe) {