blob: 09a526f6517160f774a832f6b05ee33128d12c24 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009-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
* Sonatype, Inc. - ongoing development
******************************************************************************/
package org.eclipse.equinox.p2.operations;
import java.util.Collection;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.equinox.internal.p2.operations.Messages;
import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.p2.engine.IProfile;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
/**
* An UninstallOperation describes an operation that uninstalls {@link IInstallableUnit}s from
* a profile.
*
* The following snippet shows how one might use an UninstallOperation to perform a synchronous resolution and
* then kick off an uninstall in the background:
*
* <pre>
* UninstallOperation op = new UninstallOperation(session, new IInstallableUnit [] { removeThisIU });
* IStatus result = op.resolveModal(monitor);
* if (result.isOK()) {
* op.getProvisioningJob(monitor).schedule();
* }
* </pre>
* @noextend This class is not intended to be subclassed by clients.
* @since 2.0
*/
public class UninstallOperation extends ProfileChangeOperation {
private Collection<IInstallableUnit> toUninstall;
/**
* Create an uninstall operation on the specified provisioning session that uninstalls
* the specified IInstallableUnits. Unless otherwise specified, the operation will
* be associated with the currently running profile.
*
* @param session the session to use for obtaining provisioning services
* @param toUninstall the IInstallableUnits to be installed into the profile.
*/
public UninstallOperation(ProvisioningSession session, Collection<IInstallableUnit> toUninstall) {
super(session);
this.toUninstall = toUninstall;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.p2.operations.ProfileChangeOperation#computeProfileChangeRequest(org.eclipse.core.runtime.IProgressMonitor)
*/
protected void computeProfileChangeRequest(MultiStatus status, IProgressMonitor monitor) {
request = ProfileChangeRequest.createByProfileId(session.getProvisioningAgent(), profileId);
request.removeAll(toUninstall);
// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=255984
// We ask to remove the the profile root property in addition to removing the IU. In theory this
// should be redundant, but there are cases where the planner decides not to uninstall something because
// it is needed by others. We still want to remove the root in this case.
// if (rootMarkerKey != null)
for (IInstallableUnit iuToUninstall : toUninstall) {
request.removeInstallableUnitProfileProperty(iuToUninstall, IProfile.PROP_PROFILE_ROOT_IU);
}
}
/* (non-Javadoc)
* @see org.eclipse.equinox.p2.operations.ProfileChangeOperation#getProvisioningJobName()
*/
protected String getProvisioningJobName() {
return Messages.UninstallOperation_ProvisioningJobName;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.p2.operations.ProfileChangeOperation#getResolveJobName()
*/
protected String getResolveJobName() {
return Messages.UninstallOperation_ResolveJobName;
}
}