[572558] Servers view: Add a way to sort servers
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 653091b..fe45ea4 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.5.600.qualifier
+Bundle-Version: 1.5.700.qualifier
 Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -24,11 +24,11 @@
  org.eclipse.wst.server.ui.internal.wizard.page;x-internal:=true,
  org.eclipse.wst.server.ui.wizard
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.14.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.server.discovery;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.18.0,4.0.0)",
  org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.workbench.texteditor;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.browser;bundle-version="[3.2.0,4.0.0)",
@@ -39,6 +39,6 @@
  org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,2.0.0)",
  org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)";resolution:=optional,
- org.eclipse.ui.navigator;bundle-version="[3.3.100,4.0.0)"
+ org.eclipse.ui.navigator;bundle-version="[3.10.0,4.0.0)"
 Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.wst.server.ui.internal.webbrowser"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.wst.server.ui/pom.xml b/plugins/org.eclipse.wst.server.ui/pom.xml
index b1ee7c9..b4b2c23 100644
--- a/plugins/org.eclipse.wst.server.ui/pom.xml
+++ b/plugins/org.eclipse.wst.server.ui/pom.xml
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.wst.server.ui</artifactId>
-  <version>1.5.600-SNAPSHOT</version>
+  <version>1.5.700-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
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 afdfbfd..7cef83e 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008,2012 IBM Corporation and others.
+ * Copyright (c) 2008, 2021 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,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.viewers.DefaultViewerSorter;
 import org.eclipse.wst.server.ui.internal.wizard.NewServerWizard;
 /**
  * A view of servers, their modules, and status.
@@ -85,6 +86,7 @@
 		super.createPartControl(book);
 		// Main page for the Servers tableViewer
 		mainPage = getCommonViewer().getControl();
+		getCommonViewer().setSorter(new DefaultViewerSorter());
 		// Page prompting to define a new server
 		noServersPage = createDefaultPage(toolkit); 
 		book.showPage(mainPage);
@@ -103,9 +105,9 @@
 	private Control createDefaultPage(FormToolkit kit){
 		Form form = kit.createForm(book);
 		Composite body = form.getBody();
-    GridLayout layout = new GridLayout(2, false);
-    body.setLayout(layout);
-    
+		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));
@@ -116,7 +118,7 @@
 				NewServerWizard wizard = new NewServerWizard();
 				WizardDialog wd = new WizardDialog(book.getShell(), wizard);
 				if( wd.open() == Window.OK){
-					toggleDefultPage();
+					toggleDefaultPage();
 				}
 			}
 		});
@@ -170,7 +172,7 @@
 	 * Switch between the servers and default/empty page. 
 	 * 
 	 */
-	void toggleDefultPage(){
+	void toggleDefaultPage(){
 		if(tableViewer.getTree().getItemCount() < 1){
 			book.showPage(noServersPage);
 		} else{
@@ -233,7 +235,7 @@
 								Object obj = tableViewer.getTree().getItem(0).getData();
 								tableViewer.setSelection(new StructuredSelection(obj));
 							} else{
-								toggleDefultPage();
+								toggleDefaultPage();
 							}
 						}
 						catch (Exception e){
@@ -386,7 +388,7 @@
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				tableViewer.add(tableViewer.getInput(), server);
-				toggleDefultPage();
+				toggleDefaultPage();
 			}
 		});
 	}
@@ -395,7 +397,7 @@
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				tableViewer.remove(server);
-				toggleDefultPage();
+				toggleDefaultPage();
 			}
 		});
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
index 5bcea7c..8bee4a0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2018 IBM Corporation and others.
+ * Copyright (c) 2005, 2021 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.viewers;
 
+import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -21,9 +22,11 @@
 import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.internal.Base;
+
 /**
- * Class used to sort categories, runtime types, and server types in the
- * New wizards.
+ * Class used to sort categories, runtime and server types, and server instances
+ * in the New wizards and Servers View.
  */
 public class DefaultViewerSorter extends ViewerSorter {
 	private static AlphanumComparator alphanum = new AlphanumComparator();
@@ -111,6 +114,10 @@
 		if (o1 instanceof IServerType && o2 instanceof IServerType)
 			return compareServerTypes((IServerType) o1, (IServerType) o2);
 		
+		if (o1 instanceof Base && o2 instanceof Base) {
+			return Collator.getInstance().compare(((Base)o1).getName(), ((Base)o2).getName());
+		}
+
 		return 0;
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTableLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTableLabelProvider.java
index 45d61e4..5475eab 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTableLabelProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTableLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2021 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -12,12 +12,16 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.viewers;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.viewers.ILabelDecorator;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
 /**
  * Runtime table label provider.
  */
@@ -44,6 +48,10 @@
 	public Image getColumnImage(Object element, int columnIndex) {
 		if (columnIndex == 0) {
 			IRuntime runtime = (IRuntime) element;
+			IStatus status = runtime.validate(new NullProgressMonitor());
+			if (status != null && status.getSeverity() == IStatus.ERROR) {
+				return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
+			}
 			IRuntimeType runtimeType = runtime.getRuntimeType();
 			if (runtimeType != null) {
 				Image image = ImageResource.getImage(runtimeType.getId());