diff options
12 files changed, 105 insertions, 56 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java index 9e1ae8a0f..7bdcdba6f 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java @@ -38,7 +38,7 @@ public class ArtifactRepositoriesView extends RepositoriesView { } protected Object getInput() { - return new ArtifactRepositories(); + return new ArtifactRepositories(ProvAdminUIActivator.getDefault().getPolicy()); } protected String getAddCommandLabel() { diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java index 1db355cb3..f22aa63ac 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java @@ -183,7 +183,7 @@ public class ProfilesView extends ProvView { } protected Object getInput() { - return new Profiles(); + return new Profiles(ProvAdminUIActivator.getDefault().getPolicy()); } ProfileChooser getProfileChooser() { diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java index 8997efba8..c928d9a60 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java @@ -129,7 +129,7 @@ public class ProvAdminUIActivator extends AbstractUIPlugin { queryContext.setMetadataRepositoryFlags(IRepositoryManager.REPOSITORIES_ALL); } queryContext.setShowLatestVersionsOnly(getPreferenceStore().getBoolean(PreferenceConstants.PREF_COLLAPSE_IU_VERSIONS)); - + queryContext.setUseCategories(getPreferenceStore().getBoolean(PreferenceConstants.PREF_USE_CATEGORIES)); } void initializePolicy() { @@ -150,7 +150,7 @@ public class ProvAdminUIActivator extends AbstractUIPlugin { // TODO would be nice if the profile chooser dialog let you // create a new profile ProvElementContentProvider provider = new ProvElementContentProvider(); - if (provider.getElements(new Profiles()).length == 0) { + if (provider.getElements(new Profiles(getPolicy())).length == 0) { AddProfileDialog dialog = new AddProfileDialog(shell, new String[0]); if (dialog.open() == Window.OK) { return dialog.getAddedProfileId(); @@ -161,7 +161,7 @@ public class ProvAdminUIActivator extends AbstractUIPlugin { ListDialog dialog = new ListDialog(shell); dialog.setTitle(ProvAdminUIMessages.MetadataRepositoriesView_ChooseProfileDialogTitle); dialog.setLabelProvider(new ProvElementLabelProvider()); - dialog.setInput(new Profiles()); + dialog.setInput(new Profiles(getPolicy())); dialog.setContentProvider(provider); dialog.open(); Object[] result = dialog.getResult(); diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java index 156d2b79e..d8310405c 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java @@ -125,7 +125,7 @@ abstract class ProvView extends ViewPart { undoRedoGroup = new UndoRedoActionGroup(getSite(), ProvUI.getProvisioningUndoContext(), true); refreshAction = new RefreshAction(viewer, viewer.getControl()) { protected void refresh() { - refreshAll(); + refreshAll(true); } }; refreshAction.setToolTipText(ProvAdminUIMessages.ProvView_RefreshCommandTooltip); @@ -157,7 +157,7 @@ abstract class ProvView extends ViewPart { public void propertyChange(PropertyChangeEvent event) { if (getVisualProperties().contains(event.getProperty())) { ProvAdminUIActivator.getDefault().initializePolicy(); - ProvView.this.refreshAll(); + ProvView.this.refreshAll(false); } } @@ -223,9 +223,10 @@ abstract class ProvView extends ViewPart { return list; } - final void refreshAll() { + final void refreshAll(boolean refreshModel) { // Refresh the underlying elements - refreshUnderlyingModel(); + if (refreshModel) + refreshUnderlyingModel(); // We then reset the input to ensure that anything the content providers // are caching gets reset also. The net effect is that everything // will get queried again. diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java index 23766c54a..f01d7114a 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java @@ -82,7 +82,11 @@ abstract class RepositoriesView extends ProvView { protected void addListeners() { super.addListeners(); - listener = new StructuredViewerProvisioningListener(viewer, getListenerEventTypes()); + listener = new StructuredViewerProvisioningListener(viewer, getListenerEventTypes()) { + protected void refreshAll() { + RepositoriesView.this.refreshAll(false); + } + }; ProvUI.addProvisioningListener(listener); } @@ -183,7 +187,6 @@ abstract class RepositoriesView extends ProvView { protected List getVisualProperties() { List list = super.getVisualProperties(); list.add(PreferenceConstants.PREF_HIDE_SYSTEM_REPOS); - list.add(PreferenceConstants.PREF_COLLAPSE_IU_VERSIONS); return list; } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/DefaultQueryProvider.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/DefaultQueryProvider.java index 011ad8d1e..e5c7dc75a 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/DefaultQueryProvider.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/DefaultQueryProvider.java @@ -11,7 +11,6 @@ package org.eclipse.equinox.internal.p2.ui; import java.net.URI; -import java.net.URL; import org.eclipse.equinox.internal.p2.ui.model.*; import org.eclipse.equinox.internal.p2.ui.query.*; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; @@ -63,7 +62,7 @@ public class DefaultQueryProvider extends QueryProvider { queryable = new QueryableArtifactRepositoryManager(context.getArtifactRepositoryFlags()); return new ElementQueryDescriptor(queryable, null, new Collector() { public boolean accept(Object object) { - if (object instanceof URL) + if (object instanceof URI) return super.accept(new ArtifactRepositoryElement(element, (URI) object)); return true; } @@ -77,6 +76,7 @@ public class DefaultQueryProvider extends QueryProvider { ElementQueryDescriptor installedQueryDescriptor = null; boolean showLatest = context.getShowLatestVersionsOnly(); boolean hideInstalled = context.getHideAlreadyInstalled(); + boolean useCategories = context.getUseCategories(); String profileId = context.getInstalledProfileId(); if (hideInstalled && profileId != null) { try { @@ -101,18 +101,16 @@ public class DefaultQueryProvider extends QueryProvider { // Showing child IU's of a group of repositories, or of a single repository if (element instanceof MetadataRepositories || element instanceof MetadataRepositoryElement) { - if (context.getViewType() == IUViewQueryContext.AVAILABLE_VIEW_FLAT) { + if (context.getViewType() == IUViewQueryContext.AVAILABLE_VIEW_FLAT || !context.getUseCategories()) { AvailableIUCollector collector; if (showLatest) - collector = new LatestIUVersionElementCollector(queryable, element, true); + collector = new LatestIUVersionElementCollector(queryable, element, false); else - collector = new AvailableIUCollector(queryable, element, true); + collector = new AvailableIUCollector(queryable, element, false); if (hideInstalled && installedQueryDescriptor != null) collector.hideInstalledIUs(installedQueryDescriptor); return new ElementQueryDescriptor(queryable, topLevelQuery, collector); } - - // Assume category view if it wasn't flat. // Installed content not a concern for collecting categories return new ElementQueryDescriptor(queryable, categoryQuery, new CategoryElementCollector(queryable, element, true)); } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java new file mode 100644 index 000000000..3332340b6 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2008 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.internal.p2.ui.model; + +import org.eclipse.equinox.internal.provisional.p2.ui.policy.IUViewQueryContext; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; + +/** + * Element class that represents the root of a viewer. It can be configured + * with its own policy and query context. + * + * @since 3.5 + * + */ +public abstract class RootElement extends RemoteQueriedElement { + + private IUViewQueryContext queryContext; + private Policy policy; + + public RootElement(Policy policy) { + this(policy.getQueryContext(), policy); + } + + public RootElement(IUViewQueryContext queryContext, Policy policy) { + super(null); + this.queryContext = queryContext; + this.policy = policy; + } + + /** + * Set the query context that is used when querying the receiver. + * + * @param context the query context to use + */ + public void setQueryContext(IUViewQueryContext context) { + queryContext = context; + } + + public IUViewQueryContext getQueryContext() { + return queryContext; + } + + public Policy getPolicy() { + return policy; + } +} 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 9dbd1b3db..f3bb80943 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 @@ -37,17 +37,17 @@ public class QueryableArtifactRepositoryManager implements IQueryable { /** * Iterates over the artifact repositories configured in this queryable. - * If a query is specified, the query is run on each URL, passing any URLs that satisfy the - * query to the provided collector. If no query is specified, all repository URLs iterated are passed + * If a query is specified, the query is run on each URI, passing any URIs that satisfy the + * query to the provided collector. If no query is specified, all repository URIs iterated are passed * to the collector. * <p> * This method is long-running; progress and cancellation are provided * by the given progress monitor. * </p> * - * @param query The query to perform on the URLs, or <code>null</code> if all URLs should + * @param query The query to perform on the URIs, or <code>null</code> if all URIs should * be accepted. - * @param result Collects the repository URLs + * @param result Collects the repository URIs * @param monitor a progress monitor, or <code>null</code> if progress * reporting is not desired * @return The collector argument diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/ArtifactRepositories.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/ArtifactRepositories.java index 194b12401..da28e53f6 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/ArtifactRepositories.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/ArtifactRepositories.java @@ -11,8 +11,9 @@ package org.eclipse.equinox.internal.provisional.p2.ui.model; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.RemoteQueriedElement; +import org.eclipse.equinox.internal.p2.ui.model.RootElement; import org.eclipse.equinox.internal.provisional.p2.ui.ElementQueryDescriptor; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; import org.eclipse.equinox.internal.provisional.p2.ui.policy.QueryProvider; /** @@ -23,10 +24,10 @@ import org.eclipse.equinox.internal.provisional.p2.ui.policy.QueryProvider; * @since 3.4 * */ -public class ArtifactRepositories extends RemoteQueriedElement { +public class ArtifactRepositories extends RootElement { - public ArtifactRepositories() { - super(null); + public ArtifactRepositories(Policy policy) { + super(policy); } protected int getDefaultQueryType() { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/MetadataRepositories.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/MetadataRepositories.java index b1f440007..01732ba3d 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/MetadataRepositories.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/MetadataRepositories.java @@ -11,7 +11,7 @@ package org.eclipse.equinox.internal.provisional.p2.ui.model; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.RemoteQueriedElement; +import org.eclipse.equinox.internal.p2.ui.model.RootElement; import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepositoryManager; import org.eclipse.equinox.internal.provisional.p2.ui.ElementQueryDescriptor; import org.eclipse.equinox.internal.provisional.p2.ui.QueryableMetadataRepositoryManager; @@ -27,21 +27,17 @@ import org.eclipse.equinox.internal.provisional.p2.ui.policy.*; * @since 3.4 * */ -public class MetadataRepositories extends RemoteQueriedElement { +public class MetadataRepositories extends RootElement { private boolean includeDisabled = false; private int repoFlags = IRepositoryManager.REPOSITORIES_ALL; - private IUViewQueryContext queryContext; - private Policy policy; public MetadataRepositories(Policy policy) { this(policy.getQueryContext(), policy, null); } public MetadataRepositories(IUViewQueryContext queryContext, Policy policy, QueryableMetadataRepositoryManager queryable) { - super(null); - this.queryContext = queryContext; - this.policy = policy; + super(queryContext, policy); this.queryable = queryable; } @@ -91,23 +87,6 @@ public class MetadataRepositories extends RemoteQueriedElement { this.repoFlags = flags; } - /** - * Set the query context that is used when querying the receiver. - * - * @param context the query context to use - */ - public void setQueryContext(IUViewQueryContext context) { - queryContext = context; - } - - public IUViewQueryContext getQueryContext() { - return queryContext; - } - - public Policy getPolicy() { - return policy; - } - /* * Overridden to check the query context. We might * be showing repositories, or we might be flattening the @@ -116,9 +95,9 @@ public class MetadataRepositories extends RemoteQueriedElement { * @see org.eclipse.equinox.internal.provisional.p2.ui.query.QueriedElement#getQueryType() */ public int getQueryType() { - if (queryContext == null) + if (getQueryContext() == null) return getDefaultQueryType(); - return queryContext.getQueryType(); + return getQueryContext().getQueryType(); } protected int getDefaultQueryType() { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/Profiles.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/Profiles.java index d00d1dddc..dc93702e1 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/Profiles.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/model/Profiles.java @@ -11,7 +11,8 @@ package org.eclipse.equinox.internal.provisional.p2.ui.model; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.model.QueriedElement; +import org.eclipse.equinox.internal.p2.ui.model.RootElement; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; import org.eclipse.equinox.internal.provisional.p2.ui.policy.QueryProvider; /** @@ -22,10 +23,10 @@ import org.eclipse.equinox.internal.provisional.p2.ui.policy.QueryProvider; * @since 3.4 * */ -public class Profiles extends QueriedElement { +public class Profiles extends RootElement { - public Profiles() { - super(null); + public Profiles(Policy policy) { + super(policy); } /* diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/IUViewQueryContext.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/IUViewQueryContext.java index 6cfd2c1c8..c5da438d9 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/IUViewQueryContext.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/IUViewQueryContext.java @@ -37,6 +37,10 @@ public class IUViewQueryContext { // Whether to hide things that are already installed // Defaults to false since we wouldn't know what profile to use private boolean hideAlreadyInstalled = false; + // Whether to group items in repos by category. Note this only makes sense when the + // view type is AVAILABLE_VIEW_BY_REPO + private boolean useCategories = true; + private String profileId = null; // What repositories to show private int artifactRepositoryFlags = IRepositoryManager.REPOSITORIES_NON_SYSTEM; @@ -122,4 +126,12 @@ public class IUViewQueryContext { public void setVisibleInstalledIUProperty(String propertyName) { visibleInstalledIUProperty = propertyName; } + + public void setUseCategories(boolean useCategories) { + this.useCategories = useCategories; + } + + public boolean getUseCategories() { + return useCategories; + } } |