[305636] Unable to download additional server adapters
diff --git a/plugins/org.eclipse.wst.server.discovery/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.server.discovery/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..c21b754
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.discovery/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,6 @@
+#Mon Apr 05 11:41:05 EDT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.ondemandthreshold=4
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.staticondemandthreshold=4
diff --git a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
index 99a1c9a..6735f3d 100644
--- a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
+++ b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
@@ -241,29 +241,27 @@
 	 * @return The requested service
 	 */
 	public static Object getService(BundleContext context, String name) {
-		IProvisioningAgent agent = getAgent(context);
-		return agent == null ? null : agent.getService(name);
-	}
 
-	/**
-	 * Returns the provisioning agent if available or <code>null</code> otherwise.  Note that this 
-	 * is a helper class that <b>immediately</b> ungets the agent service reference.  This results 
-	 * in a window where the system thinks the agent service is not in use but indeed the caller is about to 
-	 * use the returned agent object.
-	 *   
-	 * @param context the bundle context
-	 * @return the agent or <code>null</code>
-	 */
-	public static IProvisioningAgent getAgent(BundleContext context) {
-		if (context == null)
-			return null;
 		ServiceReference reference = context.getServiceReference(IProvisioningAgent.SERVICE_NAME);
 		if (reference == null)
 			return null;
+		
+		IProvisioningAgent result = getAgent(context);
+		if (result == null)
+			return null;
 		try {
-			return (IProvisioningAgent) context.getService(reference);
+			return result.getService(name);
 		} finally {
 			context.ungetService(reference);
 		}
 	}
+
+	public static IProvisioningAgent getAgent(BundleContext context) {
+		ServiceReference reference = context.getServiceReference(IProvisioningAgent.SERVICE_NAME);
+		if (reference == null)
+			return null;
+		IProvisioningAgent result = (IProvisioningAgent) context.getService(reference);
+		
+		return result;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java
index fbb6dba..d340c14 100644
--- a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java
+++ b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java
@@ -12,18 +12,21 @@
 
 import java.net.URI;
 import java.util.*;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepositoryFactory;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.IProfileRegistry;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.IRequirement;
-import org.eclipse.equinox.p2.query.ExpressionQuery;
-import org.eclipse.equinox.p2.query.IQuery;
-import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.query.*;
 import org.eclipse.equinox.p2.repository.IRepositoryManager;
 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.wst.server.discovery.internal.PatternInstallableUnitQuery;
+import org.eclipse.wst.server.discovery.internal.ExtensionUtility;
 import org.eclipse.wst.server.discovery.internal.Trace;
+import org.osgi.framework.BundleContext;
 /*
 * From Kosta:
 *   feature version (optional)
@@ -63,21 +66,46 @@
 	public List<Extension> getExtensions(IProgressMonitor monitor) throws CoreException {
 		try {
 			UpdateSiteMetadataRepositoryFactory mrf = new UpdateSiteMetadataRepositoryFactory();
+
+			BundleContext bd = org.eclipse.wst.server.discovery.internal.Activator.getDefault().getBundle().getBundleContext();			
+			mrf.setAgent(ExtensionUtility.getAgent(bd));
+			
 			URI url2 = new URI(url);
 			IMetadataRepository repo = mrf.load(url2, IRepositoryManager.REPOSITORIES_ALL, monitor);
 			//Query query = new InstallableUnitQuery("org.eclipse.wst.server.core.serverAdapter");
 			//Query query = CompoundQuery.createCompoundQuery(new Query[] {new
 			//		IUPropertyQuery(IInstallableUnit.PROP_TYPE_CATEGORY, Boolean.toString(true)),
 			//		new IUPropertyQuery(IInstallableUnit.PROP_NAME,"org.eclipse.wst.server.core.serverAdapter")}, true);
-			IQuery<IInstallableUnit> query = new PatternInstallableUnitQuery("org.eclipse.wst.server.core.serverAdapter");
 			
+//---->>>>
+			IProfileRegistry profileRegistry = (IProfileRegistry) ExtensionUtility.getService(bd, IProfileRegistry.class.getName());
+			IProfile[] profiles = profileRegistry.getProfiles();
+			IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
+			
+			//IQuery<IInstallableUnit> query = QueryUtil.createIUAnyQuery();
+			//			IQuery<IInstallableUnit> query = QueryUtil.createIUQuery("org.eclipse.wst.server.core.serverAdapter");
+			//Query query = new InstallableUnitQuery("org.eclipse.wst.server.core.serverAdapter");
+			//List<String> list2 = new ArrayList();
+			//Query query = new ExtensionInstallableUnitQuery(list2);
+			//IQueryResult<IInstallableUnit> collector = profile.query(query, monitor);
+//<-------	
+			
+			//IQuery<IInstallableUnit> query = QueryUtil.createIUCategoryQuery();
+			IQuery<IInstallableUnit> query = QueryUtil.createMatchQuery("id ~=/*org.eclipse.wst.server.core.serverAdapter/");
+
 			IQueryResult<IInstallableUnit> collector = repo.query(query, monitor);
+			
 			List<Extension> list = new ArrayList<Extension>();
 			for (IInstallableUnit iu: collector.toUnmodifiableSet()) {
 				Collection<IRequirement> req = iu.getRequirements();
 				if (req != null) {
 					for (IRequirement requirement : req) {
-					    query = new ExpressionQuery<IInstallableUnit>(IInstallableUnit.class, requirement.getMatches());
+						
+						//IMatchExpression<IInstallableUnit> matches = requirement.getMatches();
+						//query = QueryUtil.createQuery(matches);
+						IMatchExpression<IInstallableUnit> matches = requirement.getMatches();
+						query = new ExpressionMatchQuery<IInstallableUnit>(IInstallableUnit.class, matches);
+
 					    IQueryResult<IInstallableUnit> collector2 = repo.query(query, monitor);						
 						Iterator<IInstallableUnit> iter2 = collector2.iterator();
 						while (iter2.hasNext()) {