com.atlassian.confluence.pages.attachments
Class CachingAttachmentDao

java.lang.Object
  extended by com.atlassian.confluence.pages.attachments.CachingAttachmentDao
All Implemented Interfaces:
DelegatingAttachmentDao, AttachmentDao, FlushableCachingDao

public class CachingAttachmentDao
extends Object
implements AttachmentDao, FlushableCachingDao, DelegatingAttachmentDao

Caches the IDs of attachments retrieved with getLatestAttachment(ContentEntityObject, String) in an AttachmentCache. Other methods simply delegate to the underlying DAO.

Because the persistent ID of the latest version of an attachment never changes, there's no need to synchronise the cache when an attachment is modified. However, the cache is updated when attachments are removed through this interface.

If for some reason the cache does get out of sync with the database, the lookup using the cached ID will fail. In this situation, we fall back to using the lookup by content ID + file name. The cache will then be corrected once the right result is retrieved from the database.

Since:
3.0
See Also:
AttachmentCache

Nested Class Summary
 
Nested classes/interfaces inherited from interface com.atlassian.confluence.pages.persistence.dao.AttachmentDao
AttachmentDao.AttachmentCopier, AttachmentDao.AttachmentMigrator
 
Constructor Summary
CachingAttachmentDao(AttachmentDao delegate, AttachmentCache cache)
           
 
Method Summary
 void afterMigrationFrom()
          Perform any tasks necessary after Attachment data has been moved from this data store to another.
 int countLatestVersionsOfAttachments(ContentEntityObject content)
           
 List<Attachment> findAll()
          Retrieves the latest versions of all Attachments Use of this method is discouraged when there are a large amount of Attachments.
 List<Attachment> findAllVersions(Attachment attachment)
           
 Iterator<Attachment> findLatestVersionsIterator()
          Retrieves the latest versions of all Attachments and returns an Iterator to the results.
 void flush()
          Flush the caches managed by this DAO.
 Attachment getAttachment(ContentEntityObject content, String fileName, int version)
          Return the attachment on the specified content with the given filename and version.
 InputStream getAttachmentData(Attachment attachment)
          Retrieves the InputStream representing the data for attachment
 AttachmentDataStorageType getBackingStorageType()
          Returns the backing storage type.
 Attachment getById(long id)
          Returns the attachment with the given persistent ID.
 List<Attachment> getByIds(List<Long> ids)
          Returns a list of attachments matching the given list of IDs.
 AttachmentDao.AttachmentCopier getCopier(AttachmentDao destinationDao)
          Get a copier object to copy attachments between data stores The source data store will remain untouched
 AttachmentDao getDelegate()
          Returns the attachment DAO which this instance delegates to.
 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.
 Attachment getLatestAttachment(ContentEntityObject content, String fileName)
          Return the latest version of the attachment on the specified content with the given filename.
 List<Attachment> getLatestVersionsOfAttachments(ContentEntityObject ceo)
          Retrieves the latest versions of all attachments to ceo
 PageResponse<Attachment> getLatestVersionsOfAttachments(ContentEntityObject ceo, LimitedRequest pageRequest, com.google.common.base.Predicate<? super Attachment> predicate)
          Retrieves a paginated list of the latest version of attachments to the ceo filtered by the predicate
 AttachmentDao.AttachmentMigrator getMigrator(AttachmentDao destinationDao)
          Get a migrator object to migrate attachments between attachment datastores.
 Map<Long,Long> getRemappedAttachmentIds()
          Gets a list of remapped attachment IDs.
 boolean isAttachmentPresent(Attachment attachment)
          Check that an attachment exists
 void moveAttachment(Attachment attachment, Attachment oldAttachment, ContentEntityObject newContent)
          Moves an Attachment to a new file name or content object

This method assumes that the filename and/or content of the attachment (and its previous versions) have already been updated.

 void prepareForMigrationTo()
          Prepare the data store for a migration from another type of data store.
 void removeAttachmentFromServer(Attachment attachment)
          Removes attachment (and all of its versions)
 void removeAttachmentVersionFromServer(Attachment attachment)
          Removes an attachment version
 void replaceAttachmentData(Attachment attachment, InputStream attachmentData)
          Sets the attachment data for attachment This method will overwrite any existing data for the attachment version.
 void saveNewAttachment(Attachment attachment, InputStream attachmentData)
          Saves a new attachment
 void saveNewAttachmentVersion(Attachment attachment, Attachment previousVersion, InputStream attachmentData)
          Saves a new version of attachment
 void updateAttachment(Attachment attachment)
          Update an existing attachment without creating a new version
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CachingAttachmentDao

public CachingAttachmentDao(AttachmentDao delegate,
                            AttachmentCache cache)
Method Detail

getDelegate

public AttachmentDao getDelegate()
Description copied from interface: DelegatingAttachmentDao
Returns the attachment DAO which this instance delegates to.

Specified by:
getDelegate in interface DelegatingAttachmentDao

getById

public Attachment getById(long id)
Description copied from interface: AttachmentDao
Returns the attachment with the given persistent ID. Returns null if no such attachment exists.

Specified by:
getById in interface AttachmentDao
Parameters:
id - the persistent ID of the attachment to retrieve
Returns:
the attachment with the given ID, or null if no attachment exists with the provided ID.

getByIds

public List<Attachment> getByIds(List<Long> ids)
Description copied from interface: AttachmentDao
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:
getByIds in interface AttachmentDao
Parameters:
ids - list of IDs to retrieve
Returns:
the attachments with the given IDs, or an empty list if no attachments exist with the provided IDs.

getLatestAttachment

public Attachment getLatestAttachment(ContentEntityObject content,
                                      String fileName)
Description copied from interface: AttachmentDao
Return the latest version of the attachment on the specified content with the given filename. Returns null if no attachment with that name on the content exists.

Specified by:
getLatestAttachment in interface AttachmentDao
Parameters:
content - the content to find the attachment on
fileName - the file name of the attachment
Returns:
the latest version of attachment with the given name attached to that content, or null if the attachment does not exist.

getLastAddedVersionsOf

public List<Attachment> getLastAddedVersionsOf(Attachment attachment)
Description copied from interface: AttachmentDao
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 interface AttachmentDao
Parameters:
attachment - attachment (must be the latest version)
Returns:
the last added versions for each user who has added a version of the attachment

removeAttachmentFromServer

public void removeAttachmentFromServer(Attachment attachment)
Description copied from interface: AttachmentDao
Removes attachment (and all of its versions)

Specified by:
removeAttachmentFromServer in interface AttachmentDao
Parameters:
attachment - the Attachment to be removed

removeAttachmentVersionFromServer

public void removeAttachmentVersionFromServer(Attachment attachment)
Description copied from interface: AttachmentDao
Removes an attachment version

Specified by:
removeAttachmentVersionFromServer in interface AttachmentDao
Parameters:
attachment - the Attachment version to be removed

flush

public void flush()
Description copied from interface: FlushableCachingDao
Flush the caches managed by this DAO.

Specified by:
flush in interface FlushableCachingDao

getLatestVersionsOfAttachments

public List<Attachment> getLatestVersionsOfAttachments(ContentEntityObject ceo)
Description copied from interface: AttachmentDao
Retrieves the latest versions of all attachments to ceo

Specified by:
getLatestVersionsOfAttachments in interface AttachmentDao
Parameters:
ceo - the content to look up attachments
Returns:
a List of Attachment objects
See Also:
AttachmentDao.countLatestVersionsOfAttachments(com.atlassian.confluence.core.ContentEntityObject)

getLatestVersionsOfAttachments

public PageResponse<Attachment> getLatestVersionsOfAttachments(ContentEntityObject ceo,
                                                               LimitedRequest pageRequest,
                                                               com.google.common.base.Predicate<? super Attachment> predicate)
Description copied from interface: AttachmentDao
Retrieves a paginated list of the latest version of attachments to the ceo filtered by the predicate

Specified by:
getLatestVersionsOfAttachments in interface AttachmentDao
Parameters:
ceo - the content to find attachments on
pageRequest - the pagination request
predicate - a predicate to filter the results by
Returns:
a paginated list of attachments

countLatestVersionsOfAttachments

public int countLatestVersionsOfAttachments(ContentEntityObject content)
Specified by:
countLatestVersionsOfAttachments in interface AttachmentDao
Parameters:
content - the content object
Returns:
the number of current attachments on a content object
See Also:
AttachmentDao.getLatestVersionsOfAttachments(com.atlassian.confluence.core.ContentEntityObject)

findAll

public List<Attachment> findAll()
Description copied from interface: AttachmentDao
Retrieves the latest versions of all Attachments Use of this method is discouraged when there are a large amount of Attachments.

Specified by:
findAll in interface AttachmentDao
Returns:
A List of Attachment objects
See Also:
AttachmentDao.findLatestVersionsIterator()

findLatestVersionsIterator

public Iterator<Attachment> findLatestVersionsIterator()
Description copied from interface: AttachmentDao
Retrieves the latest versions of all Attachments and returns an Iterator to the results.

Specified by:
findLatestVersionsIterator in interface AttachmentDao
Returns:
Iterator to the results

getAttachmentData

public InputStream getAttachmentData(Attachment attachment)
                              throws AttachmentDataNotFoundException
Description copied from interface: AttachmentDao
Retrieves the InputStream representing the data for attachment

Specified by:
getAttachmentData in interface AttachmentDao
Parameters:
attachment - the attachment whose data will be returned
Returns:
InputStream of the data
Throws:
AttachmentDataNotFoundException - if the data could not be found

saveNewAttachment

public void saveNewAttachment(Attachment attachment,
                              InputStream attachmentData)
Description copied from interface: AttachmentDao
Saves a new attachment

Specified by:
saveNewAttachment in interface AttachmentDao
Parameters:
attachment - the Attachment to be saved
attachmentData - the attachment data to be saved

saveNewAttachmentVersion

public void saveNewAttachmentVersion(Attachment attachment,
                                     Attachment previousVersion,
                                     InputStream attachmentData)
Description copied from interface: AttachmentDao
Saves a new version of attachment

Specified by:
saveNewAttachmentVersion in interface AttachmentDao
Parameters:
attachment - the Attachment to be saved
previousVersion - the previous version of the Attachment
attachmentData - the attachment data to be saved

isAttachmentPresent

public boolean isAttachmentPresent(Attachment attachment)
Description copied from interface: AttachmentDao
Check that an attachment exists

Specified by:
isAttachmentPresent in interface AttachmentDao
Parameters:
attachment - the Attachment to be checked

moveAttachment

public void moveAttachment(Attachment attachment,
                           Attachment oldAttachment,
                           ContentEntityObject newContent)
Description copied from interface: AttachmentDao
Moves an Attachment to a new file name or content object

This method assumes that the filename and/or content of the attachment (and its previous versions) have already been updated.

Specified by:
moveAttachment in interface AttachmentDao
Parameters:
attachment - the Attachment to be moved
oldAttachment - the Attachment before it has been updated
newContent - the new content attachment belongs to

replaceAttachmentData

public void replaceAttachmentData(Attachment attachment,
                                  InputStream attachmentData)
Description copied from interface: AttachmentDao
Sets the attachment data for attachment This method will overwrite any existing data for the attachment version.

Specified by:
replaceAttachmentData in interface AttachmentDao
Parameters:
attachment - Attachment the data belongs to
attachmentData - the data to save

getMigrator

public AttachmentDao.AttachmentMigrator getMigrator(AttachmentDao destinationDao)
Description copied from interface: AttachmentDao
Get a migrator object to migrate attachments between attachment datastores. To be used when switching datastore implementations

Specified by:
getMigrator in interface AttachmentDao
Parameters:
destinationDao - dao to move attachments to
Returns:
A migrator

getCopier

public AttachmentDao.AttachmentCopier getCopier(AttachmentDao destinationDao)
Description copied from interface: AttachmentDao
Get a copier object to copy attachments between data stores The source data store will remain untouched

Specified by:
getCopier in interface AttachmentDao
Parameters:
destinationDao - dao to copy attachments to
Returns:
A copier

prepareForMigrationTo

public void prepareForMigrationTo()
Description copied from interface: AttachmentDao
Prepare the data store for a migration from another type of data store.

Classes implementing this method will perform any tasks necessary to allow the data store to be used. These tasks may assume that users are locked out of the system.

Specified by:
prepareForMigrationTo in interface AttachmentDao

afterMigrationFrom

public void afterMigrationFrom()
Description copied from interface: AttachmentDao
Perform any tasks necessary after Attachment data has been moved from this data store to another. These tasks may assume that users are locked out of the system.

Specified by:
afterMigrationFrom in interface AttachmentDao

findAllVersions

public List<Attachment> findAllVersions(Attachment attachment)
Specified by:
findAllVersions in interface AttachmentDao

getAttachment

public Attachment getAttachment(ContentEntityObject content,
                                String fileName,
                                int version)
Description copied from interface: AttachmentDao
Return the attachment on the specified content with the given filename and version. Returns null if no such attachment exists.

Note: unlike AttachmentManager.getAttachment(ContentEntityObject, String, int), this method does not accept zero as a special flag to indicate the latest version of an attachment. To retrieve the latest version of an attachment, use AttachmentDao.getLatestAttachment(ContentEntityObject, String).

Specified by:
getAttachment in interface AttachmentDao
Parameters:
content - the content to find the attachment on
fileName - the file name of the attachment, treated case-insensitively
version - the version of the attachment
Returns:
the attachment with the given name and version attached to that content, or null if the attachment does not exist.

getBackingStorageType

public AttachmentDataStorageType getBackingStorageType()
Description copied from interface: AttachmentDao
Returns the backing storage type.

Specified by:
getBackingStorageType in interface AttachmentDao
Returns:
the backing storage type
See Also:
AttachmentDataDao.getStorageType()

updateAttachment

public void updateAttachment(Attachment attachment)
Description copied from interface: AttachmentDao
Update an existing attachment without creating a new version

Specified by:
updateAttachment in interface AttachmentDao

getRemappedAttachmentIds

public Map<Long,Long> getRemappedAttachmentIds()
Description copied from interface: AttachmentDao
Gets a list of remapped attachment IDs. The key is the old ID and the value is the new ID.

Specified by:
getRemappedAttachmentIds in interface AttachmentDao
Returns:
A map where the key is the original ID and the value is the new ID.


Copyright © 2003–2015 Atlassian. All rights reserved.