package co.smartreceipts.android.workers.reports.pdf;
import android.content.Context;
import android.support.annotation.NonNull;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import co.smartreceipts.android.model.Trip;
import co.smartreceipts.android.persistence.DatabaseHelper;
import co.smartreceipts.android.persistence.PersistenceManager;
import co.smartreceipts.android.settings.UserPreferenceManager;
import co.smartreceipts.android.utils.log.Logger;
import co.smartreceipts.android.workers.reports.AbstractReport;
import co.smartreceipts.android.workers.reports.ReportGenerationException;
import co.smartreceipts.android.workers.reports.pdf.pdfbox.PdfBoxReportFile;
import wb.android.flex.Flex;
import wb.android.storage.StorageManager;
public abstract class PdfBoxAbstractReport extends AbstractReport {
public PdfBoxAbstractReport(@NonNull Context context,
@NonNull PersistenceManager persistenceManager,
@NonNull Flex flex) {
super(context, persistenceManager, flex);
}
public PdfBoxAbstractReport(@NonNull Context context,
@NonNull DatabaseHelper db,
@NonNull UserPreferenceManager preferences,
@NonNull StorageManager storageManager,
@NonNull Flex flex) {
super(context, db, preferences, storageManager, flex);
}
@NonNull
@Override
public File generate(@NonNull Trip trip) throws ReportGenerationException {
final String outputFileName = getFileName(trip);
FileOutputStream pdfStream = null;
try {
getStorageManager().delete(trip.getDirectory(), outputFileName);
pdfStream = getStorageManager().getFOS(trip.getDirectory(), outputFileName);
PdfBoxReportFile pdfBoxReportFile = new PdfBoxReportFile(getContext(), getPreferences());
createSections(trip, pdfBoxReportFile);
pdfBoxReportFile.writeFile(pdfStream, trip);
return getStorageManager().getFile(trip.getDirectory(), outputFileName);
} catch (IOException e) {
Logger.error(this, e);
throw new ReportGenerationException(e);
} finally {
if (pdfStream != null) {
StorageManager.closeQuietly(pdfStream);
}
}
}
public abstract void createSections(@NonNull Trip trip, PdfBoxReportFile pdfBoxReportFile);
protected String getFileName(Trip trip) {
return trip.getDirectory().getName() + ".pdf";
}
}