package ch.elexis.core.ui.p2;
import java.net.URI;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.operations.ProvisioningJob;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.operations.UpdateOperation;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
/**
* Source code from
* <ul>
* <li><a href="http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application">Equinox
* Wiki pages, Adding self update</a></li>
* </ul>
*
* @author mahieddine.ichir@free.fr
*/
public class P2Util {
/**
* Check for application updates.
*
* @param agent
* @param monitor
* @return
* @throws OperationCanceledException
*/
public static IStatus checkForUpdates(IProvisioningAgent agent, IProgressMonitor monitor)
throws OperationCanceledException{
System.out.println(">> checkForUpdates");
ProvisioningSession session = new ProvisioningSession(agent);
UpdateOperation operation = new UpdateOperation(session);
SubMonitor sub = SubMonitor.convert(monitor, "Checking for application updates...", 200);
return operation.resolveModal(sub.newChild(100));
}
/**
* Download and install application updates.
*
* @param agent
* @param monitor
* @return
* @throws OperationCanceledException
*/
public static IStatus installUpdates(IProvisioningAgent agent, IProgressMonitor monitor)
throws OperationCanceledException{
ProvisioningSession session = new ProvisioningSession(agent);
UpdateOperation operation = new UpdateOperation(session);
SubMonitor sub = SubMonitor.convert(monitor, "Installing updates ...", 200);
operation.resolveModal(sub.newChild(100));
ProvisioningJob job = operation.getProvisioningJob(monitor);
return job.runModal(sub.newChild(100));
}
/**
* Add a repository to declared updates repositories.
*
* @param repo
* @return
*/
public static boolean addRepository(IProvisioningAgent agent, String repo){
System.out.println(">> adding repository " + repo);
IMetadataRepositoryManager metadataManager =
(IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
IArtifactRepositoryManager artifactManager =
(IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
if (metadataManager == null) {
System.out.println("metadataManager is null!!!");
return false;
}
if (artifactManager == null) {
System.out.println("artifactManager is null!!!");
return false;
}
try {
URI uri = new URI(repo);
metadataManager.addRepository(uri);
artifactManager.addRepository(uri);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}