Class FileContentStore

  • All Implemented Interfaces:
    java.util.EventListener, org.alfresco.repo.content.ContentStore, org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware, org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>

    @AlfrescoPublicApi
    public class FileContentStore
    extends AbstractContentStore
    implements org.springframework.context.ApplicationContextAware, org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
    Provides a store of node content directly to the file system. The writers are generated using information from the simple content context.

    The file names obey, as they must, the URL naming convention as specified in the ContentStore interface.
    The protocols handled are:

    • store: These URLs can be generated by this implementation and are file references within the root directory.
    • spoof: These URLs are never generated by the implementation but represent spoofed binary text stream data.
    Author:
    Derek Hulley
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String SPOOF_PROTOCOL  
      static java.lang.String STORE_PROTOCOL
      store is the default prefix for file content URLs
      • Fields inherited from interface org.alfresco.repo.content.ContentStore

        NEW_CONTENT_CONTEXT, PROTOCOL_DELIMITER
    • Constructor Summary

      Constructors 
      Constructor Description
      FileContentStore​(org.springframework.context.ApplicationContext context, java.io.File rootDirectory)
      Public constructor for programmatic use.
      FileContentStore​(org.springframework.context.ApplicationContext context, java.io.File rootDirectory, java.util.Map<java.lang.String,​java.io.Serializable> extendedEventParams)  
      FileContentStore​(org.springframework.context.ApplicationContext context, java.lang.String rootDirectoryStr)
      Public constructor for programmatic use.
    • Field Detail

      • STORE_PROTOCOL

        public static final java.lang.String STORE_PROTOCOL
        store is the default prefix for file content URLs
        See Also:
        ContentStore.PROTOCOL_DELIMITER, Constant Field Values
    • Constructor Detail

      • FileContentStore

        public FileContentStore​(org.springframework.context.ApplicationContext context,
                                java.lang.String rootDirectoryStr)
        Public constructor for programmatic use.
        Parameters:
        context - application context through which events can be published
        rootDirectoryStr - the root under which files will be stored. The directory will be created if it does not exist.
        See Also:
        FileContentStore(File)
      • FileContentStore

        public FileContentStore​(org.springframework.context.ApplicationContext context,
                                java.io.File rootDirectory)
        Public constructor for programmatic use.
        Parameters:
        context - application context through which events can be published
        rootDirectory - the root under which files will be stored. The directory will be created if it does not exist.
      • FileContentStore

        public FileContentStore​(org.springframework.context.ApplicationContext context,
                                java.io.File rootDirectory,
                                java.util.Map<java.lang.String,​java.io.Serializable> extendedEventParams)
    • Method Detail

      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • setApplicationContext

        public void setApplicationContext​(org.springframework.context.ApplicationContext applicationContext)
                                   throws org.springframework.beans.BeansException
        Specified by:
        setApplicationContext in interface org.springframework.context.ApplicationContextAware
        Throws:
        org.springframework.beans.BeansException
      • setAllowRandomAccess

        public void setAllowRandomAccess​(boolean allowRandomAccess)
        Stores may optionally produce readers and writers that support random access. Switch this off for this store by setting this to false.

        This switch is primarily used during testing to ensure that the system has the ability to spoof random access in cases where the store is unable to produce readers and writers that allow random access. Typically, stream-based access would be an example.

        Parameters:
        allowRandomAccess - true to allow random access, false to have it faked
      • setReadOnly

        public void setReadOnly​(boolean readOnly)
        File stores may optionally be declared read-only. This is useful when configuring a store, possibly temporarily, to act as a source of data but to preserve it against any writes.
        Parameters:
        readOnly - true to force the store to only allow reads.
      • setFileContentUrlProvider

        public void setFileContentUrlProvider​(FileContentUrlProvider fileContentUrlProvider)
      • isWriteSupported

        public boolean isWriteSupported()
        Specified by:
        isWriteSupported in interface org.alfresco.repo.content.ContentStore
        Returns:
        Returns true always
      • exists

        public boolean exists​(java.lang.String contentUrl)
        Performs a direct check against the file for its existence. For spoofed URLs, the URL always exists.
        Specified by:
        exists in interface org.alfresco.repo.content.ContentStore
        Overrides:
        exists in class AbstractContentStore
      • getSpaceFree

        public long getSpaceFree()
        Get the filesystem's free space.
        Specified by:
        getSpaceFree in interface org.alfresco.repo.content.ContentStore
        Overrides:
        getSpaceFree in class AbstractContentStore
        Returns:
        Returns the root directory partition's free space
      • getSpaceTotal

        public long getSpaceTotal()
        Get the filesystem's total space.
        Specified by:
        getSpaceTotal in interface org.alfresco.repo.content.ContentStore
        Overrides:
        getSpaceTotal in class AbstractContentStore
        Returns:
        Returns the root directory partition's total space
      • getRootLocation

        public java.lang.String getRootLocation()
        Specified by:
        getRootLocation in interface org.alfresco.repo.content.ContentStore
        Overrides:
        getRootLocation in class AbstractContentStore
        Returns:
        Returns the canonical path to the root directory
      • getReader

        public org.alfresco.service.cmr.repository.ContentReader getReader​(java.lang.String contentUrl)
        This implementation requires that the URL start with STORE_PROTOCOL or SPOOF_PROTOCOL
        Specified by:
        getReader in interface org.alfresco.repo.content.ContentStore
      • getWriterInternal

        public org.alfresco.service.cmr.repository.ContentWriter getWriterInternal​(org.alfresco.service.cmr.repository.ContentReader existingContentReader,
                                                                                   java.lang.String newContentUrl)
        Returns a writer onto a location based on the date.
        Overrides:
        getWriterInternal in class AbstractContentStore
        Parameters:
        existingContentReader - the existing content reader
        newContentUrl - the new content url
        Returns:
        Returns a writer onto a location based on the date
      • delete

        public boolean delete​(java.lang.String contentUrl)
        Attempts to delete the content. The actual deletion is optional on the interface so it just returns the success or failure of the underlying delete.
        Specified by:
        delete in interface org.alfresco.repo.content.ContentStore
        Overrides:
        delete in class AbstractContentStore
        Throws:
        java.lang.UnsupportedOperationException - if the store is read-only
        See Also:
        setReadOnly(boolean)
      • createNewFileStoreUrl

        public static java.lang.String createNewFileStoreUrl()
        Creates a new content URL. This must be supported by all stores that are compatible with Alfresco.
        Returns:
        Returns a new and unique content URL
      • onApplicationEvent

        public void onApplicationEvent​(org.springframework.context.ApplicationEvent event)
        Specified by:
        onApplicationEvent in interface org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
      • setDeleteEmptyDirs

        public void setDeleteEmptyDirs​(boolean deleteEmptyDirs)
        Configure the FileContentStore to delete empty parent directories upon deleting a content URL.
        Parameters:
        deleteEmptyDirs - the deleteEmptyDirs to set