ModeShape Distribution 3.0.0.Beta1

org.modeshape.jcr.value.binary
Class FileSystemBinaryStore

java.lang.Object
  extended by org.modeshape.jcr.value.binary.AbstractBinaryStore
      extended by org.modeshape.jcr.value.binary.FileSystemBinaryStore
All Implemented Interfaces:
BinaryStore
Direct Known Subclasses:
TransientBinaryStore

@ThreadSafe
public class FileSystemBinaryStore
extends AbstractBinaryStore

A BinaryStore that stores files in a directory on the file system. The store does use file locks to prevent other processes from concurrently writing the files, and it also uses an internal set of locks to prevent mulitple threads from simultaneously writing to the persisted files.


Field Summary
protected static String TRASH_DIRECTORY_NAME
           
 
Fields inherited from class org.modeshape.jcr.value.binary.AbstractBinaryStore
logger, MEDIUM_BUFFER_SIZE
 
Fields inherited from interface org.modeshape.jcr.value.binary.BinaryStore
DEFAULT_MINIMUM_BINARY_SIZE_IN_BYTES
 
Constructor Summary
protected FileSystemBinaryStore(File directory)
           
 
Method Summary
static FileSystemBinaryStore create(File directory)
           
protected  File findFile(File directory, BinaryKey key, boolean createParentDirsIfMissing)
           
 File getDirectory()
           
 String getExtractedText(BinaryValue source)
          Retrieves the extracted text of a binary value, which may or may not have been stored previously.
 InputStream getInputStream(BinaryKey key)
          Get an InputStream to the binary content with the supplied key.
protected  String getStoredMimeType(BinaryValue binaryValue)
          Returns the stored mime-type of a binary value.
protected  void initializeStorage(File directory)
           
protected  void markAsUnused(BinaryKey key)
           
 void markAsUnused(Iterable<BinaryKey> keys)
          Mark the supplied binary keys as unused, but key them in quarantine until needed again (at which point they're removed from quarantine) or until BinaryStore.removeValuesUnusedLongerThan(long, TimeUnit) is called.
protected  void moveFileExclusively(File original, File destination)
           
protected  void pruneEmptyDirectories(File directory, File removeable)
          Remove any empty directories above removeable but below directory
 void removeValuesUnusedLongerThan(long minimumAge, TimeUnit unit)
          Remove binary values that have been unused for at least the specified amount of time.
 void storeExtractedText(BinaryValue source, String extractedText)
          Stores the extracted text of a binary value into this store.
protected  void storeMimeType(BinaryValue binaryValue, String mimeType)
          Stores the given mime-type for a binary value.
 BinaryValue storeValue(InputStream stream)
          Store the binary value and return the JCR representation.
protected  void touch(File file)
           
 
Methods inherited from class org.modeshape.jcr.value.binary.AbstractBinaryStore
bestBufferSize, detector, extractors, getMimeType, getMinimumBinarySizeInBytes, getText, setMimeTypeDetector, setMinimumBinarySizeInBytes, setTextExtractors, shutdown, start
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TRASH_DIRECTORY_NAME

protected static final String TRASH_DIRECTORY_NAME
See Also:
Constant Field Values
Constructor Detail

FileSystemBinaryStore

protected FileSystemBinaryStore(File directory)
Method Detail

create

public static FileSystemBinaryStore create(File directory)

getDirectory

public File getDirectory()

storeValue

public BinaryValue storeValue(InputStream stream)
                       throws BinaryStoreException
Description copied from interface: BinaryStore
Store the binary value and return the JCR representation. Note that if the binary content in the supplied stream is already persisted in the store, the store may simply return the binary value referencing the existing content.

Parameters:
stream - the stream containing the binary content to be stored; may not be null
Returns:
the binary value representing the stored binary value; never null
Throws:
BinaryStoreException

moveFileExclusively

protected final void moveFileExclusively(File original,
                                         File destination)
                                  throws BinaryStoreException
Throws:
BinaryStoreException

findFile

protected final File findFile(File directory,
                              BinaryKey key,
                              boolean createParentDirsIfMissing)
                       throws BinaryStoreException
Throws:
BinaryStoreException

getInputStream

public InputStream getInputStream(BinaryKey key)
                           throws BinaryStoreException
Description copied from interface: BinaryStore
Get an InputStream to the binary content with the supplied key.

Parameters:
key - the key to the binary content; never null
Returns:
the input stream through which the content can be read
Throws:
BinaryStoreException - if there is a problem reading the content from the store

initializeStorage

protected void initializeStorage(File directory)
                          throws BinaryStoreException
Throws:
BinaryStoreException

markAsUnused

public void markAsUnused(Iterable<BinaryKey> keys)
                  throws BinaryStoreException
Description copied from interface: BinaryStore
Mark the supplied binary keys as unused, but key them in quarantine until needed again (at which point they're removed from quarantine) or until BinaryStore.removeValuesUnusedLongerThan(long, TimeUnit) is called. This method ignores any keys for values not stored within this store.

Note that the implementation must never block.

Parameters:
keys - the keys for the binary values that are no longer needed
Throws:
BinaryStoreException - if there is a problem marking any of the supplied binary values as unused

markAsUnused

protected void markAsUnused(BinaryKey key)
                     throws BinaryStoreException
Throws:
BinaryStoreException

touch

protected void touch(File file)
              throws BinaryStoreException
Throws:
BinaryStoreException

pruneEmptyDirectories

protected void pruneEmptyDirectories(File directory,
                                     File removeable)
Remove any empty directories above removeable but below directory

Parameters:
directory - the top-level directory to keep; may not be null and must be an ancestor of removeable
removeable - the file or directory above which any empty directories can be removed; may not be null

removeValuesUnusedLongerThan

public void removeValuesUnusedLongerThan(long minimumAge,
                                         TimeUnit unit)
                                  throws BinaryStoreException
Description copied from interface: BinaryStore
Remove binary values that have been unused for at least the specified amount of time.

Note that the implementation must never block.

Parameters:
minimumAge - the minimum time that a binary value has been unused before it can be removed; must be non-negative
unit - the time unit for the minimum age; may not be null
Throws:
BinaryStoreException - if there is a problem removing the unused values

getExtractedText

public String getExtractedText(BinaryValue source)
                        throws BinaryStoreException
Description copied from interface: BinaryStore
Retrieves the extracted text of a binary value, which may or may not have been stored previously.

Parameters:
source - a non-null BinaryValue instance from which the text was extracted
Returns:
a String representing the extracted text, or null if such text hasn't been stored in this store previously.
Throws:
BinaryStoreException - if the operation fails

storeExtractedText

public void storeExtractedText(BinaryValue source,
                               String extractedText)
                        throws BinaryStoreException
Description copied from interface: BinaryStore
Stores the extracted text of a binary value into this store.

Parameters:
source - a non-null BinaryValue instance from which the text was extracted
extractedText - a non-null and non-blank string representing the extracted text
Throws:
BinaryStoreException - if the operation fails for whatever reason

getStoredMimeType

protected String getStoredMimeType(BinaryValue binaryValue)
                            throws BinaryStoreException
Description copied from class: AbstractBinaryStore
Returns the stored mime-type of a binary value.

Overrides:
getStoredMimeType in class AbstractBinaryStore
Parameters:
binaryValue - a non-null BinaryValue
Returns:
either a non-empty String if a stored mimetype exists, or null if such a value doesn't exist yet.
Throws:
BinaryStoreException - if there's a problem accessing the binary store

storeMimeType

protected void storeMimeType(BinaryValue binaryValue,
                             String mimeType)
                      throws BinaryStoreException
Description copied from class: AbstractBinaryStore
Stores the given mime-type for a binary value.

Overrides:
storeMimeType in class AbstractBinaryStore
Parameters:
binaryValue - a non-null BinaryValue
mimeType - a non-empty String
Throws:
BinaryStoreException - if there's a problem accessing the binary store

ModeShape Distribution 3.0.0.Beta1

Copyright © 2008-2012 JBoss, a division of Red Hat. All Rights Reserved.