Project

General

Profile

Download (3.69 KB) Statistics
| Branch: | Tag: | Revision:
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
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11

    
12
package eu.etaxonomy.taxeditor;
13

    
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;
24

    
25
import eu.etaxonomy.taxeditor.store.StoreUtil;
26

    
27
/**
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.
34
 *
35
 * Any p2 operation can be run modally (synchronously), or the job
36
 * can be requested and scheduled by the caller.
37
 *
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)
47
 * @author n.hoffmann
48
 * @version $Id: $
49
 */
50
public class P2Util {
51
	
52
	private static final Logger logger = Logger.getLogger(P2Util.class);
53
	
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);
57
		
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
61
		// constructors.
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));
66
		
67
		if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
68
			return status;
69
		}
70
		if (status.getSeverity() == IStatus.CANCEL)
71
			throw new OperationCanceledException();
72
		
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);
78
			if(job == null){
79
				return status;
80
			}
81
			
82
			status = job.runModal(sub.newChild(100));
83
			if (status.getSeverity() == IStatus.CANCEL)
84
				throw new OperationCanceledException();
85
		}
86
		return status;
87
	}
88
}
(9-9/13)