diff options
author | Susan Franklin | 2008-02-29 00:12:54 +0000 |
---|---|---|
committer | Susan Franklin | 2008-02-29 00:12:54 +0000 |
commit | 3e227ecff8d9feb2cc445402b00558677027521c (patch) | |
tree | fc763b48f2506e6563ce561231d5ccaa6fbf456e | |
parent | ff6deef9600f6e8a2611fb73ef775a35abedf112 (diff) | |
download | rt.equinox.p2-3e227ecff8d9feb2cc445402b00558677027521c.tar.gz rt.equinox.p2-3e227ecff8d9feb2cc445402b00558677027521c.tar.xz rt.equinox.p2-3e227ecff8d9feb2cc445402b00558677027521c.zip |
Bug 220786 - [ui] UpdateChecker should let callers supply a query for what updates to check
5 files changed, 22 insertions, 11 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tools/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.tools/META-INF/MANIFEST.MF index e817b8701..f6b6e5a68 100644 --- a/bundles/org.eclipse.equinox.p2.tools/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.p2.tools/META-INF/MANIFEST.MF @@ -11,6 +11,7 @@ Import-Package: javax.servlet;version="2.4.0", org.eclipse.equinox.internal.p2.core.helpers, org.eclipse.equinox.internal.p2.updatechecker, org.eclipse.equinox.internal.provisional.p2.metadata, + org.eclipse.equinox.internal.provisional.p2.metadata.query, org.eclipse.equinox.internal.provisional.p2.updatechecker, org.osgi.framework;version="1.4.0", org.osgi.service.http;version="1.2.0" diff --git a/bundles/org.eclipse.equinox.p2.tools/src/org/eclipse/equinox/internal/p2/tools/UpdateCheckerApplication.java b/bundles/org.eclipse.equinox.p2.tools/src/org/eclipse/equinox/internal/p2/tools/UpdateCheckerApplication.java index 6b268d672..17fa88c58 100644 --- a/bundles/org.eclipse.equinox.p2.tools/src/org/eclipse/equinox/internal/p2/tools/UpdateCheckerApplication.java +++ b/bundles/org.eclipse.equinox.p2.tools/src/org/eclipse/equinox/internal/p2/tools/UpdateCheckerApplication.java @@ -16,6 +16,7 @@ import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; import org.eclipse.equinox.internal.p2.updatechecker.UpdateChecker; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.internal.provisional.p2.metadata.query.InstallableUnitQuery; import org.eclipse.equinox.internal.provisional.p2.updatechecker.*; /** @@ -67,7 +68,7 @@ public class UpdateCheckerApplication implements IApplication { if (profileId == null) { System.out.println("Must specify a profile id using -profile arg"); //$NON-NLS-1$ } else { - checker.addUpdateCheck(profileId, delay, poll, listener); + checker.addUpdateCheck(profileId, InstallableUnitQuery.ANY, delay, poll, listener); } return null; diff --git a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/AutomaticUpdateScheduler.java b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/AutomaticUpdateScheduler.java index 9451239de..ca122bbdf 100644 --- a/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/AutomaticUpdateScheduler.java +++ b/bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/AutomaticUpdateScheduler.java @@ -16,6 +16,9 @@ import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; import org.eclipse.equinox.internal.p2.ui.sdk.prefs.PreferenceConstants; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; +import org.eclipse.equinox.internal.provisional.p2.ui.model.ProfileElement; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.IQueryProvider; +import org.eclipse.equinox.internal.provisional.p2.ui.query.ElementQueryDescriptor; import org.eclipse.equinox.internal.provisional.p2.updatechecker.IUpdateChecker; import org.eclipse.equinox.internal.provisional.p2.updatechecker.IUpdateListener; import org.eclipse.ui.IStartup; @@ -97,7 +100,8 @@ public class AutomaticUpdateScheduler implements IStartup { poll = computePoll(pref); } listener = ProvSDKUIActivator.getDefault().getAutomaticUpdater(); - checker.addUpdateCheck(profileId, delay, poll, listener); + ElementQueryDescriptor descriptor = ProvSDKUIActivator.getDefault().getQueryProvider().getQueryDescriptor(new ProfileElement(profileId), IQueryProvider.INSTALLED_IUS); + checker.addUpdateCheck(profileId, descriptor.query, delay, poll, listener); } diff --git a/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/p2/updatechecker/UpdateChecker.java b/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/p2/updatechecker/UpdateChecker.java index 205fe1abc..761126214 100644 --- a/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/p2/updatechecker/UpdateChecker.java +++ b/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/p2/updatechecker/UpdateChecker.java @@ -21,6 +21,7 @@ import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.metadata.query.InstallableUnitQuery; 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.updatechecker.*; /** @@ -42,11 +43,13 @@ public class UpdateChecker implements IUpdateChecker { long poll, delay; IUpdateListener listener; String profileId; + Query query; - UpdateCheckThread(String profileId, long delay, long poll, IUpdateListener listener) { + UpdateCheckThread(String profileId, Query query, long delay, long poll, IUpdateListener listener) { this.poll = poll; this.delay = delay; this.profileId = profileId; + this.query = query; this.listener = listener; } @@ -58,7 +61,7 @@ public class UpdateChecker implements IUpdateChecker { while (!done) { log("Checking for updates for " + profileId + " at " + getTimeStamp()); //$NON-NLS-1$ //$NON-NLS-2$ - IInstallableUnit[] iusWithUpdates = checkForUpdates(profileId); + IInstallableUnit[] iusWithUpdates = checkForUpdates(profileId, query); if (iusWithUpdates.length > 0) { log("Notifying listener of available updates"); //$NON-NLS-1$ UpdateEvent event = new UpdateEvent(profileId, iusWithUpdates); @@ -84,9 +87,9 @@ public class UpdateChecker implements IUpdateChecker { /* (non-Javadoc) * @see org.eclipse.equinox.internal.provisional.p2.updatechecker.IUpdateChecker#addUpdateCheck(java.lang.String, long, long, org.eclipse.equinox.internal.provisional.p2.updatechecker.IUpdateListener) */ - public void addUpdateCheck(String profileId, long delay, long poll, IUpdateListener listener) { + public void addUpdateCheck(String profileId, Query query, long delay, long poll, IUpdateListener listener) { log("Adding update checker for " + profileId + " at " + getTimeStamp()); //$NON-NLS-1$ //$NON-NLS-2$ - UpdateCheckThread thread = new UpdateCheckThread(profileId, delay, poll, listener); + UpdateCheckThread thread = new UpdateCheckThread(profileId, query, delay, poll, listener); checkers.add(thread); thread.start(); } @@ -110,15 +113,15 @@ public class UpdateChecker implements IUpdateChecker { * Return the array of ius in the profile that have updates * available. */ - IInstallableUnit[] checkForUpdates(String profileId) { - // TODO this is naive. We get all the ius every time whereas we - // could monitor changes in the profile. + IInstallableUnit[] checkForUpdates(String profileId, Query query) { IProfile profile = getProfileRegistry().getProfile(profileId); ArrayList iusWithUpdates = new ArrayList(); if (profile == null) return new IInstallableUnit[0]; ProvisioningContext context = new ProvisioningContext(getAvailableRepositories()); - Iterator iter = profile.query(InstallableUnitQuery.ANY, new Collector(), null).iterator(); + if (query == null) + query = InstallableUnitQuery.ANY; + Iterator iter = profile.query(query, new Collector(), null).iterator(); while (iter.hasNext()) { IInstallableUnit iu = (IInstallableUnit) iter.next(); IInstallableUnit[] replacements = getPlanner().updatesFor(iu, context, null); diff --git a/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java b/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java index 335a82b93..a343d7858 100644 --- a/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java +++ b/bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.equinox.internal.provisional.p2.updatechecker; +import org.eclipse.equinox.internal.provisional.p2.query.Query; + /** * An UpdateChecker periodically polls for updates to specified profiles and * informs listeners if updates are available. Listeners may then determine @@ -19,7 +21,7 @@ public interface IUpdateChecker { public static final String SERVICE_NAME = IUpdateChecker.class.getName(); public static long ONE_TIME_CHECK = -1L; - public abstract void addUpdateCheck(String profileId, long delay, long poll, IUpdateListener listener); + public abstract void addUpdateCheck(String profileId, Query iusToCheckQuery, long delay, long poll, IUpdateListener listener); public abstract void removeUpdateCheck(IUpdateListener listener); |