Class ReadThroughCachingAttachmentManager
- java.lang.Object
-
- com.atlassian.confluence.impl.pages.attachments.ReadThroughCachingAttachmentManager
-
- All Implemented Interfaces:
AttachmentManagerInternal
,AttachmentManager
,DelegatingAttachmentManager
public class ReadThroughCachingAttachmentManager extends Object implements AttachmentManagerInternal, DelegatingAttachmentManager
Caches the download paths of attachments.- Since:
- 7.5
-
-
Constructor Summary
Constructors Constructor Description ReadThroughCachingAttachmentManager(AttachmentManagerInternal delegate, ReadThroughAttachmentDownloadPathCache pathCache)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
copyAttachment(Attachment attachment, ContentEntityObject destinationContent)
Copy specified attachment to specified destination content.void
copyAttachments(ContentEntityObject sourceContent, ContentEntityObject destinationContent)
Copy the latest version of all the attachments on the sourceContent to the destinationContent.void
copyAttachments(ContentEntityObject sourceContent, ContentEntityObject destinationContent, SaveContext saveContext)
Copy the latest version of all the attachments on the sourceContent to the destinationContent.int
countLatestVersionsOfAttachments(ContentEntityObject content)
Returns a count of the number of latest versions of attachmentsint
countLatestVersionsOfAttachmentsOnPageSince(ContentEntityObject content, Date since)
Fetches number of attachments changed on a page since a specific timestampint
countLatestVersionsOfAttachmentsWithAnyStatus(ContentEntityObject content)
Returns a count of the number of latest versions of attachments (including trashed)void
deepAttachmentDelete(AttachmentDeleteOptions attachmentDeleteOptions)
Support delete multiple attachments in batchOptional<Attachment>
findAttachmentForDownloadPath(String downloadPath)
Find anAttachment
for the givendownloadPath
.List<Attachment>
getAllVersions(Attachment attachment)
Get all versions of an attachment, starting with the current versionList<Attachment>
getAllVersionsOfAttachments(ContentEntityObject content)
Returns a list of all attachments, old and new.Attachment
getAttachment(long id)
Attachment
getAttachment(ContentEntityObject content, String attachmentFileName)
Get the most recent version of an attachment with a given name for a particular pageAttachment
getAttachment(ContentEntityObject content, String attachmentFileName, int version)
Retrieve a named attachment from a pageAttachmentDao
getAttachmentDao()
Provides a back door to the underlyingAttachmentDao
.InputStream
getAttachmentData(Attachment attachment)
Retrieve the data for attachmentInputStream
getAttachmentData(Attachment attachment, Optional<RangeRequest> range)
Retrieve the specified range of data for attachmentString
getAttachmentDownloadPath(ContentEntityObject content, String attachmentFileName)
Get the download path for the most recent version of an attachment with the given name for some contentAttachmentManager
getAttachmentManager()
Return the AttachmentManager implementation that the delegator wrapsList<Attachment>
getAttachments(List<Long> ids)
Returns a list of attachments matching the given list of IDs.Optional<AttachmentStatisticsDTO>
getAttachmentStatistics()
Fetches statistics about attachmentsAttachmentDataStorageType
getBackingStorageType()
Returns the currently active storage type.AttachmentDao.AttachmentCopier
getCopier(AttachmentManager destination)
Retrieves a AttachmentDao.AttachmentCopier that will allow the attachments from one data store to be copied across to another.PageResponse<Attachment>
getFilteredAttachments(ContentEntityObject content, LimitedRequest pageRequest, Predicate<? super Attachment> filterPredicate)
Returns the current attachments under the CEO.List<Attachment>
getLastAddedVersionsOf(Attachment attachment)
Retrieves all the last added versions for each user who has added a version of the attachment That is, if a user has added multiple versions, only the latest added version will be added to the list returned.List<Attachment>
getLatestVersionsOfAttachments(ContentEntityObject content)
Returns a list of only latest versions of attachments.List<Attachment>
getLatestVersionsOfAttachmentsForMultipleCeos(Iterable<? extends ContentEntityObject> contentEntityObjects)
Returns a list of all the latest versions of attachments for all the CEOs providedList<Attachment>
getLatestVersionsOfAttachmentsWithAnyStatus(ContentEntityObject content)
Returns a list of only latest versions of attachments (including trashed).List<Attachment>
getLatestVersionsOfAttachmentsWithAnyStatusForContainers(Iterable<? extends ContentEntityObject> contentEntityObjects)
Returns a list of all the latest versions of attachments for all the CEOs provided (including trashed)AttachmentDao.AttachmentMigrator
getMigrator(AttachmentManager destination)
Retrieves a AttachmentDao.AttachmentMigrator that will allow the attachments from one data store to be moved across to another.List<Attachment>
getPreviousVersions(Attachment attachment)
Get all non-current versions of an attachment, not including the current version.Map<Long,Long>
getRemappedAttachmentIds()
Gets a list of remapped attachment IDs.void
moveAttachment(Attachment latestVersion, ContentEntityObject newContainer)
Moves an attachment to a differentContentEntityObject
container.void
moveAttachment(Attachment latestVersion, String fileName, ContentEntityObject newContent)
void
removeAttachmentFromServer(Attachment attachment)
Removes an Attachment and its data from the server and data store.void
removeAttachments(List<? extends Attachment> attachments)
Removes the contents of attachments from the servervoid
removeAttachmentVersionFromServer(Attachment attachment)
Removes the given version of the Attachment and its data from the server and data store.void
removeAttachmentVersionFromServerWithoutNotifications(Attachment attachment)
Removes the given version of the Attachment and its data from the server and data store while suppressing notifications.void
removeAttachmentWithoutNotifications(Attachment attachment)
Removes an Attachment and its data from the server while suppressing notifications.void
restore(Attachment attachment)
Restores an attachment from trash.void
saveAttachment(Attachment attachment, @Nullable Attachment previousVersion, InputStream attachmentData, SaveContext saveContext)
Saves an Attachment and its data, taking aSaveContext
to allow more useful event handling.void
saveAttachment(Attachment attachment, Attachment previousVersion, InputStream attachmentData)
Saves an Attachment and its datavoid
saveAttachments(List<SavableAttachment> savableAttachments)
Saves multiple attachment and their datavoid
saveAttachments(List<SavableAttachment> savableAttachments, SaveContext saveContext)
Saves multiple attachment and their datavoid
setAttachmentData(Attachment attachment, InputStream attachmentData)
Set the data belonging to attachmentvoid
trash(Attachment attachment)
Moves an attachment to the trash.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.atlassian.confluence.pages.AttachmentManager
getAttachmentForDownloadPath
-
Methods inherited from interface com.atlassian.confluence.internal.pages.AttachmentManagerInternal
getAttachments
-
-
-
-
Constructor Detail
-
ReadThroughCachingAttachmentManager
public ReadThroughCachingAttachmentManager(AttachmentManagerInternal delegate, ReadThroughAttachmentDownloadPathCache pathCache)
-
-
Method Detail
-
deepAttachmentDelete
public void deepAttachmentDelete(AttachmentDeleteOptions attachmentDeleteOptions)
Description copied from interface:AttachmentManager
Support delete multiple attachments in batch- Specified by:
deepAttachmentDelete
in interfaceAttachmentManager
-
getAttachment
public Attachment getAttachment(long id)
- Specified by:
getAttachment
in interfaceAttachmentManager
- Returns:
- attachment with id
-
getAttachments
public List<Attachment> getAttachments(List<Long> ids)
Description copied from interface:AttachmentManager
Returns a list of attachments matching the given list of IDs. Returns an empty list if no such attachments exist. In the case where some IDs exist and some don't, only the existing Attachments will be returned.- Specified by:
getAttachments
in interfaceAttachmentManager
- Parameters:
ids
- list of IDs to retrieve.- Returns:
- attachments matching ids in the list
-
getAllVersionsOfAttachments
public List<Attachment> getAllVersionsOfAttachments(ContentEntityObject content)
Description copied from interface:AttachmentManager
Returns a list of all attachments, old and new.- Specified by:
getAllVersionsOfAttachments
in interfaceAttachmentManager
-
getLatestVersionsOfAttachments
public List<Attachment> getLatestVersionsOfAttachments(ContentEntityObject content)
Description copied from interface:AttachmentManager
Returns a list of only latest versions of attachments.- Specified by:
getLatestVersionsOfAttachments
in interfaceAttachmentManager
-
getLatestVersionsOfAttachmentsForMultipleCeos
public List<Attachment> getLatestVersionsOfAttachmentsForMultipleCeos(Iterable<? extends ContentEntityObject> contentEntityObjects)
Description copied from interface:AttachmentManager
Returns a list of all the latest versions of attachments for all the CEOs provided- Specified by:
getLatestVersionsOfAttachmentsForMultipleCeos
in interfaceAttachmentManager
-
getLatestVersionsOfAttachmentsWithAnyStatus
public List<Attachment> getLatestVersionsOfAttachmentsWithAnyStatus(ContentEntityObject content)
Description copied from interface:AttachmentManager
Returns a list of only latest versions of attachments (including trashed).- Specified by:
getLatestVersionsOfAttachmentsWithAnyStatus
in interfaceAttachmentManager
-
getLatestVersionsOfAttachmentsWithAnyStatusForContainers
public List<Attachment> getLatestVersionsOfAttachmentsWithAnyStatusForContainers(Iterable<? extends ContentEntityObject> contentEntityObjects)
Description copied from interface:AttachmentManagerInternal
Returns a list of all the latest versions of attachments for all the CEOs provided (including trashed)- Specified by:
getLatestVersionsOfAttachmentsWithAnyStatusForContainers
in interfaceAttachmentManagerInternal
-
getFilteredAttachments
public PageResponse<Attachment> getFilteredAttachments(ContentEntityObject content, LimitedRequest pageRequest, Predicate<? super Attachment> filterPredicate)
Returns the current attachments under the CEO.- Specified by:
getFilteredAttachments
in interfaceAttachmentManagerInternal
- Parameters:
content
- the content to return attachments forpageRequest
- the pagination requestedfilterPredicate
- the predicate for filtering found attachments- Returns:
- the paginated response of Page entities
-
countLatestVersionsOfAttachments
public int countLatestVersionsOfAttachments(ContentEntityObject content)
Description copied from interface:AttachmentManager
Returns a count of the number of latest versions of attachments- Specified by:
countLatestVersionsOfAttachments
in interfaceAttachmentManager
-
countLatestVersionsOfAttachmentsWithAnyStatus
public int countLatestVersionsOfAttachmentsWithAnyStatus(ContentEntityObject content)
Description copied from interface:AttachmentManager
Returns a count of the number of latest versions of attachments (including trashed)- Specified by:
countLatestVersionsOfAttachmentsWithAnyStatus
in interfaceAttachmentManager
-
countLatestVersionsOfAttachmentsOnPageSince
public int countLatestVersionsOfAttachmentsOnPageSince(ContentEntityObject content, Date since)
Description copied from interface:AttachmentManager
Fetches number of attachments changed on a page since a specific timestamp- Specified by:
countLatestVersionsOfAttachmentsOnPageSince
in interfaceAttachmentManager
- Parameters:
content
- the content objectsince
- the date of earliest change- Returns:
- the number of attachments on a content object (including trashed) changed since
-
getAttachmentStatistics
public Optional<AttachmentStatisticsDTO> getAttachmentStatistics()
Description copied from interface:AttachmentManager
Fetches statistics about attachments- Specified by:
getAttachmentStatistics
in interfaceAttachmentManager
- Returns:
- an AttachmentStatisticsDTO object with statistics about attachments such as total and current count
-
getAttachmentData
public InputStream getAttachmentData(Attachment attachment)
Description copied from interface:AttachmentManager
Retrieve the data for attachment- Specified by:
getAttachmentData
in interfaceAttachmentManager
- Parameters:
attachment
- the Attachment the data belongs to- Returns:
- InputStream representing the data
-
getAttachmentData
public InputStream getAttachmentData(Attachment attachment, Optional<RangeRequest> range)
Description copied from interface:AttachmentManager
Retrieve the specified range of data for attachment- Specified by:
getAttachmentData
in interfaceAttachmentManager
- Parameters:
attachment
- the Attachment the data belongs torange
- the range of data to retrieve. Seecom.atlassian.filestore.client.api.entity.ByteRanges
- Returns:
- InputStream representing the data
-
removeAttachmentWithoutNotifications
public void removeAttachmentWithoutNotifications(Attachment attachment)
Description copied from interface:AttachmentManager
Removes an Attachment and its data from the server while suppressing notifications. This is useful when you don't want to send notifications when removing the file.- Specified by:
removeAttachmentWithoutNotifications
in interfaceAttachmentManager
-
removeAttachmentFromServer
public void removeAttachmentFromServer(Attachment attachment)
Description copied from interface:AttachmentManager
Removes an Attachment and its data from the server and data store.- Specified by:
removeAttachmentFromServer
in interfaceAttachmentManager
- Parameters:
attachment
- the Attachment to remove
-
removeAttachmentVersionFromServer
public void removeAttachmentVersionFromServer(Attachment attachment)
Description copied from interface:AttachmentManager
Removes the given version of the Attachment and its data from the server and data store.In case of the given attachment being the latest version, the previous version (if any) gets removed and the given object impersonates the previous version as the latest version.
- Specified by:
removeAttachmentVersionFromServer
in interfaceAttachmentManager
- Parameters:
attachment
- the Attachment to remove
-
removeAttachmentVersionFromServerWithoutNotifications
public void removeAttachmentVersionFromServerWithoutNotifications(Attachment attachment)
Description copied from interface:AttachmentManager
Removes the given version of the Attachment and its data from the server and data store while suppressing notifications. This is useful when you don't want to send notifications when removing the file.In case of the given attachment being the latest version, the previous version (if any) gets removed and the given object impersonates the previous version as the latest version.
- Specified by:
removeAttachmentVersionFromServerWithoutNotifications
in interfaceAttachmentManager
- Parameters:
attachment
- the Attachment to remove
-
removeAttachments
public void removeAttachments(List<? extends Attachment> attachments)
Description copied from interface:AttachmentManager
Removes the contents of attachments from the server- Specified by:
removeAttachments
in interfaceAttachmentManager
- Parameters:
attachments
- a List of Attachments- See Also:
AttachmentManager.removeAttachmentFromServer(Attachment)
-
moveAttachment
public void moveAttachment(Attachment latestVersion, String fileName, ContentEntityObject newContent)
- Specified by:
moveAttachment
in interfaceAttachmentManager
- Parameters:
latestVersion
- The attachment to be movedfileName
- New name of the filenewContent
- The new contentEntiityObject which will be parent to the attachment
-
moveAttachment
public void moveAttachment(Attachment latestVersion, ContentEntityObject newContainer)
Description copied from interface:AttachmentManagerInternal
Moves an attachment to a differentContentEntityObject
container.- Specified by:
moveAttachment
in interfaceAttachmentManagerInternal
- Parameters:
latestVersion
- The attachment to be movednewContainer
- The new ContentEntiityObject which will be parent to the attachment
-
copyAttachments
public void copyAttachments(ContentEntityObject sourceContent, ContentEntityObject destinationContent) throws IOException
Description copied from interface:AttachmentManager
Copy the latest version of all the attachments on the sourceContent to the destinationContent.- Specified by:
copyAttachments
in interfaceAttachmentManager
- Parameters:
sourceContent
- the content with attachments to be copied.destinationContent
- the content to copy the attachments to.- Throws:
IOException
- if there are problems reading or writing attachment data during the copy.
-
copyAttachments
public void copyAttachments(ContentEntityObject sourceContent, ContentEntityObject destinationContent, SaveContext saveContext) throws IOException
Description copied from interface:AttachmentManager
Copy the latest version of all the attachments on the sourceContent to the destinationContent.- Specified by:
copyAttachments
in interfaceAttachmentManager
- Parameters:
sourceContent
- the content with attachments to be copied.destinationContent
- the content to copy the attachments to.saveContext
- details the circumstances under which the attachments are being copied.- Throws:
IOException
- if there are problems reading or writing attachment data during the copy.
-
copyAttachment
public void copyAttachment(Attachment attachment, ContentEntityObject destinationContent) throws IOException
Description copied from interface:AttachmentManager
Copy specified attachment to specified destination content.- Specified by:
copyAttachment
in interfaceAttachmentManager
- Parameters:
attachment
- the attachmentdestinationContent
- the destination- Throws:
IOException
-
getAttachment
public Attachment getAttachment(ContentEntityObject content, String attachmentFileName, int version)
Description copied from interface:AttachmentManager
Retrieve a named attachment from a page- Specified by:
getAttachment
in interfaceAttachmentManager
- Parameters:
content
- the page the attachment is attached toattachmentFileName
- the filename of the attachment to retrieveversion
- the version of the attachment to retrieve. If you provide a version of 0 or less, you'll get the most recent version, but you should probably use #getAttachment(AbstractPage, String) instead for that purpose instead- Returns:
- the requested attachment, or null if the requested attachment does not exist.
-
getAttachment
public Attachment getAttachment(ContentEntityObject content, String attachmentFileName)
Description copied from interface:AttachmentManager
Get the most recent version of an attachment with a given name for a particular page- Specified by:
getAttachment
in interfaceAttachmentManager
- Parameters:
content
- the page the attachment is attached toattachmentFileName
- the filename of the attachment to be retrieved- Returns:
- the appropriate attachment, or null if no such attachment exists
-
getAttachmentDownloadPath
public String getAttachmentDownloadPath(ContentEntityObject content, String attachmentFileName)
Description copied from interface:AttachmentManager
Get the download path for the most recent version of an attachment with the given name for some content- Specified by:
getAttachmentDownloadPath
in interfaceAttachmentManager
- Parameters:
content
- the content the attachment is attached toattachmentFileName
- the filename of the attachment to be retrieved- Returns:
- the appropriate attachment download path, or null if no such attachment exists
-
saveAttachment
public void saveAttachment(Attachment attachment, @Nullable Attachment previousVersion, InputStream attachmentData, SaveContext saveContext) throws IOException
Description copied from interface:AttachmentManager
Saves an Attachment and its data, taking aSaveContext
to allow more useful event handling.- Specified by:
saveAttachment
in interfaceAttachmentManager
- Parameters:
attachment
- the modified version of the AttachmentpreviousVersion
- the original version of the Attachment (null if new)attachmentData
- an InputStream representing the data of the AttachmentsaveContext
- provides more information about the circumstances of the save- Throws:
IOException
-
saveAttachment
public void saveAttachment(Attachment attachment, Attachment previousVersion, InputStream attachmentData) throws IOException
Description copied from interface:AttachmentManager
Saves an Attachment and its data- Specified by:
saveAttachment
in interfaceAttachmentManager
- Parameters:
attachment
- the modified version of the AttachmentpreviousVersion
- the original version of the Attachment (null if new)attachmentData
- an InputStream representing the data of the Attachment- Throws:
IOException
-
saveAttachments
public void saveAttachments(List<SavableAttachment> savableAttachments, SaveContext saveContext) throws IOException
Description copied from interface:AttachmentManager
Saves multiple attachment and their data- Specified by:
saveAttachments
in interfaceAttachmentManager
- Parameters:
savableAttachments
- the modified version of the AttachmentsaveContext
- provides more details about saving. If in doubt passDefaultSaveContext.DEFAULT
.- Throws:
IOException
-
saveAttachments
public void saveAttachments(List<SavableAttachment> savableAttachments) throws IOException
Description copied from interface:AttachmentManager
Saves multiple attachment and their data- Specified by:
saveAttachments
in interfaceAttachmentManager
- Parameters:
savableAttachments
- the modified version of the Attachment- Throws:
IOException
-
setAttachmentData
public void setAttachmentData(Attachment attachment, InputStream attachmentData) throws AttachmentDataExistsException
Description copied from interface:AttachmentManager
Set the data belonging to attachmentThis method can be used when there is missing data for an Attachment (e.g. during imports) and the data needs to be set manually.
- Specified by:
setAttachmentData
in interfaceAttachmentManager
- Parameters:
attachment
- Attachment the data belongs toattachmentData
- the data to be saved- Throws:
AttachmentDataExistsException
- if data for attachment already exists
-
getMigrator
public AttachmentDao.AttachmentMigrator getMigrator(AttachmentManager destination)
Description copied from interface:AttachmentManager
Retrieves a AttachmentDao.AttachmentMigrator that will allow the attachments from one data store to be moved across to another.- Specified by:
getMigrator
in interfaceAttachmentManager
- Parameters:
destination
- the AttachmentManager the data is being moved to- Returns:
- an AttachmentMigrator object
-
getCopier
public AttachmentDao.AttachmentCopier getCopier(AttachmentManager destination)
Description copied from interface:AttachmentManager
Retrieves a AttachmentDao.AttachmentCopier that will allow the attachments from one data store to be copied across to another.- Specified by:
getCopier
in interfaceAttachmentManager
- Parameters:
destination
- the AttachmentManager the data is being copied to- Returns:
- an AttachmentCopier object
-
getAttachmentDao
public AttachmentDao getAttachmentDao()
Description copied from interface:AttachmentManagerInternal
Provides a back door to the underlyingAttachmentDao
. Obviously it's better access the DAO directly, so this is deprecated.- Specified by:
getAttachmentDao
in interfaceAttachmentManager
- Specified by:
getAttachmentDao
in interfaceAttachmentManagerInternal
- Returns:
- An AttachmentDao instance
-
getAllVersions
public List<Attachment> getAllVersions(Attachment attachment)
Description copied from interface:AttachmentManager
Get all versions of an attachment, starting with the current version- Specified by:
getAllVersions
in interfaceAttachmentManager
-
getPreviousVersions
public List<Attachment> getPreviousVersions(Attachment attachment)
Description copied from interface:AttachmentManager
Get all non-current versions of an attachment, not including the current version. (ordered from most recent)- Specified by:
getPreviousVersions
in interfaceAttachmentManager
- Parameters:
attachment
- the attachment to get all non-current versions for.
-
getLastAddedVersionsOf
public List<Attachment> getLastAddedVersionsOf(Attachment attachment)
Description copied from interface:AttachmentManager
Retrieves all the last added versions for each user who has added a version of the attachment That is, if a user has added multiple versions, only the latest added version will be added to the list returned. Result will be sorted with the earliest version coming first.- Specified by:
getLastAddedVersionsOf
in interfaceAttachmentManager
- Parameters:
attachment
- attachment (must be the latest version)- Returns:
- the last added versions for each user who has added a version of the attachment
-
getBackingStorageType
public AttachmentDataStorageType getBackingStorageType()
Description copied from interface:AttachmentManager
Returns the currently active storage type.- Specified by:
getBackingStorageType
in interfaceAttachmentManager
- See Also:
AttachmentDao.getBackingStorageType()
-
trash
public void trash(Attachment attachment)
Description copied from interface:AttachmentManager
Moves an attachment to the trash.- Specified by:
trash
in interfaceAttachmentManager
- Parameters:
attachment
- the attachment to be trashed
-
restore
public void restore(Attachment attachment)
Description copied from interface:AttachmentManager
Restores an attachment from trash.- Specified by:
restore
in interfaceAttachmentManager
- Parameters:
attachment
- the attachment to restore
-
findAttachmentForDownloadPath
public Optional<Attachment> findAttachmentForDownloadPath(String downloadPath)
Description copied from interface:AttachmentManager
Find anAttachment
for the givendownloadPath
.The path must at least contain the segment produced by
Attachment.getDownloadPath()
, that is /download/attachments/<contentId>/<fileName> where <contentId> identifies a validContentEntityObject
and <fileName> identifies a validAttachment
attached to thatContentEntityObject
.- Specified by:
findAttachmentForDownloadPath
in interfaceAttachmentManager
- Parameters:
downloadPath
- the download path identifying anAttachment
.This value is expected to be url encoded, with spaces converted to %20 instead of a '+'- Returns:
- maybe the attachment if the given download path matches the criteria as described above and the referenced objects are known to the system
- See Also:
Attachment.getDownloadPath()
-
getAttachmentManager
public AttachmentManager getAttachmentManager()
Description copied from interface:DelegatingAttachmentManager
Return the AttachmentManager implementation that the delegator wraps- Specified by:
getAttachmentManager
in interfaceDelegatingAttachmentManager
- Returns:
- an AttachmentManager instance
-
getRemappedAttachmentIds
public Map<Long,Long> getRemappedAttachmentIds()
Description copied from interface:AttachmentManager
Gets a list of remapped attachment IDs. The key is the old ID and the value is the new ID.- Specified by:
getRemappedAttachmentIds
in interfaceAttachmentManager
- Returns:
- A map where the key is the original ID and the value is the new ID.
-
-