Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java')
-rw-r--r--plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java267
1 files changed, 0 insertions, 267 deletions
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
deleted file mode 100644
index 6735f3db8..000000000
--- a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.discovery.internal;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-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.Version;
-import org.eclipse.equinox.p2.query.*;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.discovery.internal.model.Extension;
-import org.eclipse.wst.server.discovery.internal.model.ExtensionUpdateSite;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-public class ExtensionUtility {
- private static ExtensionUpdateSite[] getExtensionUpdateSites(URL url) throws CoreException {
- InputStream in = null;
- try {
- in = url.openStream();
- } catch (Exception e) {
- Trace.trace(Trace.SEVERE, "Could not load URL " + url);
- }
-
- if (in == null)
- throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, "Could not load extensions", null));
-
- try {
- IMemento memento = XMLMemento.loadMemento(in);
- IMemento children[] = memento.getChildren("site");
- int size = children.length;
- List<ExtensionUpdateSite> list = new ArrayList<ExtensionUpdateSite>(size);
- for (int i = 0; i < size; i++) {
- String url2 = children[i].getString("url");
- ExtensionUpdateSite item = new ExtensionUpdateSite(url2, null, null);
- list.add(item);
- }
-
- ExtensionUpdateSite[] items = new ExtensionUpdateSite[list.size()];
- list.toArray(items);
- return items;
- } catch (Exception e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, e.getMessage(), e));
- }
- }
-
- /**
- * Returns an array of all known extension update sites.
- * <p>
- * A new array is returned on each call, so clients may store or modify the result.
- * </p>
- *
- * @return the array of extensions items {@link ExtensionUpdateSite}
- */
- private static ExtensionUpdateSite[] getExtensionUpdateSites() {
- URL url = Activator.getDefault().getBundle().getEntry("serverAdapterSites.xml");
-
- try {
- return getExtensionUpdateSites(url);
- } catch (CoreException ce) {
- Trace.trace(Trace.SEVERE, "Could not get extension items");
- return new ExtensionUpdateSite[0];
- }
- }
-
- /**
- * Return true if the new feature is already installed, or a newer one is.
- *
- * @param existing
- * @param newFeature
- * @return true if the new feature is already installed, or a newer one is.
- */
- private static boolean alreadyExists(List<Extension> existing, Extension newFeature) {
- if (existing.contains(newFeature))
- return true;
-
- Version newV = newFeature.getVersion();
-
- Iterator<Extension> iterator = existing.iterator();
- while (iterator.hasNext()) {
- Extension feature = iterator.next();
- if (feature.getId().equals(newFeature.getId())) {
- if (feature.getVersion().compareTo(newV) >= 0)
- return true;
- }
- }
-
- return false;
- }
-
- private static void addExtension(List<Extension> list, List<Extension> existing, Extension newFeature, ExtensionListener listener) {
- if (alreadyExists(existing, newFeature))
- return;
-
- synchronized (list) {
- Version newV = newFeature.getVersion();
- Extension remove = null;
-
- Iterator<Extension> iterator = list.iterator();
- while (iterator.hasNext()) {
- Extension feature = iterator.next();
- if (feature.getId().equals(newFeature.getId())) {
- if (feature.getVersion().compareTo(newV) < 0) {
- remove = feature;
- } else
- // new feature is older
- return;
- }
- }
- if (remove != null) {
- list.remove(remove);
- listener.extensionRemoved(remove);
- }
-
- list.add(newFeature);
- }
- listener.extensionFound(newFeature);
- }
-
- protected static void addExtensions(List<Extension> list, List<Extension> existing, List<Extension> newFeatures, ExtensionListener listener) {
- Iterator<Extension> iterator = newFeatures.iterator();
- while (iterator.hasNext())
- addExtension(list, existing, iterator.next(), listener);
- }
-
- public interface ExtensionListener {
- public void extensionFound(Extension extension);
-
- public void extensionRemoved(Extension feature);
-
- public void siteFailure(String host);
- }
-
- private static List<Extension> getExistingFeatures(IProgressMonitor monitor) throws CoreException {
- monitor.beginTask(Messages.discoverLocalConfiguration, 100);
-
- IProfileRegistry profileRegistry = (IProfileRegistry) getService(Activator.getDefault().getBundle().getBundleContext(), IProfileRegistry.class.getName());
- IProfile[] profiles = profileRegistry.getProfiles();
- IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
-
- IQuery<IInstallableUnit> query = QueryUtil.createIUAnyQuery();
- //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);
-
- List<Extension> list = new ArrayList<Extension>();
- Iterator<IInstallableUnit> iter = collector.iterator();
- while (iter.hasNext()) {
- IInstallableUnit iu = iter.next();
- if (!list.contains(iu))
- list.add(new Extension(iu, null));
- }
-
- monitor.done();
-
- return list;
- }
-
- public static Extension[] getAllExtensions(final String id, final ExtensionListener listener, IProgressMonitor monitor) throws CoreException {
- monitor = ProgressUtil.getMonitorFor(monitor);
- monitor.beginTask("", 1100);
-
- monitor.subTask(Messages.discoverLocalConfiguration);
- final List<Extension> existing = getExistingFeatures(ProgressUtil.getSubMonitorFor(monitor, 100));
-
- final ExtensionUpdateSite[] items = getExtensionUpdateSites();
- if (items == null || items.length == 0)
- return new Extension[0];
- final int x = 1000 / items.length;
-
- monitor.worked(50);
- final List<Extension> list = new ArrayList<Extension>();
- int size = items.length;
-
- Thread[] threads = new Thread[size];
- for (int i = 0; i < size; i++) {
- try {
- if (monitor.isCanceled())
- return null;
-
- monitor.subTask(NLS.bind(Messages.discoverSearching, items[i].getUrl()));
- final int ii = i;
- final IProgressMonitor monitor2 = monitor;
- threads[i] = new Thread("Extension Checker for " + items[i].getUrl()) {
- public void run() {
- try {
- List<Extension> list2 = items[ii].getExtensions(ProgressUtil.getSubMonitorFor(monitor2, x));
- addExtensions(list, existing, list2, listener);
- } catch (CoreException ce) {
- listener.siteFailure(ce.getLocalizedMessage());
- Trace.trace(Trace.WARNING, "Error downloading extension info", ce);
- }
- }
- };
- threads[i].setDaemon(true);
- threads[i].start();
- } catch (Exception e) {
- Trace.trace(Trace.WARNING, "Error downloading extension info 2", e);
- }
- }
-
- for (int i = 0; i < size; i++) {
- try {
- if (monitor.isCanceled())
- return null;
-
- if (threads[i].isAlive())
- threads[i].join();
- } catch (Exception e) {
- Trace.trace(Trace.WARNING, "Error downloading extension info 3", e);
- }
- }
-
- Extension[] ef = new Extension[list.size()];
- list.toArray(ef);
- monitor.done();
- return ef;
- }
-
- /**
- * Returns the service described by the given arguments. Note that this is a helper class
- * that <b>immediately</b> ungets the service reference. This results in a window where the
- * system thinks the service is not in use but indeed the caller is about to use the returned
- * service object.
- * @param context
- * @param name
- * @return The requested service
- */
- public static Object getService(BundleContext context, String name) {
-
- ServiceReference reference = context.getServiceReference(IProvisioningAgent.SERVICE_NAME);
- if (reference == null)
- return null;
-
- IProvisioningAgent result = getAgent(context);
- if (result == null)
- return null;
- try {
- 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

Back to the top