core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/p2/DynamicP2Installer.java
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/p2/DynamicP2Installer.java Tue Sep 14 11:40:12 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/p2/DynamicP2Installer.java Tue Sep 14 13:37:29 2010 -0500
@@ -24,6 +24,7 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.internal.provisional.p2.director.IDirector;
import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
@@ -118,6 +119,7 @@
}
private void doInstall(IProgressMonitor monitor) throws CoreException {
+ SubMonitor subMonitor = SubMonitor.convert(monitor, "Installing plugins from " + repositoryLocation.toOSString(), 100);
URI uri = URIUtil.toURI(repositoryLocation);
IMetadataRepositoryManager metadataRepoManager =
(IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
@@ -125,26 +127,34 @@
(IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
try {
// add and load repository
+ checkIfCanceled(subMonitor);
metadataRepoManager.addRepository(uri);
IMetadataRepository metadataRepository = metadataRepoManager.loadRepository(uri, null);
artifactRepoManager.addRepository(uri);
artifactRepoManager.loadRepository(uri, null);
+ subMonitor.worked(10);
// get IU from repository
- IQueryResult<IInstallableUnit> units = metadataRepository.query(QueryUtil.createIUGroupQuery(), monitor);
+ checkIfCanceled(subMonitor);
+ IQueryResult<IInstallableUnit> units = metadataRepository.query(QueryUtil.createIUGroupQuery(), subMonitor);
if (units.isEmpty())
throw new CoreException(Activator.makeErrorStatus("Could not find installable unit", null));
+ subMonitor.worked(10);
// check if installed
- IQueryResult<IInstallableUnit> result = profile.query(QueryUtil.createIUQuery(units.iterator().next()), monitor);
+ checkIfCanceled(subMonitor);
+ IQueryResult<IInstallableUnit> result = profile.query(QueryUtil.createIUQuery(units.iterator().next()), subMonitor);
if (!result.isEmpty())
throw new CoreException(Activator.makeStatus(IStatus.CANCEL, null, null)); // already installed
+ subMonitor.worked(10);
// do provisioning operation
+ checkIfCanceled(subMonitor);
ProfileChangeRequest request = new ProfileChangeRequest(profile);
request.addAll(units.toUnmodifiableSet());
IDirector director = (IDirector) agent.getService(IDirector.SERVICE_NAME);
- IStatus status = director.provision(request, null, monitor);
+ IStatus status = director.provision(request, null, subMonitor);
+ subMonitor.worked(70);
if (!status.isOK())
throw new CoreException(status);
@@ -152,6 +162,7 @@
finally {
metadataRepoManager.removeRepository(uri);
artifactRepoManager.removeRepository(uri);
+ subMonitor.done();
}
}
@@ -160,4 +171,10 @@
return profileRegistry.getProfile(provisioningUI.getProfileId());
}
+ private void checkIfCanceled(IProgressMonitor monitor) throws CoreException {
+ if (monitor.isCanceled()) {
+ throw new CoreException(Activator.makeStatus(IStatus.CANCEL, null, null)); // installation canceled
+ }
+ }
+
}