/**
* 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.content.service;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.*;
import org.dspace.core.Context;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
/**
* Service interface class for the Bitstream object.
* The implementation of this class is responsible for all business logic calls for the Bitstream object and is autowired by spring
*
* @author kevinvandevelde at atmire.com
*/
public interface BitstreamService extends DSpaceObjectService<Bitstream>, DSpaceObjectLegacySupportService<Bitstream>{
public List<Bitstream> findAll(Context context) throws SQLException;
public Iterator<Bitstream> findAll(Context context, int limit, int offset) throws SQLException;
/**
* Create a new bitstream, with a new ID. The checksum and file size are
* calculated. No authorization checks are made in this method.
* The newly created bitstream has the "unknown" format.
*
* @param context
* DSpace context object
* @param is
* the bits to put in the bitstream
*
* @return the newly created bitstream
* @throws IOException if IO error
* @throws SQLException if database error
*/
public Bitstream create(Context context, InputStream is) throws IOException, SQLException;
/**
* Create a new bitstream, with a new ID. The checksum and file size are
* calculated.
* The newly created bitstream has the "unknown" format.
*
* @param context
* DSpace context object
* @param bundle
* The bundle in which our bitstream should be added.
*
* @param is
* the bits to put in the bitstream
*
* @return the newly created bitstream
* @throws IOException if IO error
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public Bitstream create(Context context, Bundle bundle, InputStream is) throws IOException, SQLException, AuthorizeException;
/**
* Register a new bitstream, with a new ID. The checksum and file size
* are calculated. The newly created bitstream has the "unknown"
* format.
*
* @param context DSpace context object
* @param bundle The bundle in which our bitstream should be added.
* @param assetstore corresponds to an assetstore in dspace.cfg
* @param bitstreamPath the path and filename relative to the assetstore
* @return the newly registered bitstream
* @throws IOException if IO error
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public Bitstream register(Context context, Bundle bundle, int assetstore, String bitstreamPath)
throws IOException, SQLException, AuthorizeException;
/**
* Register a new bitstream, with a new ID. The checksum and file size
* are calculated. The newly created bitstream has the "unknown"
* format.
*
* @param context DSpace context object
* @param assetstore corresponds to an assetstore in dspace.cfg
* @param bitstreamPath the path and filename relative to the assetstore
* @return the newly registered bitstream
* @throws IOException if IO error
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public Bitstream register(Context context, int assetstore, String bitstreamPath)
throws IOException, SQLException, AuthorizeException;
/**
* Set the user's format description. This implies that the format of the
* bitstream is uncertain, and the format is set to "unknown."
*
* @param context DSpace context object
* @param bitstream DSpace bitstream
* @param desc
* the user's description of the format
* @throws SQLException if database error
*/
public void setUserFormatDescription(Context context, Bitstream bitstream, String desc) throws SQLException;
/**
* Get the description of the format - either the user's or the description
* of the format defined by the system.
*
* @param context DSpace context object
* @param bitstream DSpace bitstream
* @return a description of the format.
* @throws SQLException if database error
*/
public String getFormatDescription(Context context, Bitstream bitstream) throws SQLException;
/**
* Set the format of the bitstream. If the user has supplied a type
* description, it is cleared. Passing in <code>null</code> sets the type
* of this bitstream to "unknown".
*
* @param context DSpace context object
* @param bitstream DSpace bitstream
* @param bitstreamFormat
* the format of this bitstream, or <code>null</code> for
* unknown
* @throws SQLException if database error
*/
public void setFormat(Context context, Bitstream bitstream, BitstreamFormat bitstreamFormat) throws SQLException;
/**
* Retrieve the contents of the bitstream
*
* @param context DSpace context object
* @param bitstream DSpace bitstream
* @return a stream from which the bitstream can be read.
* @throws IOException if IO error
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public InputStream retrieve(Context context, Bitstream bitstream) throws IOException, SQLException, AuthorizeException;
/**
* Determine if this bitstream is registered (available elsewhere on
* filesystem than in assetstore). More about registered items:
* https://wiki.duraspace.org/display/DSDOC3x/Registering+(not+Importing)+Bitstreams+via+Simple+Archive+Format
*
* @param bitstream DSpace bitstream
* @return true if the bitstream is registered, false otherwise
*/
public boolean isRegisteredBitstream(Bitstream bitstream);
/**
* Retrieve all bitstreams with the deleted flag set to true
* @param context the dspace context
* @return a list of all bitstreams that have been "deleted"
* @throws SQLException if database error
*/
public List<Bitstream> findDeletedBitstreams(Context context) throws SQLException;
/**
* Remove a bitstream that has been set to "deleted" from the database
* @param context the dspace context
* @param bitstream the bitstream to deleted from the database
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public void expunge(Context context, Bitstream bitstream) throws SQLException, AuthorizeException;
public List<Bitstream> findDuplicateInternalIdentifier(Context context, Bitstream bitstream) throws SQLException;
public Iterator<Bitstream> getItemBitstreams(Context context, Item item) throws SQLException;
public Iterator<Bitstream> getCollectionBitstreams(Context context, Collection collection) throws SQLException;
public Iterator<Bitstream> getCommunityBitstreams(Context context, Community community) throws SQLException;
public List<Bitstream> findBitstreamsWithNoRecentChecksum(Context context) throws SQLException;
public Bitstream getBitstreamByName(Item item, String bundleName, String bitstreamName) throws SQLException;
public Bitstream getFirstBitstream(Item item, String bundleName) throws SQLException;
public BitstreamFormat getFormat(Context context, Bitstream bitstream) throws SQLException;
public Iterator<Bitstream> findByStoreNumber(Context context, Integer storeNumber) throws SQLException;
public Long countByStoreNumber(Context context, Integer storeNumber) throws SQLException;
int countTotal(Context context) throws SQLException;
int countDeletedBitstreams(Context context) throws SQLException;
int countBitstreamsWithoutPolicy(Context context) throws SQLException;
List<Bitstream> getNotReferencedBitstreams(Context context) throws SQLException;
}