blob: a326825975e69d058a6940092383311fa1ad11d5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 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.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
import org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepositoryFactory;
import org.eclipse.equinox.internal.provisional.p2.director.*;
import org.eclipse.equinox.internal.provisional.p2.engine.*;
import org.eclipse.equinox.internal.provisional.p2.metadata.*;
import org.eclipse.equinox.internal.provisional.p2.metadata.query.InstallableUnitQuery;
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
import org.eclipse.equinox.internal.provisional.p2.query.Collector;
import org.eclipse.equinox.internal.provisional.p2.query.Query;
import org.osgi.framework.BundleContext;
public class P2Test {
public static void test() {
try {
System.out.println("---p2---");
//SimpleMetadataRepositoryFactory mrf = new SimpleMetadataRepositoryFactory();
UpdateSiteMetadataRepositoryFactory mrf = new UpdateSiteMetadataRepositoryFactory();
URI uri = new URI("http://www.apache.org/dist/geronimo/eclipse/updates/");
IMetadataRepository repo = mrf.load(uri, null);
System.out.println("Repo: " + repo);
//Query query = new InstallableUnitQuery(null);
Query query = new InstallableUnitQuery("org.eclipse.wst.server.core.serverAdapter");
Collector collector = new Collector();
repo.query(query, collector, null);
listCollector(collector);
List<IInstallableUnit> list = new ArrayList<IInstallableUnit>();
Iterator iter = collector.iterator();
while (iter.hasNext()) {
IInstallableUnit iu = (IInstallableUnit) iter.next();
RequiredCapability[] req = iu.getRequiredCapabilities();
if (req != null) {
for (RequiredCapability rc : req) {
query = new InstallableUnitQuery(rc.getName(), rc.getRange());
Collector collector2 = new Collector();
repo.query(query, collector2, null);
Iterator iter2 = collector2.iterator();
while (iter2.hasNext()) {
IInstallableUnit iu2 = (IInstallableUnit) iter2.next();
if (!list.contains(iu2))
list.add(iu2);
}
}
}
}
IInstallableUnit install = null;
iter = list.iterator();
while (iter.hasNext()) {
IInstallableUnit iu = (IInstallableUnit) iter.next();
if (install == null || install.getVersion().compareTo(iu.getVersion()) < 0)
install = iu;
System.out.println(iu.getId() + " " + iu.getVersion() + " " + iu.getProperty(IInstallableUnit.PROP_NAME) + " " + iu.getProperty(IInstallableUnit.PROP_DESCRIPTION));
}
//if (true)
// return;
//IInstallableUnit install = iu;
IProgressMonitor monitor = new NullProgressMonitor();
BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext();
IPlanner planner = (IPlanner) ServiceHelper.getService(bundleContext, IPlanner.class.getName());
IProfileRegistry profileRegistry = (IProfileRegistry) ServiceHelper.getService(bundleContext, IProfileRegistry.class.getName());
IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
ProfileChangeRequest pcr = new ProfileChangeRequest(profile);
pcr.addInstallableUnits(new IInstallableUnit[] { install } );
ProvisioningContext provContext = new ProvisioningContext();
ProvisioningPlan plan = planner.getProvisioningPlan(pcr, provContext, monitor);
System.out.println("plan: " + plan.getStatus());
//if (!plan.getStatus().isOK())
// return plan.getStatus();
IEngine engine = (IEngine) ServiceHelper.getService(bundleContext, IEngine.SERVICE_NAME);
IStatus status = engine.perform(profile, new DefaultPhaseSet(), plan.getOperands(), provContext, monitor);
System.out.println("install: " + status);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void listCollector(Collector collector) {
Iterator iter = collector.iterator();
while (iter.hasNext()) {
IInstallableUnit iu = (IInstallableUnit) iter.next();
System.out.println(" " + iu + " " + iu.getVersion());
Map map = iu.getProperties();
if (map != null) {
Iterator iter2 = map.keySet().iterator();
while (iter2.hasNext()) {
Object obj = iter2.next();
String s = map.get(obj) + "";
if (s.contains("\n"))
s = s.substring(0, s.indexOf("\n"));
//if (s.length() > 20)
// s = s.substring(0, 20);
System.out.println(" prop: " + obj + " = " + s);
}
}
RequiredCapability[] req = iu.getRequiredCapabilities();
if (req != null) {
for (RequiredCapability rc : req) {
System.out.println(" req: " + rc.getName() + " " + rc.getRange() + " " + rc.getNamespace());
}
}
ProvidedCapability[] pro = iu.getProvidedCapabilities();
if (pro != null) {
for (ProvidedCapability pc : pro) {
System.out.println(" pro: " + pc.getName());
}
}
}
}
}