Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java')
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java33
1 files changed, 28 insertions, 5 deletions
diff --git a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java
index 63d548798..0ba7cd271 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java
@@ -12,13 +12,17 @@
package org.eclipse.equinox.internal.p2.metadata.repository;
import java.net.URI;
+import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.URIUtil;
import org.eclipse.equinox.internal.p2.metadata.IUMap;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
+import org.eclipse.equinox.internal.p2.metadata.index.CapabilityIndex;
+import org.eclipse.equinox.internal.p2.metadata.index.IdIndex;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.query.InstallableUnitQuery;
+import org.eclipse.equinox.p2.metadata.index.*;
import org.eclipse.equinox.p2.query.IQuery;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.repository.metadata.spi.AbstractMetadataRepository;
@@ -26,7 +30,7 @@ import org.eclipse.equinox.p2.repository.metadata.spi.AbstractMetadataRepository
/**
* A metadata repository backed by an arbitrary URL.
*/
-public class URLMetadataRepository extends AbstractMetadataRepository {
+public class URLMetadataRepository extends AbstractMetadataRepository implements IIndexProvider<IInstallableUnit> {
public static final String CONTENT_FILENAME = "content"; //$NON-NLS-1$
public static final String XML_EXTENSION = ".xml"; //$NON-NLS-1$
@@ -35,6 +39,8 @@ public class URLMetadataRepository extends AbstractMetadataRepository {
transient protected URI content;
protected IUMap units = new IUMap();
+ private IIndex<IInstallableUnit> idIndex;
+ private IIndex<IInstallableUnit> capabilityIndex;
public static URI getActualLocation(URI base) {
return getActualLocation(base, XML_EXTENSION);
@@ -82,8 +88,25 @@ public class URLMetadataRepository extends AbstractMetadataRepository {
}
public synchronized IQueryResult<IInstallableUnit> query(IQuery<IInstallableUnit> query, IProgressMonitor monitor) {
- if (query instanceof InstallableUnitQuery)
- return units.query((InstallableUnitQuery) query);
- return query.perform(units.iterator());
+ return (query instanceof IQueryWithIndex<?>) ? ((IQueryWithIndex<IInstallableUnit>) query).perform(this) : query.perform(units.iterator());
+ }
+
+ public synchronized IIndex<IInstallableUnit> getIndex(String memberName) {
+ if (InstallableUnit.MEMBER_ID.equals(memberName)) {
+ if (idIndex == null)
+ idIndex = new IdIndex(units);
+ return idIndex;
+ }
+
+ if (InstallableUnit.MEMBER_PROVIDED_CAPABILITIES.equals(memberName)) {
+ if (capabilityIndex == null)
+ capabilityIndex = new CapabilityIndex(units.iterator());
+ return capabilityIndex;
+ }
+ return null;
+ }
+
+ public Iterator<IInstallableUnit> everything() {
+ return units.iterator();
}
}

Back to the top