/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */
package org.dspace.checker;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;

/**
 * 
 * Simple Reporting Class which can return several different reports.
 * 
 * @author Jim Downing
 * @author Grace Carpenter
 * @author Nathan Sarr
 * 
 */
public interface SimpleReporter
{
    /**
     * Returns the bitstreams set found to be deleted for the specified date
     * range.
     * 
     * @param startDate
     *            the start date range
     * @param endDate
     *            the end date range
     * @param osw
     *            the output stream writer to write to
     * 
     * @return number of bitstreams found
     * 
     * @throws IOException
     *             if io error occurs
     */
    public int getDeletedBitstreamReport(Date startDate, Date endDate,
            OutputStreamWriter osw) throws IOException;

    /**
     * The a report of bitstreams found where the checksum has been changed
     * since the last check for the specified date range.
     * 
     * @param startDate
     *            the start date range.
     * @param endDate
     *            then end date range.
     * @param osw
     *            the output stream writer to write to
     * 
     * @return number of bitstreams found
     * 
     * @throws IOException
     *             if io error occurs
     */
    public int getChangedChecksumReport(Date startDate, Date endDate,
            OutputStreamWriter osw) throws IOException;

    /**
     * The report of bitstreams for the specified date range where it was
     * determined the bitstreams can no longer be found.
     * 
     * @param startDate
     *            the start date range.
     * @param endDate
     *            the end date range.
     * @param osw
     *            the output stream writer to write to
     * 
     * @return number of bitstreams found
     * 
     * @throws IOException
     *             if io error occurs
     */
    public int getBitstreamNotFoundReport(Date startDate, Date endDate,
            OutputStreamWriter osw) throws IOException;

    /**
     * The bitstreams that were set to not be processed report for the specified
     * date range.
     * 
     * @param startDate
     *            the start date range.
     * @param endDate
     *            the end date range.
     * @param osw
     *            the output stream writer to write to
     * 
     * @throws IOException
     *             if io error occurs
     * 
     */
    public int getNotToBeProcessedReport(Date startDate, Date endDate,
            OutputStreamWriter osw) throws IOException;

    /**
     * The bitstreams that are not known to the checksum checker. This means
     * they are in the bitstream table but not in the most recent checksum table
     * 
     * @param osw
     *            the output stream writer to write to
     * 
     * @return number of bitstreams found
     * 
     * @throws IOException
     *             if io error occurs
     * 
     */
    public int getUncheckedBitstreamsReport(OutputStreamWriter osw)
            throws IOException;
}
