[220757] Handle no runtime wizard fragment case better
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
index 7145b8c..4040244 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
@@ -17,6 +17,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.dialogs.Dialog;
@@ -30,6 +31,7 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -105,14 +107,25 @@
 					edit.setEnabled(false);
 					remove.setEnabled(false);
 					pathLabel.setText("");
-				} else if (runtime.isReadOnly()) {
-					edit.setEnabled(false);
-					remove.setEnabled(false);
-					pathLabel.setText(runtime.getLocation() + "");
 				} else {
-					edit.setEnabled(true);
-					remove.setEnabled(true);
-					pathLabel.setText(runtime.getLocation() + "");
+					IStatus status = runtime.validate(new NullProgressMonitor());
+					if (status != null && status.getSeverity() == IStatus.ERROR) {
+						Color c = pathLabel.getDisplay().getSystemColor(SWT.COLOR_RED);
+						pathLabel.setForeground(c);
+						pathLabel.setText(status.getMessage());
+					} else if (runtime.getLocation() != null) {
+						pathLabel.setForeground(edit.getForeground());
+						pathLabel.setText(runtime.getLocation() + "");
+					} else
+						pathLabel.setText("");
+					
+					if (runtime.isReadOnly()) {
+						edit.setEnabled(false);
+						remove.setEnabled(false);
+					} else {
+						edit.setEnabled(ServerUIPlugin.hasWizardFragment(runtime.getRuntimeType().getId()));
+						remove.setEnabled(true);
+					}
 				}
 			}
 		});
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
index 2c22f76..6d0f2b1 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
@@ -612,6 +612,30 @@
 	}
 
 	/**
+	 * Returns true if the given id has possible wizard fragments, and
+	 * false otherwise.
+	 *
+	 * @param typeId the server or runtime type id
+	 * @return true if the given id has possible wizard fragments, and
+	 *    false otherwise
+	 */
+	public static boolean hasWizardFragment(String typeId) {
+		if (typeId == null)
+			return false;
+		
+		if (wizardFragments == null)
+			loadWizardFragments();
+		
+		Iterator iterator = wizardFragments.keySet().iterator();
+		while (iterator.hasNext()) {
+			String key = (String) iterator.next();
+			if (typeId.equals(key))
+				return true;
+		}
+		return false;
+	}
+
+	/**
 	 * Returns the wizard fragment with the given id.
 	 *
 	 * @param typeId the server or runtime type id
@@ -620,7 +644,7 @@
 	public static WizardFragment getWizardFragment(String typeId) {
 		if (typeId == null)
 			return null;
-
+		
 		if (wizardFragments == null)
 			loadWizardFragments();
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
index 0eeaf88..a3ece18 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
@@ -393,12 +393,15 @@
 		// runtime
 		if (server != null && server.getServerType() != null && server.getServerType().hasRuntime()) {
 			final IRuntime runtime = server.getRuntime();
-			Hyperlink link = toolkit.createHyperlink(composite, Messages.serverEditorOverviewRuntime, SWT.NONE);
-			link.addHyperlinkListener(new HyperlinkAdapter() {
-				public void linkActivated(HyperlinkEvent e) {
-					editRuntime(runtime);
-				}
-			});
+			if (ServerUIPlugin.hasWizardFragment(runtime.getRuntimeType().getId())) {
+				Hyperlink link = toolkit.createHyperlink(composite, Messages.serverEditorOverviewRuntime, SWT.NONE);
+				link.addHyperlinkListener(new HyperlinkAdapter() {
+					public void linkActivated(HyperlinkEvent e) {
+						editRuntime(runtime);
+					}
+				});
+			} else
+				createLabel(toolkit, composite, Messages.serverEditorOverviewRuntime);
 			
 			IRuntimeType runtimeType = server.getServerType().getRuntimeType();
 			runtimes = ServerUIPlugin.getRuntimes(runtimeType);