[204255] Run On Server does not defaults on the targeted server
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
index 0a833c8..3e5e096 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
@@ -10,11 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.viewers;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
@@ -199,4 +197,12 @@
 		}
 		return initialSelection;
 	}
+	
+	public Object getInitialSelection(IProject project){
+		if (initialSelection == null) {
+			InitialSelectionProvider isp = ServerUIPlugin.getInitialSelectionProvider();
+			initialSelection = isp.getInitialSelection(getAllObjects(),project);
+		}
+		return initialSelection;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
index f6917cf..248fad9 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
@@ -10,12 +10,16 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.viewers;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.ResourceManager;
+import org.eclipse.wst.server.core.internal.facets.FacetUtil;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.Trace;
 /**
  * Class used to sort categories, runtime types, and server types in the
  * New wizards.
@@ -76,10 +80,47 @@
 	 * @return the initial selection
 	 */
 	public IServer getInitialSelection(IServer[] servers) {
+		return getInitialSelection(servers,null);
+	}
+	
+	/**
+	 * Allows adopters to provide an initial selection out of a list of items.
+	 * <p>
+	 * The <code>IProject</code> can be null, in cases where a project selection was not available (ie: New Server Wizard)
+	 * </p><p>
+	 * Returning <code>null</code> means no object is applicable to be selected. 
+	 * </p>
+	 * 
+	 * @param servers
+	 * @param project
+	 * @return
+	 */
+	public IServer getInitialSelection(IServer[] servers, IProject project){
 		if (servers == null)
 			return null;
 		
-		return servers[0];
+		IServer rval = servers[0];
+		
+		if (project != null){
+			try{
+				// check for the targeted runtime of the project
+				IFacetedProject facetedProject = ProjectFacetsManager.create(project);
+				if (facetedProject != null){
+					org.eclipse.wst.common.project.facet.core.runtime.IRuntime facetedRuntime = facetedProject.getPrimaryRuntime();
+						if (facetedRuntime != null){
+							IRuntime runtime = FacetUtil.getRuntime(facetedRuntime);
+							IServer server = findServerFromRuntime(runtime.getId());
+							if (server != null){
+								rval = server;
+							}
+						}
+					}
+				}
+				catch (CoreException ce){
+					Trace.trace(Trace.WARNING,"Could not create a faceted project",ce);
+				}
+			}
+		return rval;
 	}
 
 	/**
@@ -155,4 +196,69 @@
 		}
 		return first;
 	}
+	
+	/**
+	 * Allows adopters to provide an initial selection out of a list of items.
+	 * <p>
+	 * The <code>IProject</code> can be null, in cases where a project selection was not available (ie: New Server Wizard)
+	 * </p><p>
+	 * Returning <code>null</code> means no object is applicable to be selected. 
+	 * </p>
+	 * 
+	 * @param obj Contains an array of all the possible object to be selected. 
+	 * @param project
+	 * @return The object to be selected from the <code>obj[]</code> 
+	 */
+	public Object getInitialSelection(Object [] obj, IProject project){
+		if (obj == null || obj.length == 0)
+			return null;
+		
+		if (obj[0] instanceof IRuntimeType) {
+			int size = obj.length;
+			IRuntimeType[] rt = new IRuntimeType[size];
+			for (int i = 0; i < size; i++)
+				rt[i] = (IRuntimeType) obj[i];
+			return getInitialSelection(rt);
+		}
+		
+		if (obj[0] instanceof IServerType) {
+			int size = obj.length;
+			IServerType[] st = new IServerType[size];
+			for (int i = 0; i < size; i++)
+				st[i] = (IServerType) obj[i];
+			return getInitialSelection(st);
+		}
+		
+		if (obj[0] instanceof IServer) {
+			int size = obj.length;
+			IServer[] st = new IServer[size];
+			for (int i = 0; i < size; i++)
+				st[i] = (IServer) obj[i];
+			return getInitialSelection(st,project);
+		}
+		
+		return null;		
+	}
+	
+	/**
+	 * Returns the server with the given runtime id, or <code>null</code> 
+	 * if none. This convenience method searches the list of registered servers
+	 * for the matching runtime id. The id may not be null.
+	 * 
+	 * @param runtimeId
+	 * @return
+	 */
+	private static IServer findServerFromRuntime(String runtimeId){
+		if (runtimeId == null)
+			throw new IllegalArgumentException();
+			
+		IServer [] servers = ResourceManager.getInstance().getServers();
+		for (IServer server:servers){
+			if (runtimeId == server.getRuntime().getId()){
+				return server;
+			}
+		}
+		return null;
+	}
+	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
index 7e24661..2588b10 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
@@ -156,8 +156,8 @@
 				Display.getDefault().asyncExec(new Runnable() {
 					public void run() {
 						try {
-							if (contentProvider.getInitialSelection() != null)
-								treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection()), true);
+							if (contentProvider.getInitialSelection(module.getProject()) != null)
+								treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection(module.getProject())), true);
 						} catch (Exception e) {
 							// ignore - wizard has already been closed
 						}