1 /*******************************************************************************
2 * Copyright (c) 2009 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 ******************************************************************************/
12 package eu
.etaxonomy
.taxeditor
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.eclipse
.core
.internal
.runtime
.Log
;
16 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
17 import org
.eclipse
.core
.runtime
.IStatus
;
18 import org
.eclipse
.core
.runtime
.OperationCanceledException
;
19 import org
.eclipse
.core
.runtime
.SubMonitor
;
20 import org
.eclipse
.equinox
.p2
.core
.IProvisioningAgent
;
21 import org
.eclipse
.equinox
.p2
.operations
.ProvisioningJob
;
22 import org
.eclipse
.equinox
.p2
.operations
.ProvisioningSession
;
23 import org
.eclipse
.equinox
.p2
.operations
.UpdateOperation
;
25 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
28 * This class shows an example for checking for updates and performing the
29 * update synchronously. It is up to the caller to run this in a job if
30 * a background update check is desired. This is a reasonable way to run an
31 * operation when user intervention is not required. Another approach is
32 * to separately perform the resolution and provisioning steps, deciding
33 * whether to perform these synchronously or in a job.
35 * Any p2 operation can be run modally (synchronously), or the job
36 * can be requested and scheduled by the caller.
38 * @see UpdateOperation#resolveModal(IProgressMonitor)
39 * @see UpdateOperation#getResolveJob(IProgressMonitor)
40 * @see UpdateOperation#getProvisioningJob(IProgressMonitor)
41 * @see UpdateOperation#resolveModal(IProgressMonitor)
42 * @see UpdateOperation#getResolveJob(IProgressMonitor)
43 * @see UpdateOperation#getProvisioningJob(IProgressMonitor)
44 * @see UpdateOperation#resolveModal(IProgressMonitor)
45 * @see UpdateOperation#getResolveJob(IProgressMonitor)
46 * @see UpdateOperation#getProvisioningJob(IProgressMonitor)
52 private static final Logger logger
= Logger
.getLogger(P2Util
.class);
54 // XXX Check for updates to this application and return a status.
55 static IStatus
checkForUpdates(IProvisioningAgent agent
, IProgressMonitor monitor
) throws OperationCanceledException
{
56 ProvisioningSession session
= new ProvisioningSession(agent
);
58 // the default update operation looks for updates to the currently
59 // running profile, using the default profile root marker. To change
60 // which installable units are being updated, use the more detailed
62 UpdateOperation operation
= new UpdateOperation(session
);
63 SubMonitor sub
= SubMonitor
.convert(monitor
,
64 "Checking for application updates...", 200);
65 IStatus status
= operation
.resolveModal(sub
.newChild(100));
67 if (status
.getCode() == UpdateOperation
.STATUS_NOTHING_TO_UPDATE
) {
70 if (status
.getSeverity() == IStatus
.CANCEL
)
71 throw new OperationCanceledException();
73 if (status
.getSeverity() != IStatus
.ERROR
) {
74 // More complex status handling might include showing the user what updates
75 // are available if there are multiples, differentiating patches vs. updates, etc.
76 // In this example, we simply update as suggested by the operation.
77 ProvisioningJob job
= operation
.getProvisioningJob(null);
82 status
= job
.runModal(sub
.newChild(100));
83 if (status
.getSeverity() == IStatus
.CANCEL
)
84 throw new OperationCanceledException();