blob: b21a865c1c828b4883e7c6de26e79bb9d36cccc8 [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.model;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
import org.eclipse.equinox.internal.provisional.p2.core.Version;
import org.eclipse.equinox.internal.provisional.p2.director.IPlanner;
import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan;
import org.eclipse.equinox.internal.provisional.p2.engine.DefaultPhaseSet;
import org.eclipse.equinox.internal.provisional.p2.engine.IEngine;
import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
import org.eclipse.equinox.internal.provisional.p2.engine.IProfileRegistry;
import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.internal.provisional.p2.ui.IUPropertyUtils;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wst.server.discovery.internal.Activator;
import org.osgi.framework.BundleContext;
public class Extension {
private ImageDescriptor imageDescriptor;
private IInstallableUnit iu;
private ProvisioningContext provContext;
private ProvisioningPlan plan;
public Extension() {
// do nothing
}
public Extension(IInstallableUnit iu) {
this.iu = iu;
}
public String getName() {
return IUPropertyUtils.getIUProperty(iu, IInstallableUnit.PROP_NAME);
}
public String getDescription() {
return IUPropertyUtils.getIUProperty(iu, IInstallableUnit.PROP_DESCRIPTION);
}
public Image getImage() {
// TODO no image support in p2 yet
return null;
}
public String getLicense() {
return iu.getLicense().getBody();
}
public String getProvider() {
return IUPropertyUtils.getIUProperty(iu, IInstallableUnit.PROP_PROVIDER);
}
public String getId() {
return iu.getId();
}
public Version getVersion() {
return iu.getVersion();
}
public IStatus install(IProgressMonitor monitor) {
BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext();
ProvisioningPlan plan = getProvisioningPlan(monitor);
if (!plan.getStatus().isOK())
return plan.getStatus();
IProfileRegistry profileRegistry = (IProfileRegistry) ServiceHelper.getService(bundleContext, IProfileRegistry.class.getName());
IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
IEngine engine = (IEngine) ServiceHelper.getService(bundleContext, IEngine.SERVICE_NAME);
return engine.perform(profile, new DefaultPhaseSet(), plan.getOperands(), provContext, monitor);
}
public IInstallableUnit[] getIUs() {
return new IInstallableUnit[] { iu };
}
public ProvisioningPlan getProvisioningPlan(IProgressMonitor monitor) {
if (plan != null)
return plan;
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[] { iu } );
provContext = new ProvisioningContext();
plan = planner.getProvisioningPlan(pcr, provContext, monitor);
return plan;
}
}