SCViewer/plugins/com.minres.scviewer.e4.appl.../src/com/minres/scviewer/e4/application/handlers/UpdateHandler.java

121 lines
4.1 KiB
Java
Raw Normal View History

2020-11-10 21:02:34 +01:00
package com.minres.scviewer.e4.application.handlers;
2022-09-30 14:23:54 +02:00
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URISyntaxException;
import org.eclipse.core.runtime.IProgressMonitor;
2020-11-10 21:02:34 +01:00
import org.eclipse.core.runtime.IStatus;
2022-09-30 14:23:54 +02:00
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
2020-11-10 21:02:34 +01:00
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;
2022-09-30 14:23:54 +02:00
import org.eclipse.equinox.p2.operations.ProvisioningJob;
2020-11-10 21:02:34 +01:00
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.operations.UpdateOperation;
import org.eclipse.jface.dialogs.MessageDialog;
2022-09-30 14:23:54 +02:00
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
2020-11-10 21:02:34 +01:00
2022-09-30 15:28:48 +02:00
import com.minres.scviewer.e4.application.Messages;
2020-11-10 21:02:34 +01:00
public class UpdateHandler {
2022-09-30 14:23:54 +02:00
boolean cancelled = false;
2020-11-10 21:02:34 +01:00
@Execute
2022-09-30 14:23:54 +02:00
public void execute(IProvisioningAgent agent, UISynchronize sync, IWorkbench workbench) {
IRunnableWithProgress runnable = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
update(agent, monitor, sync, workbench);
}
};
try {
new ProgressMonitorDialog(null).run(true, true, runnable);
} catch (InvocationTargetException | InterruptedException e) {
e.printStackTrace();
}
}
private IStatus update(IProvisioningAgent agent, IProgressMonitor monitor, UISynchronize sync,
IWorkbench workbench) {
2020-11-10 21:02:34 +01:00
ProvisioningSession session = new ProvisioningSession(agent);
UpdateOperation operation = new UpdateOperation(session);
2022-09-30 14:23:54 +02:00
try {
2022-09-30 15:28:48 +02:00
operation.getProvisioningContext().setArtifactRepositories(new URI(Messages.UpdateHandler_URI));
operation.getProvisioningContext().setMetadataRepositories(new URI(Messages.UpdateHandler_URI));
} catch (URISyntaxException e) {
}
SubMonitor sub = SubMonitor.convert(monitor, Messages.UpdateHandler_2, 200);
2022-09-30 14:23:54 +02:00
IStatus status = operation.resolveModal(sub.newChild(100));
if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
2022-09-30 15:28:48 +02:00
sync.syncExec(() -> {
MessageDialog.openInformation(null, Messages.UpdateHandler_10, Messages.UpdateHandler_3);
});
2022-09-30 14:23:54 +02:00
return Status.CANCEL_STATUS;
} else {
ProvisioningJob provisioningJob = operation.getProvisioningJob(sub.newChild(100));
if (provisioningJob != null) {
sync.syncExec(new Runnable() {
@Override
public void run() {
2022-09-30 15:28:48 +02:00
boolean performUpdate = MessageDialog.openQuestion(null, Messages.UpdateHandler_4,
Messages.UpdateHandler_5);
2022-09-30 14:23:54 +02:00
if (performUpdate) {
provisioningJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if (event.getResult().isOK()) {
sync.syncExec(new Runnable() {
@Override
public void run() {
boolean restart = MessageDialog.openQuestion(null,
2022-09-30 15:28:48 +02:00
Messages.UpdateHandler_6, Messages.UpdateHandler_7);
2022-09-30 14:23:54 +02:00
if (restart) {
workbench.restart();
}
}
});
} else {
2022-09-30 15:28:48 +02:00
sync.syncExec(() -> {
MessageDialog.openInformation(null, Messages.UpdateHandler_11,
event.getResult().getMessage());
});
2022-09-30 14:23:54 +02:00
cancelled = true;
}
}
});
provisioningJob.schedule();
} else {
cancelled = true;
}
}
});
} else {
if (operation.hasResolved()) {
2022-09-30 15:28:48 +02:00
sync.syncExec(() -> {
MessageDialog.openInformation(null, Messages.UpdateHandler_11,
Messages.UpdateHandler_8 + operation.getResolutionResult());
});
2022-09-30 14:23:54 +02:00
} else {
2022-09-30 15:28:48 +02:00
sync.syncExec(() -> {
MessageDialog.openInformation(null, Messages.UpdateHandler_11, Messages.UpdateHandler_9);
});
2022-09-30 14:23:54 +02:00
}
cancelled = true;
}
2020-11-10 21:02:34 +01:00
}
2022-09-30 14:23:54 +02:00
if (cancelled) {
cancelled = false;
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}
}