diff options
author | Jeff McAffer | 2009-01-21 19:51:48 +0000 |
---|---|---|
committer | Jeff McAffer | 2009-01-21 19:51:48 +0000 |
commit | 94488c0fc02d4c62743bd28468817e0e0cc58e5d (patch) | |
tree | 47a015c9906494eb46bafc7ac169f587e364029e /bundles/org.eclipse.equinox.p2.metadata.repository | |
parent | c359c91046a511c2d7fd000b8ecff3da7f772b92 (diff) | |
download | rt.equinox.p2-94488c0fc02d4c62743bd28468817e0e0cc58e5d.tar.gz rt.equinox.p2-94488c0fc02d4c62743bd28468817e0e0cc58e5d.tar.xz rt.equinox.p2-94488c0fc02d4c62743bd28468817e0e0cc58e5d.zip |
Bug 261460 [director] structure LatestIUVersionCollector as a query
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.metadata.repository')
2 files changed, 28 insertions, 14 deletions
diff --git a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java index 13350f1c6..63e3808c5 100644 --- a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java +++ b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 IBM Corporation and others. + * Copyright (c) 2008, 2009 IBM Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * EclipseSource - ongoing development *******************************************************************************/ package org.eclipse.equinox.internal.p2.metadata.repository; @@ -26,8 +27,7 @@ import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository; import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager; -import org.eclipse.equinox.internal.provisional.p2.query.Collector; -import org.eclipse.equinox.internal.provisional.p2.query.Query; +import org.eclipse.equinox.internal.provisional.p2.query.*; import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.AbstractMetadataRepository; public class CompositeMetadataRepository extends AbstractMetadataRepository implements IMetadataRepository, ICompositeRepository { @@ -75,13 +75,14 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl public Collector query(Query query, Collector collector, IProgressMonitor monitor) { Iterator repositoryIterator = childrenURIs.iterator(); - SubMonitor sub = SubMonitor.convert(monitor, Messages.repo_loading, childrenURIs.size() * 100); + SubMonitor sub = SubMonitor.convert(monitor, Messages.repo_loading, 20 * childrenURIs.size()); try { + List repositories = new ArrayList(childrenURIs.size()); + SubMonitor loopMonitor = sub.newChild(10 * childrenURIs.size()); while (repositoryIterator.hasNext()) { try { //Try to load the repositories one by one URI currentURI = (URI) repositoryIterator.next(); - SubMonitor loopMonitor = sub.newChild(100); boolean currentLoaded = getManager().contains(currentURI); IMetadataRepository currentRepo = getManager().loadRepository(currentURI, null); if (!currentLoaded) { @@ -90,14 +91,20 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl //set repository to system to hide from users getManager().setRepositoryProperty(currentURI, IRepository.PROP_SYSTEM, String.valueOf(true)); } - loopMonitor.worked(50); // work 50% for the load - //get the query results. Collector should take care of duplicates - currentRepo.query(query, collector, loopMonitor.newChild(50)); + loopMonitor.worked(10); + repositories.add(currentRepo); } catch (ProvisionException e) { //repository failed to load. fall through LogHelper.log(e); } } + loopMonitor.done(); + + // Query all the all the repositories this composite repo contains + SubMonitor queryMonitor = sub.newChild(10 * childrenURIs.size()); + CompoundQueryable queryable = new CompoundQueryable((IQueryable[]) repositories.toArray(new IQueryable[repositories.size()])); + collector = queryable.query(query, collector, queryMonitor); + queryMonitor.done(); } finally { if (monitor != null) monitor.done(); diff --git a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java index 7262e4264..84a743c37 100644 --- a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java +++ b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2008 IBM Corporation and others. + * Copyright (c) 2007, 2009 IBM Corporation 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 @@ -7,19 +7,19 @@ * * Contributors: * IBM Corporation - initial API and implementation + * EclipseSource - ongoing development *******************************************************************************/ package org.eclipse.equinox.internal.p2.metadata.repository; import java.net.URI; -import java.util.Map; +import java.util.*; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.core.helpers.AbstractRepositoryManager; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository; import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager; -import org.eclipse.equinox.internal.provisional.p2.query.Collector; -import org.eclipse.equinox.internal.provisional.p2.query.Query; +import org.eclipse.equinox.internal.provisional.p2.query.*; import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.MetadataRepositoryFactory; import org.eclipse.osgi.util.NLS; @@ -107,17 +107,24 @@ public class MetadataRepositoryManager extends AbstractRepositoryManager impleme */ public Collector query(Query query, Collector collector, IProgressMonitor monitor) { URI[] locations = getKnownRepositories(REPOSITORIES_ALL); + List queryables = new ArrayList(locations.length); // use a list since we don't know exactly how many will load SubMonitor sub = SubMonitor.convert(monitor, locations.length * 10); for (int i = 0; i < locations.length; i++) { try { if (sub.isCanceled()) throw new OperationCanceledException(); - loadRepository(locations[i], sub.newChild(9)).query(query, collector, sub.newChild(1)); + queryables.add(loadRepository(locations[i], sub.newChild(9))); } catch (ProvisionException e) { //ignore this repository for this query } } - sub.done(); + try { + IQueryable[] queryablesArray = (IQueryable[]) queryables.toArray(new IQueryable[queryables.size()]); + CompoundQueryable compoundQueryable = new CompoundQueryable(queryablesArray); + compoundQueryable.query(query, collector, sub.newChild(locations.length * 1)); + } finally { + sub.done(); + } return collector; } |