package de.tuberlin.onedrivesdk.downloadFile;
import de.tuberlin.onedrivesdk.common.ConcreteOneDriveSDK;
import de.tuberlin.onedrivesdk.file.ConcreteOneFile;
import de.tuberlin.onedrivesdk.file.OneFile;
import de.tuberlin.onedrivesdk.networking.OneDriveAuthenticationException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* Implementation of OneDownloadFile
* Blocking download operation
*/
public class ConcreteOneDownloadFile implements OneDownloadFile {
private static final Logger logger = LogManager.getLogger(ConcreteOneDownloadFile.class);
private final ConcreteOneFile metadata;
private final ConcreteOneDriveSDK api;
private final File destinationFile;
public ConcreteOneDownloadFile(ConcreteOneFile metadata, ConcreteOneDriveSDK api, File destinationFile) throws FileNotFoundException {
this.metadata = metadata;
this.api = api;
this.destinationFile = destinationFile;
}
@Override
public OneFile getMetaData() {
return metadata;
}
@Override
public void startDownload() throws IOException, OneDriveAuthenticationException {
RandomAccessFile destination = new RandomAccessFile(this.destinationFile, "rw");
try {
logger.info("Starting download of "+metadata.getName());
destination.write(api.download(metadata.getId()));
} finally {
logger.info("Finished download of "+this.metadata.getName());
try {
destination.close();
} catch (IOException e) {
}
}
}
@Override
public File getDownloadedFile() {
return destinationFile;
}
}