[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
}