- if (getProvisioningUI().getPolicy().continueWorkingWithOperation(operation, getShell())) {
- if (UpdateSingleIUWizard.validFor(operation)) {
- // Special case for only updating a single root
- UpdateSingleIUWizard wizard = new UpdateSingleIUWizard(getProvisioningUI(), operation);
- WizardDialog dialog = new WizardDialog(getShell(), wizard);
- dialog.create();
- dialog.open();
+ final ProvisioningJob provisioningJob = operation.getProvisioningJob(monitor);
+ if (provisioningJob != null) {
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ boolean performUpdate = MessageDialog.openQuestion(
+ null,
+ "Updates available",
+ "There are updates available. Do you want to install them now?");
+ if (performUpdate) {
+ provisioningJob.addJobChangeListener(new JobChangeAdapter() {
+ @Override
+ public void done(IJobChangeEvent event) {
+ if (event.getResult().isOK()) {
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ boolean restart = MessageDialog.openQuestion(null,
+ "Updates installed, restart?",
+ "Updates have been installed successfully, do you want to restart?");
+ if (restart) {
+ workbench.restart();
+ }
+ }
+ });
+ } else {
+ MessageDialog.openInformation(
+ null,
+ ERROR_PERFORMING_UPDATES,
+ event.getResult().getMessage());
+ }
+ }
+ });
+ provisioningJob.schedule();
+ }
+ }
+ });
+ } else {
+ if (operation.hasResolved()) {
+ showMessage(MessageDialog.ERROR, ERROR_PERFORMING_UPDATES, "Couldn't get provisioning job: " + operation.getResolutionResult());