* @param updateType
* the type of update we're performing, cannot be <code>null</code>.
*/
private void checkForUpdate(UpdateType updateType) {
try {
UpdateHandler updateHandler = getUpdateHandler(updateType);
Version installed = updateHandler.getInstalledVersion();
Version available = updateHandler.getHighestAvailableVersion();
if (installed != null && installed.compareTo(available) < 0) {
// Update available, ask the user whether we should download it...
if (!m_agentUser.downloadAvailableUpdate(updateType, getAgentId(), installed, available)) {
// No, we may not download this update now...
return;
}
System.out.printf("Downloading %s update (from v%s to v%s)...%n", updateType, installed, available);
DownloadHandle downloadHandle = updateHandler.getDownloadHandle(available, false /* fixPackage */);
Future<DownloadResult> future = downloadHandle.start(new DownloadProgressListener() {
@Override
public void progress(long bytesRead) {
System.out.printf("Download progress: %d bytes read...%n", bytesRead);
}
});
// Block until the download is complete...
DownloadResult result = future.get();
// Download is complete, ask the user once more if we're allowed to install the update...
if (m_agentUser.installAvailableUpdate(updateType, getAgentId(), installed, available)) {
System.out.printf("Installing %s update (from v%s to v%s)...%n", updateType, installed, available);
// We've confirmation that we can install this update...
updateHandler.install(result.getInputStream());
}
// Throw away downloaded packages...
downloadHandle.discard();
}