core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/FeatureInstallOperation.java
changeset 1994 e9be28ae423a
parent 1993 2288674e8199
child 1995 b4d36ee06879
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/wizard/FeatureInstallOperation.java	Mon Sep 13 15:01:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the License "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: 
- *
- */
-package com.nokia.carbide.internal.discovery.ui.wizard;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-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.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-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.IQuery;
-import org.eclipse.equinox.p2.query.IQueryResult;
-import org.eclipse.equinox.p2.query.IQueryable;
-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.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.widgets.Display;
-
-import com.nokia.carbide.discovery.ui.Messages;
-
-class FeatureInstallOperation implements IRunnableWithProgress {
-	
-	private Collection<URI> uris;
-	private Collection<FeatureInfo> featureInfos;
-	private boolean wantVersions;
-	private ProvisioningUI provisioningUI;
-	private Collection<IMetadataRepository> repositories;
-	private Collection<IInstallableUnit> ius;
-	private Collection<URI> urisUsed;
-
-	public FeatureInstallOperation(Collection<URI> uris, Collection<FeatureInfo> featureInfos, boolean wantVersions) {
-		this.uris = uris;
-		this.featureInfos = featureInfos;
-		this.wantVersions = wantVersions;
-		provisioningUI = ProvisioningUI.getDefaultUI();
-	}
-
-	@Override
-	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-		try {
-			doInstall(monitor);
-		} catch (OperationCanceledException e) {
-			throw new InterruptedException();
-		} catch (CoreException e) {
-			throw new InvocationTargetException(e);
-		}
-	}
-
-	public void doInstall(IProgressMonitor monitor) throws OperationCanceledException, CoreException {
-		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.FeatureInstallOperation_ConfiguringTaskName, 100);
-		getRepositories(subMonitor.newChild(30));
-		findInstallableUnits(subMonitor.newChild(40));
-		final InstallOperation operation = resolve(subMonitor.newChild(30));
-		Display.getDefault().asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				IQueryable<IInstallableUnit> additions = operation.getProvisioningPlan().getAdditions();
-				IQueryResult<IInstallableUnit> result = additions.query(QueryUtil.createIUGroupQuery(), new NullProgressMonitor());
-				provisioningUI.openInstallWizard(result.toSet(), operation, null);
-			}
-		});
-	}
-
-	private void getRepositories(SubMonitor monitor) throws ProvisionException, OperationCanceledException {
-		monitor.setWorkRemaining(uris.size());
-		repositories = new ArrayList<IMetadataRepository>();
-		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)));
-		}
-	}
-
-	private void findInstallableUnits(SubMonitor monitor) throws ProvisionException {
-		monitor.setWorkRemaining(repositories.size() * featureInfos.size());
-		ius = new ArrayList<IInstallableUnit>();
-		urisUsed = new HashSet<URI>();
-		Set<FeatureInfo> remainingInfos = new HashSet<FeatureInfo>(featureInfos);
-		for (IMetadataRepository repository : repositories) {
-			checkIfCanceled(monitor);
-			IQueryResult<IInstallableUnit> iusInRepository = repository.query(QueryUtil.createIUGroupQuery(), monitor.newChild(1));
-			for (FeatureInfo featureInfo : new HashSet<FeatureInfo>(remainingInfos)) {
-				String id = featureInfo.getId();
-				IQuery<IInstallableUnit> iuQuery = wantVersions ?
-					QueryUtil.createIUQuery(id, featureInfo.getVersion()) :
-					QueryUtil.createLatestQuery(QueryUtil.createIUQuery(id));
-				IQueryResult<IInstallableUnit> result = iusInRepository.query(iuQuery, monitor.newChild(1));
-				if (!result.isEmpty()) {
-					ius.add(result.iterator().next());
-					urisUsed.add(repository.getLocation());
-					remainingInfos.remove(featureInfo);
-					if (remainingInfos.isEmpty())
-						break;
-				}
-			}
-		}
-
-		if (!remainingInfos.isEmpty()) {
-			StringBuilder sb = new StringBuilder();
-			sb.append(Messages.FeatureInstallOperation_MissingFeaturesError);
-			for (FeatureInfo featureInfo : remainingInfos) {
-				sb.append(Messages.FeatureInstallOperation_IdLabel);
-				sb.append(featureInfo.getId());
-				if (wantVersions) {
-					sb.append(Messages.FeatureInstallOperation_VersionLabel);
-					sb.append(featureInfo.getVersion().toString());
-				}
-				sb.append("\n"); //$NON-NLS-1$
-			}
-			throw new ProvisionException(sb.toString());
-		}
-		monitor.done();
-	}
-	
-	private InstallOperation resolve(SubMonitor monitor) throws CoreException {
-		checkIfCanceled(monitor);
-		URI[] uris = (URI[]) urisUsed.toArray(new URI[urisUsed.size()]);
-		InstallOperation installOperation = provisioningUI.getInstallOperation(ius, uris);
-		IStatus operationStatus = installOperation.resolveModal(monitor);
-		if (operationStatus.getSeverity() > IStatus.WARNING) {
-			throw new CoreException(operationStatus);
-		}
-		return installOperation;
-	}
-
-	private void checkIfCanceled(IProgressMonitor monitor) {
-		if (monitor.isCanceled()) {
-			throw new OperationCanceledException();
-		}
-	}
-}