Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rapicault2010-01-13 17:29:41 +0000
committerPascal Rapicault2010-01-13 17:29:41 +0000
commit18189f0d42f7375660762dc6c885cf31683ae562 (patch)
tree17775d847bed9a33f3c68b74db2df75a2139c0bc /examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate
parentc363f2984a09b73c422e38f4556fd3b23eafe958 (diff)
downloadrt.equinox.p2-18189f0d42f7375660762dc6c885cf31683ae562.tar.gz
rt.equinox.p2-18189f0d42f7375660762dc6c885cf31683ae562.tar.xz
rt.equinox.p2-18189f0d42f7375660762dc6c885cf31683ae562.zip
Merging api branch back to HEADv20100113
Diffstat (limited to 'examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate')
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/.settings/org.eclipse.jdt.core.prefs2
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/META-INF/MANIFEST.MF12
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/ApplicationWorkbenchAdvisor.java57
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/P2Util.java197
4 files changed, 72 insertions, 196 deletions
diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/.settings/org.eclipse.jdt.core.prefs
index 337c4649f..92bb3f369 100644
--- a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/.settings/org.eclipse.jdt.core.prefs
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,7 @@
#Mon Mar 16 12:12:08 PDT 2009
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/META-INF/MANIFEST.MF b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/META-INF/MANIFEST.MF
index 8f4e5b0d1..6ee61c3c6 100644
--- a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/META-INF/MANIFEST.MF
@@ -6,15 +6,9 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Activator: org.eclipse.equinox.p2.examples.rcp.prestartupdate.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
- org.eclipse.equinox.p2.metadata;bundle-version="1.0.0",
- org.eclipse.equinox.p2.metadata.repository;bundle-version="1.0.0",
- org.eclipse.equinox.p2.artifact.repository;bundle-version="1.0.0",
- org.eclipse.equinox.p2.repository;bundle-version="1.0.0",
- org.eclipse.equinox.p2.extensionlocation;bundle-version="1.0.100",
- org.eclipse.equinox.p2.updatesite;bundle-version="1.0.0",
- org.eclipse.equinox.p2.director;bundle-version="1.0.100",
- org.eclipse.equinox.p2.engine;bundle-version="1.0.100",
- org.eclipse.equinox.p2.core;bundle-version="1.0.100",
+ org.eclipse.equinox.p2.core,
+ org.eclipse.equinox.p2.metadata,
+ org.eclipse.equinox.p2.operations,
org.eclipse.ecf;bundle-version="3.0.0",
org.eclipse.ecf.filetransfer;bundle-version="3.0.0",
org.eclipse.ecf.identity;bundle-version="3.0.0",
diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/ApplicationWorkbenchAdvisor.java b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/ApplicationWorkbenchAdvisor.java
index c5f04b9b9..2ebb4ff39 100644
--- a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/ApplicationWorkbenchAdvisor.java
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/ApplicationWorkbenchAdvisor.java
@@ -1,33 +1,52 @@
package org.eclipse.equinox.p2.examples.rcp.prestartupdate;
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
/**
- * This workbench advisor creates the window advisor, and specifies
- * the perspective id for the initial window.
+ * This workbench advisor creates the window advisor, and specifies the
+ * perspective id for the initial window.
*/
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
- public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
- return new ApplicationWorkbenchWindowAdvisor(configurer);
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.ui.application.WorkbenchAdvisor#preStartup()
- */
- public void preStartup() {
- // XXX check for updates before starting up.
- // If an update is performed, restart.
- if (P2Util.checkForUpdates())
- PlatformUI.getWorkbench().restart();
- }
-
+ public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
+ IWorkbenchWindowConfigurer configurer) {
+ return new ApplicationWorkbenchWindowAdvisor(configurer);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.application.WorkbenchAdvisor#preStartup()
+ */
+ public void preStartup() {
+ // XXX check for updates before starting up.
+ // If an update is performed, restart.
+
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ if (P2Util.checkForUpdates(monitor))
+ PlatformUI.getWorkbench().restart();
+ }
+ };
+ try {
+ new ProgressMonitorDialog(null).run(true, true, runnable);
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ }
+ }
+
public String getInitialWindowPerspectiveId() {
return Perspective.ID;
- }
-
+ }
+
}
diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/P2Util.java b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/P2Util.java
index 7ba13903b..404e33eb8 100644
--- a/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/P2Util.java
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate/src/org/eclipse/equinox/p2/examples/rcp/prestartupdate/P2Util.java
@@ -11,183 +11,46 @@
package org.eclipse.equinox.p2.examples.rcp.prestartupdate;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Iterator;
-
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepositoryManager;
-import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
-import org.eclipse.equinox.internal.provisional.p2.director.IPlanner;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
-import org.eclipse.equinox.internal.provisional.p2.director.ProvisioningPlan;
-import org.eclipse.equinox.internal.provisional.p2.engine.DefaultPhaseSet;
-import org.eclipse.equinox.internal.provisional.p2.engine.IEngine;
-import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
-import org.eclipse.equinox.internal.provisional.p2.engine.IProfileRegistry;
-import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
-import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.internal.provisional.p2.metadata.query.Collector;
-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.repository.IRepositoryManager;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.operations.ProvisioningJob;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
+import org.eclipse.equinox.p2.operations.UpdateOperation;
public class P2Util {
// XXX Check for updates to this application and return true if
// we have installed updates and need a restart.
- // This method is intentionally long and ugly in order to provide
- // "one-stop-shopping" for how to check for and perform an update.
- static boolean checkForUpdates() {
- // Before we show a progress dialog, at least find out that we have
- // installed content and repos to check.
- final IProfileRegistry profileRegistry = (IProfileRegistry) ServiceHelper
- .getService(Activator.bundleContext, IProfileRegistry.class
- .getName());
- if (profileRegistry == null)
- return false;
- final IProfile profile = profileRegistry
- .getProfile(IProfileRegistry.SELF);
- if (profile == null)
- return false;
-
- // We are going to look for updates to all IU's in the profile. A
- // different query could be used if we are looking for updates to
- // a subset. For example, the p2 UI only looks for updates to those
- // IU's marked with a special property.
- final org.eclipse.equinox.internal.provisional.p2.metadata.query.Collector collector = profile.query(InstallableUnitQuery.ANY,
- new Collector(), null);
- if (collector.isEmpty())
- return false;
- final IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper
+ static boolean checkForUpdates(IProgressMonitor monitor) {
+ IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper
.getService(Activator.bundleContext,
- IMetadataRepositoryManager.class.getName());
- if (manager == null)
- return false;
- final URI[] reposToSearch = manager
- .getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
- if (reposToSearch.length == 0)
- return false;
- final IPlanner planner = (IPlanner) ServiceHelper.getService(
- Activator.bundleContext, IPlanner.class.getName());
- if (planner == null)
- return false;
- // Looking in all known repositories for updates for each IU in the profile
- final boolean[] didWeUpdate = new boolean[1];
- didWeUpdate[0] = false;
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor)
- throws InvocationTargetException, InterruptedException {
- // We'll break progress up into 4 steps.
- // 1. Load repos - it is not strictly necessary to do this.
- // The planner will do it for us. However, burying this
- // in the planner's progress reporting will not
- // show enough progress initially, so we do it manually.
- // 2. Get update list
- // 3. Build a profile change request and get a provisioning plan
- // 4. Perform the provisioning plan.
- SubMonitor sub = SubMonitor.convert(monitor,
- "Checking for application updates...", 400);
- // 1. Load repos
- SubMonitor loadMonitor = sub.newChild(100, SubMonitor.SUPPRESS_ALL_LABELS);
- for (int i=0; i<reposToSearch.length; i++)
- try {
- if (loadMonitor.isCanceled())
- throw new InterruptedException();
- manager.loadRepository(reposToSearch[i], loadMonitor.newChild(100/reposToSearch.length));
- } catch (ProvisionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- loadMonitor.done();
-
- // 2. Get update list.
- // First we look for replacement IU's for each IU
- ArrayList iusWithUpdates = new ArrayList();
- ArrayList replacementIUs = new ArrayList();
- Iterator iter = collector.iterator();
- ProvisioningContext pc = new ProvisioningContext(reposToSearch);
- SubMonitor updateSearchMonitor = sub.newChild(100, SubMonitor.SUPPRESS_ALL_LABELS);
- while (iter.hasNext()) {
- if (updateSearchMonitor.isCanceled())
- throw new InterruptedException();
- IInstallableUnit iu = (IInstallableUnit) iter.next();
- IInstallableUnit[] replacements = planner.updatesFor(iu,
- pc, updateSearchMonitor.newChild(100/collector.size()));
- if (replacements.length > 0) {
- iusWithUpdates.add(iu);
- if (replacements.length == 1)
- replacementIUs.add(replacements[0]);
- else {
- IInstallableUnit repl = replacements[0];
- for (int i = 1; i < replacements.length; i++)
- if (replacements[i].getVersion().compareTo(
- repl.getVersion()) > 0)
- repl = replacements[i];
- replacementIUs.add(repl);
- }
- }
- }
- // Did we find any updates?
- if (iusWithUpdates.size() == 0) {
- sub.done();
- } else {
- if (sub.isCanceled())
- throw new InterruptedException();
- // 3. Build a profile change request and get a provisioning plan
- ProfileChangeRequest changeRequest = new ProfileChangeRequest(
- profile);
- changeRequest
- .removeInstallableUnits((IInstallableUnit[]) iusWithUpdates
- .toArray(new IInstallableUnit[iusWithUpdates
- .size()]));
- changeRequest
- .addInstallableUnits((IInstallableUnit[]) replacementIUs
- .toArray(new IInstallableUnit[replacementIUs
- .size()]));
- ProvisioningPlan plan = planner.getProvisioningPlan(
- changeRequest, pc, sub.newChild(100, SubMonitor.SUPPRESS_ALL_LABELS));
- if (plan.getStatus().getSeverity() == IStatus.CANCEL)
- throw new InterruptedException();
- if (plan.getStatus().getSeverity() != IStatus.ERROR) {
- IEngine engine = (IEngine) ServiceHelper.getService(
- Activator.bundleContext, IEngine.class
- .getName());
- IArtifactRepositoryManager artifactMgr = (IArtifactRepositoryManager) ServiceHelper
- .getService(Activator.bundleContext,
- IArtifactRepositoryManager.class
- .getName());
- if (engine != null && artifactMgr != null) {
- // 4. Perform the provisioning plan
- pc
- .setArtifactRepositories(artifactMgr
- .getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL));
- IStatus status = engine.perform(profile,
- new DefaultPhaseSet(), plan.getOperands(),
- pc, sub.newChild(100, SubMonitor.SUPPRESS_ALL_LABELS));
- if (status.getSeverity() == IStatus.CANCEL)
- throw new InterruptedException();
- if (status.getSeverity() != IStatus.ERROR) {
- didWeUpdate[0] = true;
- }
- }
- }
- }
+ IProvisioningAgent.SERVICE_NAME);
+ if (agent == null)
+ return false;
+ ProvisioningSession session = new ProvisioningSession(agent);
+ // the default update operation looks for updates to the currently
+ // running profile, using the default profile root marker. To change
+ // which installable units are being updated, use the more detailed
+ // constructors.
+ UpdateOperation operation = new UpdateOperation(session);
+
+ SubMonitor sub = SubMonitor.convert(monitor,
+ "Checking for application updates...", 200);
+ IStatus status = operation.resolveModal(sub.newChild(100));
+ if (status.getSeverity() == IStatus.CANCEL)
+ throw new OperationCanceledException();
+ if (status.getSeverity() != IStatus.ERROR) {
+ ProvisioningJob job = operation.getProvisioningJob(null);
+ status = job.runModal(sub.newChild(100));
+ if (status.getSeverity() == IStatus.CANCEL)
+ throw new OperationCanceledException();
+ if (status.getSeverity() != IStatus.ERROR) {
+ return true;
}
- };
- try {
- new ProgressMonitorDialog(null).run(true, true, runnable);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- return false;
- } catch (InterruptedException e) {
- return false;
}
- return didWeUpdate[0];
+ return false;
}
}

Back to the top