Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusan Franklin2009-03-05 21:34:40 +0000
committerSusan Franklin2009-03-05 21:34:40 +0000
commit057d4fe69f11271aa6c5a4b3bf5bd6d8a4637a89 (patch)
tree7ca489c937cdcfd51f0f1db2c3ab114c1fabe620 /bundles/org.eclipse.equinox.p2.ui
parent61c50236855639c751cff1d5413cc662a52f25bc (diff)
downloadrt.equinox.p2-057d4fe69f11271aa6c5a4b3bf5bd6d8a4637a89.tar.gz
rt.equinox.p2-057d4fe69f11271aa6c5a4b3bf5bd6d8a4637a89.tar.xz
rt.equinox.p2-057d4fe69f11271aa6c5a4b3bf5bd6d8a4637a89.zip
Bug 260950 - [ui] Remove the custom collectors from the UI
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui')
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementQueryDescriptor.java10
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementWrapper.java57
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableArtifactRepositoryManager.java12
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableMetadataRepositoryManager.java47
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableRepositoryManager.java47
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java2
6 files changed, 116 insertions, 59 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementQueryDescriptor.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementQueryDescriptor.java
index 9e123830b..d73c2a2c0 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementQueryDescriptor.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementQueryDescriptor.java
@@ -27,7 +27,7 @@ public class ElementQueryDescriptor {
private Query query;
private Collector collector;
private IQueryable queryable;
- private ElementWrapper transformer;
+ private ElementWrapper wrapper;
/**
* Creates an ElementQueryDescriptor to represent a Query, its collector the queryable
@@ -41,11 +41,11 @@ public class ElementQueryDescriptor {
* Creates an ElementQueryDescriptor to represent a Query, its collector the queryable
* on which it will run, and the transformer used to transform the results.
*/
- public ElementQueryDescriptor(IQueryable queryable, Query query, Collector collector, ElementWrapper transformer) {
+ public ElementQueryDescriptor(IQueryable queryable, Query query, Collector collector, ElementWrapper wrapper) {
this.query = query;
this.collector = collector;
this.queryable = queryable;
- this.transformer = transformer;
+ this.wrapper = wrapper;
}
public boolean isComplete() {
@@ -58,8 +58,8 @@ public class ElementQueryDescriptor {
*/
public Collection performQuery(IProgressMonitor monitor) {
Collector results = this.queryable.query(this.query, this.collector, monitor);
- if (transformer != null)
- return transformer.getElements(results);
+ if (wrapper != null)
+ return wrapper.getElements(results);
return results.toCollection();
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementWrapper.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementWrapper.java
new file mode 100644
index 000000000..194148ab5
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ElementWrapper.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+* Copyright (c) 2009 EclipseSource 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 http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* EclipseSource - initial API and implementation
+* IBM Corporation - ongoing development
+******************************************************************************/
+package org.eclipse.equinox.internal.provisional.p2.ui;
+
+import java.util.*;
+import org.eclipse.equinox.internal.provisional.p2.query.Collector;
+
+/**
+ * Wraps query results inside corresponding UI elements
+ */
+public abstract class ElementWrapper {
+
+ private Collection collection = null;
+
+ /**
+ * Transforms a collector returned by a query to a collection
+ * of UI elements
+ */
+ public Collection getElements(Collector collector) {
+ collection = new ArrayList(collector.size());
+ Iterator iter = collector.iterator();
+ while (iter.hasNext()) {
+ Object o = iter.next();
+ if (shouldWrap(o))
+ collection.add(wrap(o));
+ }
+ return getCollection();
+ }
+
+ /**
+ * Gets the collection where the elements are being stored.
+ */
+ protected Collection getCollection() {
+ return collection == null ? Collections.EMPTY_LIST : collection;
+ }
+
+ /**
+ * Determines if this object should be accepted and wrapped
+ * by a UI element.
+ */
+ protected boolean shouldWrap(Object o) {
+ return true;
+ }
+
+ /**
+ * Wraps a single element of the query result inside a UI element.
+ */
+ protected abstract Object wrap(Object item);
+}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableArtifactRepositoryManager.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableArtifactRepositoryManager.java
index 112888a34..96b31b3a8 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableArtifactRepositoryManager.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableArtifactRepositoryManager.java
@@ -14,6 +14,7 @@ package org.eclipse.equinox.internal.provisional.p2.ui;
import java.net.URI;
import java.util.Arrays;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepositoryManager;
@@ -48,9 +49,14 @@ public class QueryableArtifactRepositoryManager extends QueryableRepositoryManag
return null;
}
- protected Collector query(URI uri, Query query, Collector collector, IProgressMonitor monitor) {
- // artifact repositories do not support querying, so we always use the location.
- query.perform(Arrays.asList(new URI[] {uri}).iterator(), collector);
+ protected Collector query(URI[] uris, Query query, Collector collector, IProgressMonitor monitor) {
+ SubMonitor sub = SubMonitor.convert(monitor, uris.length * 100);
+ for (int i = 0; i < uris.length; i++) {
+ if (sub.isCanceled())
+ return collector;
+ // artifact repositories do not support querying, so we always use the location.
+ query.perform(Arrays.asList(uris).iterator(), collector);
+ }
return collector;
}
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableMetadataRepositoryManager.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableMetadataRepositoryManager.java
index 74b79dcaf..24c076ac2 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableMetadataRepositoryManager.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableMetadataRepositoryManager.java
@@ -11,6 +11,7 @@
package org.eclipse.equinox.internal.provisional.p2.ui;
import java.net.URI;
+import java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
@@ -20,10 +21,8 @@ import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
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.core.repository.IRepositoryManager;
-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.p2.ui.policy.IUViewQueryContext;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.statushandlers.StatusManager;
@@ -61,28 +60,34 @@ public class QueryableMetadataRepositoryManager extends QueryableRepositoryManag
return null;
}
- protected Collector query(URI uri, Query query, Collector collector, IProgressMonitor monitor) {
- SubMonitor sub = SubMonitor.convert(monitor, NLS.bind(ProvUIMessages.QueryableMetadataRepositoryManager_RepositoryQueryProgress, uri.toString()), 200);
+ protected Collector query(URI uris[], Query query, Collector collector, IProgressMonitor monitor) {
if (query instanceof RepositoryLocationQuery) {
- query.perform(Arrays.asList(new URI[] {uri}).iterator(), collector);
- sub.worked(2);
+ query.perform(Arrays.asList(uris).iterator(), collector);
+ monitor.done();
} else {
- IRepository repo = null;
- try {
- repo = loadRepository(getRepositoryManager(), uri, sub.newChild(100));
- } catch (ProvisionException e) {
- if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
- handleNotFound(e, uri);
- else
- ProvUI.handleException(e, NLS.bind(ProvUIMessages.ProvisioningUtil_LoadRepositoryFailure, uri), StatusManager.LOG);
- } catch (OperationCanceledException e) {
- // user has canceled
- repo = null;
+ SubMonitor sub = SubMonitor.convert(monitor, (uris.length + 1) * 100);
+ ArrayList loadedRepos = new ArrayList(uris.length);
+ for (int i = 0; i < uris.length; i++) {
+ IRepository repo = null;
+ try {
+ repo = loadRepository(getRepositoryManager(), uris[i], sub.newChild(100));
+ } catch (ProvisionException e) {
+ if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
+ handleNotFound(e, uris[i]);
+ else
+ ProvUI.handleException(e, NLS.bind(ProvUIMessages.ProvisioningUtil_LoadRepositoryFailure, uris[i]), StatusManager.LOG);
+ } catch (OperationCanceledException e) {
+ // user has canceled
+ repo = null;
+ }
+ if (repo != null)
+ loadedRepos.add(repo);
+ }
+ if (loadedRepos.size() > 0) {
+ IQueryable[] queryables = (IQueryable[]) loadedRepos.toArray(new IQueryable[loadedRepos.size()]);
+ collector = new CompoundQueryable(queryables).query(query, collector, sub.newChild(100));
}
- if (repo instanceof IMetadataRepository)
- ((IMetadataRepository) repo).query(query, collector, sub.newChild(100));
}
- monitor.done();
return collector;
}
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableRepositoryManager.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableRepositoryManager.java
index 2ebf9a74f..0545a5a28 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableRepositoryManager.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/QueryableRepositoryManager.java
@@ -76,15 +76,9 @@ public abstract class QueryableRepositoryManager implements IQueryable {
ProvUI.reportStatus(new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, ProvUIMessages.ProvisioningUtil_NoRepositoryManager), StatusManager.SHOW | StatusManager.LOG);
return result;
}
- Collection repoLocations = getRepoLocations(manager);
- Iterator iterator = repoLocations.iterator();
- SubMonitor sub = SubMonitor.convert(monitor, repoLocations.size() * 100);
- while (iterator.hasNext()) {
- if (sub.isCanceled())
- return result;
- URI location = (URI) iterator.next();
- query(location, query, result, sub.newChild(100));
- }
+ if (monitor == null)
+ monitor = new NullProgressMonitor();
+ query(getRepoLocations(manager), query, result, monitor);
reportAccumulatedStatus();
return result;
}
@@ -102,37 +96,35 @@ public abstract class QueryableRepositoryManager implements IQueryable {
ProvUI.reportStatus(new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, ProvUIMessages.ProvisioningUtil_NoRepositoryManager), StatusManager.SHOW | StatusManager.LOG);
return;
}
- Collection repoLocations = getRepoLocations(manager);
- Iterator iter = repoLocations.iterator();
- SubMonitor sub = SubMonitor.convert(monitor, repoLocations.size() * 100);
+ URI[] repoLocations = getRepoLocations(manager);
+ SubMonitor sub = SubMonitor.convert(monitor, repoLocations.length * 100);
if (sub.isCanceled())
return;
- while (iter.hasNext()) {
+ for (int i = 0; i < repoLocations.length; i++) {
if (sub.isCanceled())
return;
- URI location = (URI) iter.next();
try {
- loadRepository(manager, location, sub.newChild(100));
+ loadRepository(manager, repoLocations[i], sub.newChild(100));
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
- handleNotFound(e, location);
+ handleNotFound(e, repoLocations[i]);
else
- ProvUI.handleException(e, NLS.bind(ProvUIMessages.ProvisioningUtil_LoadRepositoryFailure, location), StatusManager.LOG);
+ ProvUI.handleException(e, NLS.bind(ProvUIMessages.ProvisioningUtil_LoadRepositoryFailure, repoLocations[i]), StatusManager.LOG);
}
}
}
/**
- * Returns a Collection<URI> of repository locations.
+ * Returns an array of repository locations.
*/
- private Collection getRepoLocations(IRepositoryManager manager) {
+ private URI[] getRepoLocations(IRepositoryManager manager) {
Set locations = new HashSet();
int flags = queryContext.getMetadataRepositoryFlags();
locations.addAll(Arrays.asList(manager.getKnownRepositories(flags)));
if (includeDisabledRepos) {
locations.addAll(Arrays.asList(manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_DISABLED | flags)));
}
- return locations;
+ return (URI[]) locations.toArray(new URI[locations.size()]);
}
protected void handleNotFound(ProvisionException e, URI missingRepo) {
@@ -187,14 +179,11 @@ public abstract class QueryableRepositoryManager implements IQueryable {
IRepositoryManager mgr = getRepositoryManager();
if (mgr == null)
return false;
- Iterator repoURIs = getRepoLocations(mgr).iterator();
- while (repoURIs.hasNext()) {
- Object location = repoURIs.next();
- if (location instanceof URI) {
- IRepository repo = getRepository(mgr, (URI) location);
- if (repo == null)
- return false;
- }
+ URI[] repoURIs = getRepoLocations(mgr);
+ for (int i = 0; i < repoURIs.length; i++) {
+ IRepository repo = getRepository(mgr, repoURIs[i]);
+ if (repo == null)
+ return false;
}
return true;
}
@@ -241,7 +230,7 @@ public abstract class QueryableRepositoryManager implements IQueryable {
*/
protected abstract IRepository doLoadRepository(IRepositoryManager manager, URI location, IProgressMonitor monitor) throws ProvisionException;
- protected abstract Collector query(URI uri, Query query, Collector collector, IProgressMonitor monitor);
+ protected abstract Collector query(URI[] uris, Query query, Collector collector, IProgressMonitor monitor);
public void setQueryContext(IUViewQueryContext queryContext) {
this.queryContext = queryContext;
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java
index 4af08d6f0..a7c9cf89b 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/actions/UpdateAction.java
@@ -67,7 +67,7 @@ public class UpdateAction extends ExistingIUInProfileAction {
SubMonitor sub = SubMonitor.convert(monitor, ProvUIMessages.ProfileChangeRequestBuildingRequest, ius.length);
for (int i = 0; i < ius.length; i++) {
ElementQueryDescriptor descriptor = getQueryProvider().getQueryDescriptor(new Updates(targetProfileId, new IInstallableUnit[] {ius[i]}));
- Iterator iter = descriptor.queryable.query(descriptor.query, descriptor.collector, sub).iterator();
+ Iterator iter = descriptor.performQuery(sub).iterator();
if (iter.hasNext())
toBeUpdated.add(ius[i]);
ArrayList currentReplacements = new ArrayList();

Back to the top