[368778] Empty Servers View Default Message (Patch included)
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html b/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
index b11e999..0cdf9af 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
+++ b/features/org.eclipse.wst.server_ui.feature.patch/buildnotes_org.eclipse.wst.server_ui.feature.patch.html
@@ -4,17 +4,16 @@
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta name="Build" content="Build">
-   <title>WTP 3.2.2 Patches</title>
+   <title>WTP 3.2.5 Patches</title>
 </head>
 
 <body>
 
-<h1>WTP 3.2.2 Patches</h1>
+<h1>WTP 3.2.5 Patches</h1>
 
 <h2>Feature Patched: org.eclipse.wst.server_ui.feature</h2>
 <h3>Plugin(s) replaced:</h3>
 <ul><li>org.eclipse.wst.server.ui</li></ul>
-<p>Bug <a href='https://bugs.eclipse.org/326318'>326318</a>. Sever never shows publishing state and in sync state prematurely</p>
-<p>Bug <a href='https://bugs.eclipse.org/327247'>327247</a>. Deadlock during debugging</p>
+<p>Bug <a href='https://bugs.eclipse.org/368778'>368778</a>. Empty Servers View Default Message (Patch included)</p>
 
 </body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/feature.properties b/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
index 00695d2..c58d1b0 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_ui.feature.patch/feature.properties
@@ -27,8 +27,7 @@
 description=\
 Contains fixes described in the following bugzilla(s):\n\
 \n\
-Bug https://bugs.eclipse.org/326318 Sever never shows publishing state and in sync state prematurely\n\
-Bug https://bugs.eclipse.org/327247 Deadlock during debugging\n\
+Bug https://bugs.eclipse.org/368778 Empty Servers View Default Message (Patch included)\n\
 \n\
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
diff --git a/features/org.eclipse.wst.server_ui.feature.patch/feature.xml b/features/org.eclipse.wst.server_ui.feature.patch/feature.xml
index 948172a..75c07a4 100644
--- a/features/org.eclipse.wst.server_ui.feature.patch/feature.xml
+++ b/features/org.eclipse.wst.server_ui.feature.patch/feature.xml
@@ -1,18 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.eclipse.wst.server_ui.feature.patch"
-    label="%featureName"
-    version="3.2.2.qualifier"
-    provider-name="%providerName">
+      label="%featureName"
+      version="3.2.5.qualifier"
+      provider-name="%providerName">
 
-    <description>%description</description>
+   <description>
+      %description
+   </description>
 
-    <copyright>%copyright</copyright>
+   <copyright>
+      %copyright
+   </copyright>
 
-    <license url="%licenseURL">%license</license>
+   <license url="%licenseURL">
+      %license
+   </license>
 
    <requires>
-      <import feature="org.eclipse.wst.server_ui.feature" version="3.2.2.v20100908-7B4FBrAtJb1nESKmCJHPGQ347" patch="true"/>
+      <import feature="org.eclipse.wst.server_ui.feature" version="3.2.5.v20110706-7B4FDjAtJcbvFLNiPIYMRMjBF56" patch="true"/>
    </requires>
 
    <plugin
diff --git a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
index 64f94fd..119ee0f 100644
--- a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.ui; singleton:=true
-Bundle-Version: 1.1.209.qualifier
+Bundle-Version: 1.1.210.qualifier
 Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
index 2665029..f29fe0f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
@@ -363,6 +363,8 @@
 
 	public static String internalWebBrowserName;
 
+	public static String ServersView2_noServers;
+
 	static {
 		NLS.initializeMessages(ServerUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index fae6d5e..d4148fe 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -510,3 +510,4 @@
 errorStartingMonitor=Could not start the server monitor: {0}
 
 internalWebBrowserName=Internal Web Browser
+ServersView2_noServers=No servers available. Define a new server from the <a>new server wizard</a>...
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
index f563b65..9d3460f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
@@ -20,12 +20,21 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.contexts.IContextService;
+import org.eclipse.ui.forms.widgets.Form;
+import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.navigator.CommonNavigator;
 import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.part.PageBook;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.Server;
 import org.eclipse.wst.server.core.internal.UpdateServerJob;
@@ -33,6 +42,7 @@
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerToolTip;
 import org.eclipse.wst.server.ui.internal.Trace;
+import org.eclipse.wst.server.ui.internal.wizard.NewServerWizard;
 /**
  * A view of servers, their modules, and status.
  */
@@ -40,6 +50,9 @@
 	private static final String SERVERS_VIEW_CONTEXT = "org.eclipse.ui.serverViewScope";
 	
 	protected CommonViewer tableViewer;
+	private Control mainPage;
+	private Control noServersPage;
+	PageBook book;
 	
 	protected IServerLifecycleListener serverResourceListener;
 	protected IPublishListener publishListener;
@@ -60,14 +73,63 @@
 
 	@Override
 	public void createPartControl(Composite parent) {
-		super.createPartControl(parent);
+		// Add PageBook as parent composite
+		FormToolkit toolkit = new FormToolkit(parent.getDisplay());
+		book = new PageBook(parent, SWT.NONE);
+		super.createPartControl(book);
+		// Main page for the Servers tableViewer
+		mainPage = getCommonViewer().getControl();
+		// Page prompting to define a new server
+		noServersPage = createDefaultPage(toolkit); 
+		book.showPage(mainPage);
 
 		IContextService contextSupport = (IContextService)getSite().getService(IContextService.class);
 		contextSupport.activateContext(SERVERS_VIEW_CONTEXT);
-
 		deferInitialization();
 	}
 
+	/**
+	 * Creates a page displayed when there are no servers defined.
+	 * 
+	 * @param kit
+	 * @return Control
+	 */
+	private Control createDefaultPage(FormToolkit kit){
+		Form form = kit.createForm(book);
+		Composite body = form.getBody();
+    GridLayout layout = new GridLayout(2, false);
+    body.setLayout(layout);
+    
+		Link hlink = new Link(body, SWT.NONE);
+		hlink.setText(Messages.ServersView2_noServers); 
+		hlink.setBackground(book.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		GridData gd = new GridData(SWT.LEFT, SWT.FILL, true, false);
+		hlink.setLayoutData(gd);
+		hlink.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				NewServerWizard wizard = new NewServerWizard();
+				WizardDialog wd = new WizardDialog(book.getShell(), wizard);
+				if( wd.open() == Window.OK){
+					toggleDefultPage();
+				}
+			}
+		});
+		
+		return form;
+	}
+	
+	/**
+	 * Switch between the servers and default/empty page. 
+	 * 
+	 */
+	void toggleDefultPage(){
+		if(tableViewer.getTree().getItemCount() < 1){
+			book.showPage(noServersPage);
+		} else{
+			book.showPage(mainPage);
+		}
+	}
+
 	private void deferInitialization() {
 		// TODO Angel Says: Need to do a final check on this line below. I don't think there is anything else
 		// that we need from to port from the old Servers View
@@ -121,6 +183,8 @@
 						if (tableViewer.getTree().getItemCount() > 0) {
 							Object obj = tableViewer.getTree().getItem(0).getData();
 							tableViewer.setSelection(new StructuredSelection(obj));
+						} else{
+							toggleDefultPage();
 						}
 					}
 				});
@@ -267,6 +331,7 @@
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				tableViewer.add(tableViewer.getInput(), server);
+				toggleDefultPage();
 			}
 		});
 	}
@@ -275,6 +340,7 @@
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				tableViewer.remove(server);
+				toggleDefultPage();
 			}
 		});
 	}