package org.semanticsoft.vaaclipse.p2.service.impl;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.engine.IProfileRegistry;
import org.eclipse.equinox.p2.engine.ProvisioningContext;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.operations.ProvisioningJob;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.operations.UninstallOperation;
import org.eclipse.equinox.p2.query.IQuery;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.IQueryable;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.semanticsoft.vaaclipse.p2.iservice.IUninstallSoftwareService;
/*******************************************************************************
* Copyright (c) 2012 Klevis Ramo 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: Klevis Ramo - initial API and implementation
*******************************************************************************/
public class UninstallSoftwareService implements IUninstallSoftwareService {
IProvisioningAgent agent;
public static final int GROUP = 0;
public static final int CATEGORY = 1;
public static final int ANY = 2;
@Override
public List<IInstallableUnit> listInstalledSoftware(
IProvisioningAgent agen, int i) {
this.agent = agen;
IProfileRegistry service = (IProfileRegistry) agen
.getService(IProfileRegistry.SERVICE_NAME);
IQueryable<IInstallableUnit> queryable = service.getProfile("_SELF_");
if (queryable == null) {
return null;
}
NullProgressMonitor monitor = new NullProgressMonitor();
IQuery<IInstallableUnit> createIU = null;
if (i == GROUP) {
createIU = QueryUtil.createIUGroupQuery();
} else if (i == CATEGORY) {
createIU = QueryUtil.createIUCategoryQuery();
} else if (i == ANY) {
createIU = QueryUtil.createIUAnyQuery();
}
IQueryResult<IInstallableUnit> query = queryable.query(createIU,
monitor);
List<IInstallableUnit> list = org.semanticsoft.vaaclipse.p2.util.Utils
.toList(query);
return list;
}
@Override
public String uninstallSelected(List<IInstallableUnit> listToUninstall) {
try {
UninstallOperation uninstallOperation = new UninstallOperation(
new ProvisioningSession(agent), listToUninstall);
uninstallOperation.setProvisioningContext(new ProvisioningContext(
agent));
NullProgressMonitor monitor = new NullProgressMonitor();
IStatus resolveModal = uninstallOperation.resolveModal(monitor);
String resolutionDetails = uninstallOperation
.getResolutionDetails();
if (!resolveModal.isOK()) {
return resolutionDetails;
}
if (resolveModal.getSeverity() == IStatus.ERROR) {
return resolutionDetails;
}
if (resolveModal.getCode() == IStatus.ERROR) {
return resolutionDetails;
} else if (resolveModal.getCode() == IStatus.WARNING) {
return resolutionDetails;
} else if (resolveModal.getCode() == IStatus.CANCEL) {
return resolutionDetails;
} else if (resolveModal.getCode() == IStatus.INFO) {
return resolutionDetails;
}
ProvisioningJob provisioningJob = uninstallOperation
.getProvisioningJob(null);
provisioningJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void scheduled(IJobChangeEvent event) {
// TODO Auto-generated method stub
super.scheduled(event);
}
@Override
public void sleeping(IJobChangeEvent event) {
// TODO Auto-generated method stub
super.sleeping(event);
}
@Override
public void aboutToRun(IJobChangeEvent event) {
// TODO Auto-generated method stub
super.aboutToRun(event);
}
@Override
public void running(IJobChangeEvent event) {
// TODO Auto-generated method stub
super.running(event);
}
@Override
public void done(IJobChangeEvent event) {
// TODO Auto-generated method stub
super.done(event);
}
});
IStatus run = provisioningJob.runModal(monitor);
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
return null;
}
}