Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff McAffer2009-01-21 19:51:48 +0000
committerJeff McAffer2009-01-21 19:51:48 +0000
commit94488c0fc02d4c62743bd28468817e0e0cc58e5d (patch)
tree47a015c9906494eb46bafc7ac169f587e364029e /bundles/org.eclipse.equinox.p2.metadata.repository
parentc359c91046a511c2d7fd000b8ecff3da7f772b92 (diff)
downloadrt.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')
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java23
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java19
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;
}

Back to the top