diff options
author | Susan Franklin | 2010-04-21 23:28:06 +0000 |
---|---|---|
committer | Susan Franklin | 2010-04-21 23:28:06 +0000 |
commit | d9adc54a78d5c9530414397c6c6844fa735ac16b (patch) | |
tree | af9ab58fb24b318fa8ffad4fec24ed28d525eae4 /bundles/org.eclipse.equinox.p2.ui | |
parent | 526aefb4d21f0d62a1bb66f3bf44bec3b9a1ecd9 (diff) | |
download | rt.equinox.p2-d9adc54a78d5c9530414397c6c6844fa735ac16b.tar.gz rt.equinox.p2-d9adc54a78d5c9530414397c6c6844fa735ac16b.tar.xz rt.equinox.p2-d9adc54a78d5c9530414397c6c6844fa735ac16b.zip |
Bug 278191 - [ui] Filtering of artifact repository does not work for non colocated repos
Bug 222838 - [ui] ability to add a metadata repo without a colocated artifact repo
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui')
-rw-r--r-- | bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java index 90035f8b3..bf441018a 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java @@ -20,10 +20,11 @@ import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.*; import org.eclipse.equinox.internal.p2.ui.query.IUViewQueryContext; import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent; +import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.engine.ProvisioningContext; import org.eclipse.equinox.p2.operations.RepositoryTracker; -import org.eclipse.equinox.p2.repository.IRepository; -import org.eclipse.equinox.p2.repository.IRepositoryManager; +import org.eclipse.equinox.p2.repository.*; +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.action.Action; @@ -570,16 +571,44 @@ public class RepositorySelectionGroup { if (locals.length > 0 && siteSel == repoCombo.getItemCount() - 1) { ProvisioningContext context = new ProvisioningContext(ui.getSession().getProvisioningAgent()); context.setMetadataRepositories(locals); - context.setArtifactRepositories(locals); + setArtifactRepositories(context, locals); return context; } // A single site is selected. ProvisioningContext context = new ProvisioningContext(ui.getSession().getProvisioningAgent()); context.setMetadataRepositories(new URI[] {comboRepos[siteSel]}); - context.setArtifactRepositories(new URI[] {comboRepos[siteSel]}); + setArtifactRepositories(context, (new URI[] {comboRepos[siteSel]})); return context; } + private void setArtifactRepositories(ProvisioningContext context, URI[] metadataRepos) { + ArrayList<URI> list = new ArrayList<URI>(metadataRepos.length); + IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ui.getSession().getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME); + if (manager == null) + return; + + for (int i = 0; i < metadataRepos.length; i++) { + // first assume a colocated artifact repository + list.add(metadataRepos[i]); + // Load the repository so that we can get its references. + // Since this method is only called when the repositories are selected, we can safely + // assume that the repo has already been loaded (so this is fast). + IMetadataRepository repository; + try { + repository = manager.loadRepository(metadataRepos[i], new NullProgressMonitor()); + Collection<IRepositoryReference> references = repository.getReferences(); + for (IRepositoryReference ref : references) { + if (ref.getType() == IRepository.TYPE_ARTIFACT && (ref.getOptions() | IRepository.ENABLED) != 0) { + list.add(ref.getLocation()); + } + } + } catch (ProvisionException e) { + // ignore, this will have been reported elsewhere. + } + } + context.setArtifactRepositories(list.toArray(new URI[list.size()])); + } + void repoComboSelectionChanged() { int repoChoice = -1; URI repoLocation = null; |