Class BitstreamStorageServiceImpl
- All Implemented Interfaces:
BitstreamStorageService,InitializingBean
Stores, retrieves and deletes bitstreams.
Presently, asset stores are specified in dspace.cfg. Since
Java does not offer a way of detecting free disk space, the asset store to
use for new bitstreams is also specified in a configuration property. The
drawbacks to this are that the administrators are responsible for monitoring
available space in the asset stores, and DSpace (Tomcat) has to be restarted
when the asset store for new ('incoming') bitstreams is changed.
Mods by David Little, UCSD Libraries 12/21/04 to allow the registration of files (bitstreams) into DSpace.
Cleanup integration with checker package by Nate Sarr 2006-01. N.B. The dependency on the checker package isn't ideal - a Listener pattern would be better but was considered overkill for the purposes of integrating the checker. It would be worth re-considering a Listener pattern if another package needs to be notified of BitstreamStorageManager actions.
- Author:
- Peter Breton, Robert Tansley, David Little, Nathan Sarr
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected BitstreamServiceprotected ChecksumHistoryServiceprotected final StringThis prefix string marks registered bitstreams in internal_id -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidcleanup(boolean deleteDbRecords, boolean verbose) Clean up the bitstream storage area.Clone the given bitstream to a new bitstream with a new ID.computeChecksum(Context context, Bitstream bitstream) intgetLastModified(Bitstream bitstream) Gets the last modified timestamp of the the given bitstream's content, if known.protected BitStoreServicegetStore(int position) protected booleanReturn true if this file is too recent to be deleted, false otherwise.booleanisRegisteredBitstream(String internalId) Does the internal_id column in the bitstream row indicate the bitstream is a registered filevoidmigrate(Context context, Integer assetstoreSource, Integer assetstoreDestination, boolean deleteOld, Integer batchCommitSize) Migrates all assets off of one assetstore to anothervoidprintStores(Context context) Print out (log/out) a listing of the assetstores configured, and how many assets they containRegister a bitstream already in storage.Retrieve the bits for the bitstream with ID.voidsetIncoming(int incoming) voidsetIncomingExternal(int incoming) Sets the number for the incoming storevoidsetStores(Map<Integer, BitStoreService> stores) store(Context context, Bitstream bitstream, InputStream is) Store a stream of bits.
-
Field Details
-
bitstreamService
-
checksumHistoryService
-
REGISTERED_FLAG
This prefix string marks registered bitstreams in internal_id- See Also:
-
-
Constructor Details
-
BitstreamStorageServiceImpl
protected BitstreamStorageServiceImpl()
-
-
Method Details
-
setIncomingExternal
public void setIncomingExternal(int incoming) Description copied from interface:BitstreamStorageServiceSets the number for the incoming store- Specified by:
setIncomingExternalin interfaceBitstreamStorageService
-
afterPropertiesSet
- Specified by:
afterPropertiesSetin interfaceInitializingBean- Throws:
Exception
-
store
public UUID store(Context context, Bitstream bitstream, InputStream is) throws SQLException, IOException Description copied from interface:BitstreamStorageServiceStore a stream of bits.If this method returns successfully, the bits have been stored, and RDBMS metadata entries are in place (the context still needs to be completed to finalize the transaction).
If this method returns successfully and the context is aborted, then the bits will be stored in the asset store and the RDBMS metadata entries will exist, but with the deleted flag set.
If this method throws an exception, then any of the following may be true:- Neither bits nor RDBMS metadata entries have been stored.
- RDBMS metadata entries with the deleted flag set have been stored, but no bits.
- RDBMS metadata entries with the deleted flag set have been stored, and some or all of the bits have also been stored.
- Specified by:
storein interfaceBitstreamStorageService- Parameters:
context- The current contextbitstream- The bitstream to storeis- The stream of bits to store- Returns:
- The ID of the stored bitstream
- Throws:
SQLException- If a problem occurs accessing the RDBMSIOException- If a problem occurs while storing the bits
-
register
public UUID register(Context context, Bitstream bitstream, int assetstore, String bitstreamPath) throws SQLException, IOException, AuthorizeException Register a bitstream already in storage.- Specified by:
registerin interfaceBitstreamStorageService- Parameters:
context- The current contextassetstore- The assetstore number for the bitstream to be registeredbitstreamPath- The relative path of the bitstream to be registered. The path is relative to the path of this assetstore.bitstream- The bitstream to register- Returns:
- The ID of the registered bitstream
- Throws:
SQLException- If a problem occurs accessing the RDBMSIOException- if IO errorAuthorizeException- Exception indicating the current user of the context does not have permission to perform a particular action.
-
computeChecksum
- Specified by:
computeChecksumin interfaceBitstreamStorageService- Throws:
IOException
-
isRegisteredBitstream
Description copied from interface:BitstreamStorageServiceDoes the internal_id column in the bitstream row indicate the bitstream is a registered file- Specified by:
isRegisteredBitstreamin interfaceBitstreamStorageService- Parameters:
internalId- the value of the internal_id column- Returns:
- true if the bitstream is a registered file
-
retrieve
Description copied from interface:BitstreamStorageServiceRetrieve the bits for the bitstream with ID. If the bitstream does not exist, or is marked deleted, returns null.- Specified by:
retrievein interfaceBitstreamStorageService- Parameters:
context- The current contextbitstream- The bitstream to retrieve- Returns:
- The stream of bits, or null
- Throws:
SQLException- If a problem occurs accessing the RDBMSIOException- If a problem occurs while retrieving the bits
-
cleanup
public void cleanup(boolean deleteDbRecords, boolean verbose) throws SQLException, IOException, AuthorizeException Description copied from interface:BitstreamStorageServiceClean up the bitstream storage area. This method deletes any bitstreams which are more than 1 hour old and marked deleted. The deletions cannot be undone.- Specified by:
cleanupin interfaceBitstreamStorageService- Parameters:
deleteDbRecords- if true deletes the database records otherwise it only deletes the files and directories in the assetstoreverbose- verbosity flag- Throws:
SQLException- If a problem occurs accessing the RDBMSIOException- If a problem occurs while cleaning upAuthorizeException- Exception indicating the current user of the context does not have permission to perform a particular action.
-
getLastModified
Description copied from interface:BitstreamStorageServiceGets the last modified timestamp of the the given bitstream's content, if known.- Specified by:
getLastModifiedin interfaceBitstreamStorageService- Parameters:
bitstream- the bitstream.- Returns:
- the timestamp in milliseconds, or
nullif unknown. - Throws:
IOException- if an unexpected io error occurs.
-
clone
public Bitstream clone(Context context, Bitstream bitstream) throws SQLException, IOException, AuthorizeException Description copied from interface:BitstreamStorageServiceClone the given bitstream to a new bitstream with a new ID. Metadata of the given bitstream are also copied to the new bitstream.- Specified by:
clonein interfaceBitstreamStorageService- Parameters:
context- The relevant DSpace Context.bitstream- the bitstream to be cloned- Returns:
- id of the clone bitstream. A general class of exceptions produced by failed or interrupted I/O operations.
- Throws:
SQLException- An exception that provides information on a database access error or other errors.AuthorizeException- Exception indicating the current user of the context does not have permission to perform a particular action.IOException- if IO error
-
migrate
public void migrate(Context context, Integer assetstoreSource, Integer assetstoreDestination, boolean deleteOld, Integer batchCommitSize) throws IOException, SQLException, AuthorizeException Migrates all assets off of one assetstore to another- Specified by:
migratein interfaceBitstreamStorageService- Parameters:
assetstoreSource- source assetstoreassetstoreDestination- destination assetstorecontext- The relevant DSpace Context.deleteOld- whether to delete files from the source assetstore after migrationbatchCommitSize- batch size- Throws:
IOException- A general class of exceptions produced by failed or interrupted I/O operations.SQLException- An exception that provides information on a database access error or other errors.AuthorizeException- Exception indicating the current user of the context does not have permission to perform a particular action.
-
printStores
Description copied from interface:BitstreamStorageServicePrint out (log/out) a listing of the assetstores configured, and how many assets they contain- Specified by:
printStoresin interfaceBitstreamStorageService- Parameters:
context- The relevant DSpace Context.
-
getIncoming
public int getIncoming() -
setIncoming
public void setIncoming(int incoming) -
setStores
-
getStores
-
isRecent
Return true if this file is too recent to be deleted, false otherwise.- Parameters:
lastModified- The time asset was last modified- Returns:
- True if this file is too recent to be deleted
-
getStore
- Throws:
IOException
-