Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusan Franklin2008-02-29 00:12:54 +0000
committerSusan Franklin2008-02-29 00:12:54 +0000
commit3e227ecff8d9feb2cc445402b00558677027521c (patch)
treefc763b48f2506e6563ce561231d5ccaa6fbf456e
parentff6deef9600f6e8a2611fb73ef775a35abedf112 (diff)
downloadrt.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
-rw-r--r--bundles/org.eclipse.equinox.p2.tools/META-INF/MANIFEST.MF1
-rw-r--r--bundles/org.eclipse.equinox.p2.tools/src/org/eclipse/equinox/internal/p2/tools/UpdateCheckerApplication.java3
-rw-r--r--bundles/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/AutomaticUpdateScheduler.java6
-rw-r--r--bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/p2/updatechecker/UpdateChecker.java19
-rw-r--r--bundles/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java4
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);

Back to the top