Class FileSystemContentManager

java.lang.Object
com.aquima.interactions.portal.content.FileSystemContentManager
All Implemented Interfaces:
IChannelContentManager, IContentManager, IMovingContentManager

public class FileSystemContentManager extends Object implements IChannelContentManager
A manager of content on a file system.

Path / File name generation is delegated to an instance of IFileSystemNamingStrategy.

This manager creates two files for snippet of content that is managed:

  • a file that contains the content;
  • another file that contains the meta-data related to the content. meta-data file also contains the roles acquired by the content.
The path identifier for both of these files (as generated by the namingStrategy) is equal, but applied to a different root/base path: Content is stored in files that are relative to the path segment as identified by "DATA", where meta-data is stored relative to "METADATA".

This implementation does not explicitly store the file size in the metadata. Instead, whenever a metadata-representation is constructed, the instance is complemented with file size information that is obtained from the filesystem directly.

Since:
9.3
Author:
G. der Kinderen
  • Field Details Link icon

    • CONTENT_PATHSEGMENT Link icon

      public static final String CONTENT_PATHSEGMENT
      The identifier of the path segment that is prepended to all files that contain the (raw) content.
      See Also:
    • METADATA_PATHSEGMENT Link icon

      public static final String METADATA_PATHSEGMENT
      The identifier of the path segment that is prepended to all files that contain metadata.
      See Also:
  • Constructor Details Link icon

    • FileSystemContentManager Link icon

      public FileSystemContentManager(FileSystemConnection connection)
      Constructs a new manager, using a default naming strategy.
      Parameters:
      connection - The connection providing access to the content store (cannot be null).
      Since:
      9.3
    • FileSystemContentManager Link icon

      public FileSystemContentManager(FileSystemConnection connection, IFileSystemNamingStrategy namingStrategy, FileRoleCache roleCache)
      Constructs a new manager.
      Parameters:
      connection - The connection providing access to the content store (cannot be null).
      namingStrategy - a path/name converter (cannot be null).
      Since:
      9.3
  • Method Details Link icon

    • create Link icon

      @Deprecated public GUID create(InputStream stream, String name, String contentType, Long processId, String caseId, CustomContentProperties properties, IUserData user, String... roles)
      Deprecated.
      Description copied from interface: IContentManager
      Add new content to the repository.
      Specified by:
      create in interface IContentManager
      Parameters:
      stream - The stream containing the data, may not be null.
      name - A name for the content, may not be null.
      contentType - The content type of the data, may be null if unknown.
      processId - The id of the process where this content is part of, may be null.
      caseId - The id of the case where this content is part of, may be null.
      properties - Custom properties that should be stored with the content, may not be null.
      user - The user who is considered the creator of the content, may not be null.
      roles - The list of authorized roles associated to this content, may not be null.
      Returns:
      Returns a GUID that uniquely identifies the content, never null.
    • create Link icon

      public GUID create(ReadableByteChannel readableByteChannel, String name, String contentType, Long processId, String caseId, CustomContentProperties properties, IUserData user, String... roles)
      Description copied from interface: IChannelContentManager
      Add new content to the repository.
      Specified by:
      create in interface IChannelContentManager
      Parameters:
      readableByteChannel - The channel representing connection to the data, may not be null.
      name - A name for the content, may not be null.
      contentType - The content type of the data, may be null if unknown.
      processId - The id of the process where this content is part of, may be null.
      caseId - The id of the case where this content is part of, may be null.
      properties - Custom properties that should be stored with the content, may not be null.
      user - The user who is considered the creator of the content, may not be null.
      roles - The list of authorized roles associated to this content, may not be null.
      Returns:
      Returns a GUID that uniquely identifies the content, never null.
    • readMetadata Link icon

      public IContentMetadata readMetadata(GUID id, IUserData user, boolean checkRoles)
      Description copied from interface: IContentManager
      Reads only the metadata for a given content id.
      Specified by:
      readMetadata in interface IContentManager
      Parameters:
      id - The id of the content for which metadata is requested, may not be null.
      user - The user that is reading the content, may not be null.
      checkRoles - Flag indicating if the roles check should be done or not.
      Returns:
      Returns an IContentMetadataIContentMetadata object containing the requested meta data, never null.
    • readRoles Link icon

      public String[] readRoles(GUID id, IUserData user)
      Description copied from interface: IContentManager
      Reads the required roles for a given content id.
      Specified by:
      readRoles in interface IContentManager
      Parameters:
      id - The id of the content for which roles are requested, may not be null.
      user - The user that is reading the content, may not be null.
      Returns:
      Returns a list of required roles. Can be null.
    • update Link icon

      public void update(GUID id, String[] newRoles, IUserData user)
      Description copied from interface: IContentManager
      Update the existing content with new roles, but keep the existing data and metadata.
      Specified by:
      update in interface IContentManager
      Parameters:
      id - The id of the content which should be updated, may not be null.
      newRoles - The list of new roles. May not be null, may be empty.
      user - The user that is updating the content, may not be null.
    • update Link icon

      @Deprecated public void update(GUID id, InputStream stream, String name, String contentType, Long processId, String caseId, CustomContentProperties properties, IUserData user)
      Deprecated.
      Description copied from interface: IContentManager
      Update existing content with new data and metadata.
      Specified by:
      update in interface IContentManager
      Parameters:
      id - The id of the content which should be updated, may not be null.
      stream - The InputStream containing the new data, may not be null.
      name - A name for the content, may not be null.
      contentType - The content type of the new data, may be null.
      processId - The id of the case where this content is part of, may be null.
      caseId - The id of the case where this content is part of, may be null.
      properties - The new set of properties, this will completely overwrite the existing properties, may not be null.
      user - The user that is updating the content, may not be null.
    • update Link icon

      public void update(GUID id, ReadableByteChannel readableByteChannel, String name, String contentType, Long processId, String caseId, CustomContentProperties properties, IUserData user)
      Description copied from interface: IChannelContentManager
      Update existing content with new data and metadata.
      Specified by:
      update in interface IChannelContentManager
      Parameters:
      id - The id of the content which should be updated, may not be null.
      readableByteChannel - The channel representing connection to the data, may not be null.
      name - A name for the content, may not be null.
      contentType - The content type of the new data, may be null.
      processId - The id of the case where this content is part of, may be null.
      caseId - The id of the case where this content is part of, may be null.
      properties - The new set of properties, this will completely overwrite the existing properties, may not be null.
      user - The user that is updating the content, may not be null.
    • update Link icon

      @Deprecated public void update(GUID id, InputStream stream, String name, String contentType, IUserData user)
      Deprecated.
      Description copied from interface: IContentManager
      Update existing content with new data, but keep the existing metadata.
      Specified by:
      update in interface IContentManager
      Parameters:
      id - The id of the content which should be updated, may not be null.
      stream - The InputStream containing the new data, may not be null.
      name - A name for the content, may not be null.
      contentType - The content type of the new data, may be null.
      user - The user that is updating the content, may not be null.
    • update Link icon

      public void update(GUID id, ReadableByteChannel readableByteChannel, String name, String contentType, IUserData user)
      Description copied from interface: IChannelContentManager
      Update existing content with new data, but keep the existing metadata.
      Specified by:
      update in interface IChannelContentManager
      Parameters:
      id - The id of the content which should be updated, may not be null.
      readableByteChannel - The channel representing connection to the data, may not be null.
      name - A name for the content, may not be null.
      contentType - The content type of the new data, may be null.
      user - The user that is updating the content, may not be null.
    • update Link icon

      public void update(GUID id, Long processId, String caseId, CustomContentProperties properties, IUserData user)
      Description copied from interface: IContentManager
      Update existing content with new metadata, but keep the existing data.
      Specified by:
      update in interface IContentManager
      Parameters:
      id - The id of the content which should be updated, may not be null.
      processId - The id of the process where this content is part of, may be null.
      caseId - The id of the case where this content is part of, may be null.
      properties - The new set of properties, this will completely overwrite the existing properties, may not be null.
      user - The user that is updating the content, may not be null.
    • getImplementation Link icon

      public IMovingContentManager getImplementation()
      Description copied from interface: IMovingContentManager
      Method to retrieve the implementing class of the IMovingContentManager this method should walk any delegate to the original implementation
      Specified by:
      getImplementation in interface IMovingContentManager
      Returns:
      Returns the implementing class of the IMovingContentManager
    • move Link icon

      public GUID move(GUID fileId, IContentManager targetContentManager, IUserData user)
      Description copied from interface: IMovingContentManager
      Directly move content from one content manager to another using low level API.
      Specified by:
      move in interface IMovingContentManager
      Parameters:
      fileId - The id of the content, may not be null
      targetContentManager - The targeting content manager to move content to, may not be null
      user - The user that is moving the content, may not be null.
      Returns:
      Returns the new GUID that uniquely the moved content, never null.
    • notifyMove Link icon

      public void notifyMove(GUID id)
      Description copied from interface: IMovingContentManager
      Notify that a move has taken places on the IMovingContentManager.
      Specified by:
      notifyMove in interface IMovingContentManager
      Parameters:
      id - The id of the content that has been moved towards the content manager, may not be null
    • canMove Link icon

      public boolean canMove()
      Description copied from interface: IMovingContentManager
      Indicator of the implementation of IMovingContentManager is able to directly move content
      Specified by:
      canMove in interface IMovingContentManager
      Returns:
      Returns true it can directly move content.
    • delete Link icon

      public void delete(GUID id, IUserData user, boolean checkRoles)
      Description copied from interface: IContentManager
      Delete content from the repository
      Specified by:
      delete in interface IContentManager
      Parameters:
      id - The id of the content which should be deleted, may not be null.
      user - The user that is deleting the content, may not be null.
      checkRoles - Flag indicating if the roles check should be done or not.
    • isAuthorized Link icon

      public boolean isAuthorized(GUID id, IUserData user)
      Description copied from interface: IContentManager
      This method checks if the user has roles on this content with the given id.
      Specified by:
      isAuthorized in interface IContentManager
      Parameters:
      id - The id of the content, never null.
      user - The details of the user that wants to access the content, never null.
      Returns:
      A flag indicating if the user has roles on the document or not.
    • readBytes Link icon

      @Deprecated public int readBytes(GUID id, long position, byte[] buffer, int offset, int length, IUserData user)
      Deprecated.
      Description copied from interface: IContentManager
      Reads up to length bytes of data from content into a byte array. The method blocks until some input is available.

      Although publicly available, this method primarily facilitates the implementation of ContentInputStream. For reading content from an IContentManager, usage of ContentInputStream is recommended over direct usage of this method.

      If the user is not authorized it will throw an exception.

      Specified by:
      readBytes in interface IContentManager
      Parameters:
      id - The id of the content that should be read, may not be null.
      position - the start offset in the source content.
      buffer - The buffer into which the data is read, may not be null.
      offset - The start offset in the destination array buffer.
      length - The maximum number of bytes read.
      user - The user that is reading the content, may not be null.
      Returns:
      The total number of bytes read into the buffer, or -1 if there is no more data because the end of the content has been reached.
      See Also:
    • hasDisposableContent Link icon

      public boolean hasDisposableContent()
      Description copied from interface: IContentManager
      This method checks if the current content manager has any IDisposableContent contents.
      Specified by:
      hasDisposableContent in interface IContentManager
      Returns:
      A flag indicating whether the content manager has disposable content objects.
    • getDisposableContent Link icon

      public IDisposableContent getDisposableContent()
      Description copied from interface: IContentManager
      This method returns the content manager's disposable content.
      Specified by:
      getDisposableContent in interface IContentManager
    • toMetadataPath Link icon

      protected String toMetadataPath(GUID guid)
      Calculates the file system path in which metadata is stored for content identified by the provided identifier.

      The path that is returned will:

      • reference a file (as opposed to a directory)
      • not start with a file name-separator
      This method uses system-dependent default name-separators, but complements paths as returned by the namingStrategy.

      @param GUID content identifier (cannot be null).

      Returns:
      A (relative) path (never null).
    • toContentPath Link icon

      protected String toContentPath(GUID guid)
      Calculates the file system path in which content is stored that is identified by the provided identifier.

      The path that is returned will:

      • reference a file (as opposed to a directory)
      • not start with a file name-separator
      This method uses system-dependent default name-separators, but complements paths as returned by the namingStrategy.

      @param GUID content identifier (cannot be null).

      Returns:
      A (relative) path (never null).
    • getReadableByteChannel Link icon

      public ReadableByteChannel getReadableByteChannel(GUID id, IUserData user)
      Description copied from interface: IChannelContentManager
      Exposes a Channel for the Content of id. The caller of this method is responsible for closing the returned channel. If not closed it will acquire a shared (READ) FileLock in case of the FileSystemContentManager. If the user is not authorized it will throw an exception.
      Specified by:
      getReadableByteChannel in interface IChannelContentManager
      Parameters:
      id - The id of the content where a channel for is needed, may not be null.
      user - The user that is reading the content, may not be null.
      Returns:
      The total number of bytes read into the buffer, or -1 if there is no more data because the end of the content has been reached.