Class ContentDirectoryStructureAttachmentDataFileSystemV003

java.lang.Object
com.atlassian.confluence.impl.pages.attachments.filesystem.ContentDirectoryStructureAttachmentDataFileSystemV003
All Implemented Interfaces:
AttachmentDataFileSystem, AttachmentDataFileSystemV003

@Deprecated public class ContentDirectoryStructureAttachmentDataFileSystemV003 extends Object implements AttachmentDataFileSystem, AttachmentDataFileSystemV003
Deprecated.
An implementation of AttachmentDataFileSystem which stores the attachment data as files on a filesystem, using the standard File API.

The files are stored within a hierarchical directory structure that incorporates the IDs of the space, content entity and attachment IDs to which the attachment data belongs to. Data corresponding to each version of the attachment are stored, as are different "streams" of data for each version (see AttachmentDataStreamType.

For attachments belonging to "spaced" content entities (e.g. pages, blogs), the directory structure is described by the following pattern: "h1/h2/spaceId/h3/h4/contentId/attachmentId/attachmentFile"

where h1 and h2 are hashcodes generated from the spaceId, h3 and h4 are hashcodes generated from the contentId, and attachmentFile represents a combination of the attachment version and the data stream type. For backwards compatibility attachment files of type AttachmentDataStreamType.RAW_BINARY have a filename of just the numeric attachment version. For other stream types, the filename is "version.streamType" (e.g. "1.extracted_text").

For "non-spaced" entity attachments (e.g. user profile pictures), a simpler but similar structure is used: "nonspaced/h3/h4/contentId/attachmentId/attachmentFile"

Since:
7.12
  • Field Details

  • Method Details

    • create

      Deprecated.
    • dataExistsForAttachment

      public boolean dataExistsForAttachment(AttachmentRef attachment)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Indicates whether the filesystem contains data for the given attachment
      Specified by:
      dataExistsForAttachment in interface AttachmentDataFileSystem
    • moveAttachment

      public void moveAttachment(AttachmentRef oldAttachment, AttachmentRef newAttachment, AttachmentRef.Container newContent)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Move all data relating to one attachment to a new directory corresponding to the given new attachment and content entity.
      Specified by:
      moveAttachment in interface AttachmentDataFileSystem
      Parameters:
      oldAttachment - The attachment whose data is to be moved
      newAttachment - The attachment to which the data should be moved to
      newContent - The content entity corresponding to the new attachment
    • saveAttachmentData

      public boolean saveAttachmentData(AttachmentRef attachmentVersion, AttachmentDataStream attachmentDataStream, boolean overwrite, org.springframework.util.unit.DataSize expectedFileSize)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Save new data corresponding to the given attachment.
      Specified by:
      saveAttachmentData in interface AttachmentDataFileSystem
      Parameters:
      attachmentVersion - The attachment to which the data should be associated
      attachmentDataStream - The new data
      overwrite - If true, any existing data will be overwritten. If false, does nothing if data already exists.
      expectedFileSize - The expected size of the data being written
      Returns:
      true if the data was written, false otherwise (e.g. no overwrite)
    • containerPathForAttachmentVersions

      public com.atlassian.dc.filestore.api.compat.FilesystemPath containerPathForAttachmentVersions(long latestVersionAttachmentId, long contentId, @Nullable Long spaceId)
      Deprecated.
      Get the File representing the directory that contains all the versions of an attachment
      Specified by:
      containerPathForAttachmentVersions in interface AttachmentDataFileSystemV003
      Parameters:
      latestVersionAttachmentId - this should be the ID of the latest version or the directory will not exist
      contentId - the ID of the content containing the attachment
      spaceId - the ID of the space the content belongs to
      Returns:
      the File representing the directory that contains all the versions of an attachment
      Since:
      7.0.1
    • getAttachmentDataFile

      public AttachmentDataFile<com.atlassian.dc.filestore.api.compat.FilesystemPath> getAttachmentDataFile(long attachmentId, Long containerId, @Nullable Long spaceId, Integer attachmentVersion, AttachmentDataStreamType dataStreamType)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      This method won't support S3 attachment storage. Use at your own risk.
      Specified by:
      getAttachmentDataFile in interface AttachmentDataFileSystem
    • deleteAllAttachmentVersions

      public void deleteAllAttachmentVersions(AttachmentRef attachment, AttachmentRef.Container originalContent)
      Deprecated.
      Delete all data corresponding to all versions of the given attachment

      This method will remove any empty folders left after removing the attachment data.

      Specified by:
      deleteAllAttachmentVersions in interface AttachmentDataFileSystem
      Parameters:
      attachment - the attachment for which data should be removed
      originalContent - the content the attachment belongs to
    • moveDataForAttachmentVersion

      public void moveDataForAttachmentVersion(AttachmentRef sourceAttachmentVersion, AttachmentRef targetAttachmentVersion)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Move the data associated with one attachment version, to being associated with a different attachment version
      Specified by:
      moveDataForAttachmentVersion in interface AttachmentDataFileSystem
      Parameters:
      sourceAttachmentVersion - The attachment version containing the data
      targetAttachmentVersion - The attachment version to which the data should be moved
    • deleteSingleAttachmentVersion

      public void deleteSingleAttachmentVersion(AttachmentRef attachment, AttachmentRef.Container originalContent)
      Deprecated.
      Delete the data corresponding to a single attachment version

      This method will remove any empty folders left after removing the attachment data.

      Specified by:
      deleteSingleAttachmentVersion in interface AttachmentDataFileSystem
      Parameters:
      attachment - the attachment for which data should be removed
      originalContent - the content the attachment belongs to
    • deleteSingleAttachmentVersion

      public void deleteSingleAttachmentVersion(AttachmentRef attachment, AttachmentRef.Container originalContent, AttachmentDataStreamType dataStreamType)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Delete the data of the specified stream type corresponding to a single attachment version
      Specified by:
      deleteSingleAttachmentVersion in interface AttachmentDataFileSystem
      Parameters:
      attachment - The attachment whose data should be deleted
      originalContent - The content entity associated with the attachment
      dataStreamType - The attachment stream type
    • getPathForSpace

      public com.atlassian.dc.filestore.api.compat.FilesystemPath getPathForSpace(@Nullable Long spaceId)
      Deprecated.
      Specified by:
      getPathForSpace in interface AttachmentDataFileSystemV003
    • getRootPath

      public com.atlassian.dc.filestore.api.compat.FilesystemPath getRootPath()
      Deprecated.
    • getAttachmentData

      public AttachmentDataStream getAttachmentData(AttachmentRef attachment, AttachmentDataStreamType dataStreamType)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Fetches the data for a given attachment version and data stream type
      Specified by:
      getAttachmentData in interface AttachmentDataFileSystem
      Parameters:
      attachment - The attachment version for which the data is to be fetched
      dataStreamType - The type of the data stream to be fetched
      Returns:
      The AttachmentDataStream containing the result
    • getAttachmentData

      public AttachmentDataStream getAttachmentData(AttachmentRef attachment, AttachmentDataStreamType dataStreamType, Optional<RangeRequest> range)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Fetches the specified range of data for a given attachment version and data stream type
      Specified by:
      getAttachmentData in interface AttachmentDataFileSystem
      Parameters:
      attachment - The attachment version for which the data is to be fetched
      dataStreamType - The type of the data stream to be fetched
      range - The range of the data stream to be fetched
      Returns:
      The AttachmentDataStream containing the result
    • moveAttachments

      public void moveAttachments(AttachmentRef.Container contentEntity, AttachmentRef.Space oldSpace, AttachmentRef.Space newSpace)
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Move all data for all versions of all attachments corresponding to the given content entity in the given space, to the same entity in a different space.
      Specified by:
      moveAttachments in interface AttachmentDataFileSystem
      Parameters:
      contentEntity - The content entity whose attachment data is to be moved
      oldSpace - The original space of the content entity
      newSpace - The new space of the content entity
    • prepareForMigrationTo

      public void prepareForMigrationTo()
      Deprecated.
      In this implementation, we want to make sure the attachments' directory is empty, otherwise we will have attachments or files that don't belong.

      We also want to make sure the attachments' directory actually exists, prior to moving data across.

      It is the responsibility of the action performing the migration to warn the user about this.

      Specified by:
      prepareForMigrationTo in interface AttachmentDataFileSystem
    • getStructureVersion

      public AttachmentStorageVersion getStructureVersion()
      Deprecated.
      Description copied from interface: AttachmentDataFileSystem
      Version of the attachment storage structure.
      Specified by:
      getStructureVersion in interface AttachmentDataFileSystem