package goko.handlers; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.di.UISynchronize; import org.eclipse.e4.ui.workbench.IWorkbench; import org.eclipse.equinox.p2.core.IProvisioningAgent; import org.eclipse.jface.dialogs.MessageDialog; import org.goko.core.log.GkLog; import goko.GokoUpdateCheckRunnable; public class UpdateHandler { private static GkLog LOG = GkLog.getLogger(UpdateHandler.class); boolean cancelled = false; @Execute public void execute(final IProvisioningAgent agent, final UISynchronize sync, final IWorkbench workbench) { final GokoUpdateCheckRunnable updateCheck = new GokoUpdateCheckRunnable(); Job updateJob = new Job("Checking for updates"){ @Override protected IStatus run(IProgressMonitor monitor) { return updateCheck.update(agent, monitor, sync, workbench, false); } }; updateJob.addJobChangeListener(new JobChangeAdapter(){ /** (inheritDoc) * @see org.eclipse.core.runtime.jobs.JobChangeAdapter#done(org.eclipse.core.runtime.jobs.IJobChangeEvent) */ @Override public void done(IJobChangeEvent event) { super.done(event); IStatus result = event.getResult(); if(result != null){ if(result.equals(GokoUpdateCheckRunnable.NOTHING_TO_UPDATE)){ // Asynchronous execution required to allow the job progress to close sync.asyncExec(new Runnable() { /** (inheritDoc) @see java.lang.Runnable#run() */ @Override public void run() { MessageDialog.openInformation(null, "Information", "Nothing to update"); } }); }else if(result.equals(GokoUpdateCheckRunnable.UPDATE_AVAILABLE)){ sync.asyncExec(new Runnable() { /** (inheritDoc) @see java.lang.Runnable#run() */ @Override public void run() { boolean performUpdate = MessageDialog.openQuestion(null, "Updates available", "There are updates available. Do you want to install them now?"); if(performUpdate){ // Asynchronous execution required to allow the job progress to close Job applyUpdateJob = new Job("Checking for updates"){ @Override protected IStatus run(IProgressMonitor monitor) { return updateCheck.performUpdate(monitor, sync, workbench); } }; applyUpdateJob.setUser(true); applyUpdateJob.schedule(); } } }); } } } }); updateJob.setUser(true); updateJob.schedule(); } }