| package org.eclipse.equinox.p2.examples.rcp.prestartupdate; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; |
| import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; |
| import org.eclipse.equinox.p2.core.IProvisioningAgent; |
| import org.eclipse.equinox.p2.operations.UpdateOperation; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.dialogs.ProgressMonitorDialog; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.application.ActionBarAdvisor; |
| import org.eclipse.ui.application.IActionBarConfigurer; |
| import org.eclipse.ui.application.IWorkbenchWindowConfigurer; |
| import org.eclipse.ui.application.WorkbenchWindowAdvisor; |
| |
| public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { |
| |
| private static final String JUSTUPDATED = "justUpdated"; |
| |
| public ApplicationWorkbenchWindowAdvisor( |
| IWorkbenchWindowConfigurer configurer) { |
| super(configurer); |
| } |
| |
| public ActionBarAdvisor createActionBarAdvisor( |
| IActionBarConfigurer configurer) { |
| return new ApplicationActionBarAdvisor(configurer); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowOpen() |
| */ |
| public void preWindowOpen() { |
| IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); |
| configurer.setInitialSize(new Point(600, 400)); |
| configurer.setShowCoolBar(true); |
| configurer.setShowStatusLine(false); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#postWindowOpen() |
| */ |
| public void postWindowOpen() { |
| final IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper |
| .getService(Activator.bundleContext, |
| IProvisioningAgent.SERVICE_NAME); |
| if (agent == null) { |
| LogHelper |
| .log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, |
| "No provisioning agent found. This application is not set up for updates.")); |
| } |
| // XXX if we're restarting after updating, don't check again. |
| final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore(); |
| if (prefStore.getBoolean(JUSTUPDATED)) { |
| prefStore.setValue(JUSTUPDATED, false); |
| return; |
| } |
| |
| // XXX check for updates before starting up. |
| // If an update is performed, restart. Otherwise log |
| // the status. |
| IRunnableWithProgress runnable = new IRunnableWithProgress() { |
| public void run(IProgressMonitor monitor) |
| throws InvocationTargetException, InterruptedException { |
| IStatus updateStatus = P2Util.checkForUpdates(agent, monitor); |
| if (updateStatus.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) { |
| PlatformUI.getWorkbench().getDisplay() |
| .asyncExec(new Runnable() { |
| public void run() { |
| MessageDialog.openInformation(null, |
| "Updates", "No updates were found"); |
| } |
| }); |
| } else if (updateStatus.getSeverity() != IStatus.ERROR) { |
| prefStore.setValue(JUSTUPDATED, true); |
| PlatformUI.getWorkbench().restart(); |
| } else { |
| LogHelper.log(updateStatus); |
| } |
| } |
| }; |
| try { |
| new ProgressMonitorDialog(null).run(true, true, runnable); |
| } catch (InvocationTargetException e) { |
| e.printStackTrace(); |
| } catch (InterruptedException e) { |
| } |
| |
| } |
| |
| } |