diff -r 8fdfd1446ad7 -r 7e34f628583a core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/P2Utils.java --- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/P2Utils.java Fri Aug 13 08:37:37 2010 -0500 +++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/P2Utils.java Fri Aug 13 11:58:38 2010 -0500 @@ -17,34 +17,21 @@ package com.nokia.carbide.internal.discovery.ui.wizard; import java.net.URI; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Set; -import org.eclipse.core.runtime.CoreException; 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.core.ProvisionException; import org.eclipse.equinox.p2.engine.IProfile; import org.eclipse.equinox.p2.engine.IProfileRegistry; import org.eclipse.equinox.p2.metadata.IInstallableUnit; -import org.eclipse.equinox.p2.metadata.Version; -import org.eclipse.equinox.p2.operations.InstallOperation; import org.eclipse.equinox.p2.operations.ProvisioningSession; -import org.eclipse.equinox.p2.operations.RepositoryTracker; import org.eclipse.equinox.p2.query.IQueryResult; import org.eclipse.equinox.p2.query.QueryUtil; -import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; -import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager; import org.eclipse.equinox.p2.ui.ProvisioningUI; -import org.eclipse.swt.widgets.Display; class P2Utils { @@ -74,101 +61,4 @@ } return infos; } - - public static void doInstall(Collection uris, Collection featureInfos, - boolean wantVersions, IProgressMonitor monitor) throws OperationCanceledException, CoreException { - SubMonitor subMonitor = SubMonitor.convert(monitor, "Configuring install operation", 100); - Collection repositories = - getRepositories(uris, wantVersions, subMonitor.newChild(30)); - final Collection ius = - findInstallableUnits(repositories, featureInfos, wantVersions, subMonitor.newChild(40)); - final InstallOperation operation = resolve(ius, (URI[]) uris.toArray(new URI[uris.size()]), subMonitor.newChild(30)); - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - ProvisioningUI.getDefaultUI().openInstallWizard(ius, operation, null); - } - }); - } - - private static Collection getRepositories(Collection uris, - boolean wantVersions, SubMonitor monitor) throws ProvisionException, OperationCanceledException { - monitor.setWorkRemaining(uris.size()); - List repositories = new ArrayList(); - ProvisioningUI provisioningUI = ProvisioningUI.getDefaultUI(); - ProvisioningSession session = provisioningUI.getSession(); - RepositoryTracker repositoryTracker = provisioningUI.getRepositoryTracker(); - IMetadataRepositoryManager manager = - (IMetadataRepositoryManager) session.getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME); - for (URI uri : uris) { - checkIfCanceled(monitor); - repositoryTracker.addRepository(uri, null, session); - repositories.add(manager.loadRepository(uri, monitor.newChild(1))); - } - - return repositories; - } - - private static Collection findInstallableUnits(Collection repositories, - Collection featureInfos, boolean wantVersions, SubMonitor monitor) throws ProvisionException { - monitor.setWorkRemaining(repositories.size()); - List ius = new ArrayList(); - Set remainingInfos = new HashSet(featureInfos); - for (IMetadataRepository repository : repositories) { - checkIfCanceled(monitor); - IQueryResult result = repository.query(QueryUtil.createIUGroupQuery(), monitor.newChild(1)); - for (Iterator iter = result.iterator(); iter.hasNext();) { - IInstallableUnit iu = iter.next(); - String id = iu.getId(); - Version version = iu.getVersion(); - FeatureInfo featureInfo = findInfo(remainingInfos, id, wantVersions ? version : null); - if (featureInfo != null) { - ius.add(iu); - remainingInfos.remove(featureInfo); - } - } - } - if (!remainingInfos.isEmpty()) { - StringBuilder sb = new StringBuilder(); - sb.append("Install failed. Could not find some features: \n"); - for (FeatureInfo featureInfo : remainingInfos) { - sb.append("id="); - sb.append(featureInfo.getId()); - if (wantVersions) { - sb.append("version="); - sb.append(featureInfo.getVersion().toString()); - } - sb.append("\n"); - } - throw new ProvisionException(sb.toString()); - } - return ius; - } - - private static FeatureInfo findInfo(Collection featureInfos, String id, Version version) { - for (FeatureInfo featureInfo : featureInfos) { - if (featureInfo.getId().equals(id) && - (version == null || version.toString().equals(featureInfo.getVersion().toString()))) - return featureInfo; - } - return null; - } - - private static InstallOperation resolve(Collection ius, URI[] repositories, - SubMonitor monitor) throws CoreException { - checkIfCanceled(monitor); - ProvisioningUI provisioningUI = ProvisioningUI.getDefaultUI(); - InstallOperation installOperation = provisioningUI.getInstallOperation(ius, repositories); - IStatus operationStatus = installOperation.resolveModal(monitor); - if (operationStatus.getSeverity() > IStatus.WARNING) { - throw new CoreException(operationStatus); - } - return installOperation; - } - - private static void checkIfCanceled(IProgressMonitor monitor) { - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - } }