[371828] IllegalArgumentException when trying to delete a Server from server definitions
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/GlobalDeleteAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/GlobalDeleteAction.java
index 902ff95..8317184 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/GlobalDeleteAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/GlobalDeleteAction.java
@@ -28,6 +28,7 @@
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.ui.internal.DeleteServerDialog;
 import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.Trace;
 /**
  * This global delete action handles both the server and module deletion.
  */
@@ -174,6 +175,32 @@
 	}
 	
 	protected void deleteServer(IServer server){
+		// It is possible that the server is created and added to the server view on workbench
+		// startup. As a result, when the user switches to the server view, the server is 
+		// selected, but the selectionChanged event is not called, which results in servers
+		// being null. When servers is null the server will not be deleted and the error log
+		// will have an IllegalArgumentException.
+		//
+		// To handle the case where servers is null, the selectionChanged method is called
+		// to ensure servers will be populated.
+		if (servers == null){
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Delete server called when servers is null");
+			}				
+			
+			IStructuredSelection sel = getStructuredSelection();
+			if (sel != null){
+				selectionChanged(sel);
+			}
+		}
+				
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Opening delete server dialog with parameters shell="
+					+ shell + " servers=" + servers + " configs=" + configs);
+		}		
+		
+		// No check is made for valid parameters at this point, since if there is a failure, it
+		// should be output to the error log instead of failing silently.
 		DeleteServerDialog dsd = new DeleteServerDialog(shell, servers, configs);
 		dsd.open();
 	}