package com.limegroup.gnutella.downloader.serial.conversion; import java.io.File; import java.io.IOException; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.google.inject.Inject; import com.google.inject.name.Named; import com.limegroup.gnutella.downloader.serial.DownloadMemento; import com.limegroup.gnutella.downloader.serial.DownloadSerializeSettings; import com.limegroup.gnutella.downloader.serial.DownloadSerializer; import com.limegroup.gnutella.downloader.serial.OldDownloadConverter; public class DownloadUpgradeTask { private static final Log LOG = LogFactory.getLog(DownloadUpgradeTask.class); private final OldDownloadConverter oldDownloadConverter; private final DownloadSerializeSettings oldDownloadSettings; private final DownloadSerializeSettings newSettings; private final DownloadSerializer downloadSerializer; @Inject public DownloadUpgradeTask(OldDownloadConverter oldDownloadConverter, @Named("oldDownloadSettings") DownloadSerializeSettings oldDownloadSettings, DownloadSerializeSettings newSettings, DownloadSerializer downloadSerializer) { this.oldDownloadConverter = oldDownloadConverter; this.oldDownloadSettings = oldDownloadSettings; this.newSettings = newSettings; this.downloadSerializer = downloadSerializer; } public void upgrade() { File newSaveBackup = newSettings.getBackupFile(); File newSave = newSettings.getSaveFile(); if(!newSaveBackup.exists() && !newSave.exists()) { try { List<DownloadMemento> mementos = readAndConvertOldFormat(); if(downloadSerializer.writeToDisk(mementos)) { // Success! Now delete the old files. oldDownloadSettings.getSaveFile().delete(); oldDownloadSettings.getBackupFile().delete(); } } catch(IOException iox) { LOG.warn("Unable to read old file or write to backup!", iox); } } } /** Converts the old serialized format to new mementos. */ private List<DownloadMemento> readAndConvertOldFormat() throws IOException { try { return oldDownloadConverter.readAndConvertOldDownloads(oldDownloadSettings.getSaveFile()); } catch(Throwable ignored) { LOG.warn("Error trying to convert old normal file.", ignored); } try { return oldDownloadConverter.readAndConvertOldDownloads(oldDownloadSettings.getBackupFile()); } catch(Throwable ignored) { LOG.warn("Error trying to convert old normal file.", ignored); } throw new IOException("Unable to read old files!"); } }