Class HibernateAttachmentDataDao
- java.lang.Object
-
- org.springframework.dao.support.DaoSupport
-
- com.atlassian.confluence.core.persistence.hibernate.HibernateObjectDao
-
- com.atlassian.confluence.pages.persistence.dao.hibernate.HibernateAttachmentDataDao
-
- All Implemented Interfaces:
ObjectDao
,ObjectDaoInternal
,AttachmentDataDao
,TransactionalAttachmentDataDao
,org.springframework.beans.factory.InitializingBean
public class HibernateAttachmentDataDao extends HibernateObjectDao implements TransactionalAttachmentDataDao
This class defines an AttachmentDataDao that stores Attachment data in a Hibernate-managed database.As a result, it is transactional (can be rolled back), so it implements the TransactionalAttachmentDataDao interface.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.atlassian.confluence.core.persistence.hibernate.HibernateObjectDao
HibernateObjectDao.Cacheability
-
-
Constructor Summary
Constructors Constructor Description HibernateAttachmentDataDao()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
afterMigrationFrom()
Once a data migration has occurred, remove all records from the table, as they are no longer necessary, and we don't want foreign key violations to occur when removing Attachments.@NonNull List
findAll()
Find all objects of the class provided by getPersistentClass()@NonNull List
findAllSorted(String s)
Find all objects currently persisted of a particular type and sort results by named property.protected AttachmentData
getAttachmentDataForAttachment(Attachment attachment)
Retrieves the attachment data object for a given attachment.InputStream
getDataForAttachment(Attachment attachment)
Grabs the AttachmentData object for an AttachmentAttachmentDataStream
getDataForAttachment(Attachment attachment, AttachmentDataStreamType dataStreamType)
Grabs the AttachmentData object for an AttachmentAttachmentDataStream
getDataForAttachment(Attachment attachment, AttachmentDataStreamType dataStreamType, Optional<RangeRequest> range)
Grabs the AttachmentData object for an AttachmentClass
getPersistentClass()
Gets the type ofEntityObject
this Dao works with.AttachmentDataStorageType
getStorageType()
Returns the storage type.boolean
isAttachmentPresent(Attachment attachment)
Check that an attachment existsvoid
moveAttachment(Attachment attachment, Attachment oldAttachment, ContentEntityObject newContent)
Moves an attachment to a new file name or content objectvoid
moveDataForAttachmentVersion(Attachment sourceAttachmentVersion, Attachment targetAttachmentVersion)
Moves the attachment data from oneAbstractVersionedEntityObject.getVersion()
to the other.void
prepareForMigrationTo()
This implementation clears out the Attachment data table, so we have a clean base for migration.void
removeDataForAttachment(Attachment attachment, ContentEntityObject originalContent)
Removes all attachment data for the given attachment.void
removeDataForAttachmentVersion(Attachment attachment, ContentEntityObject originalContent)
Removes the attachment data for the given attachment version.void
removeDataForAttachmentVersion(Attachment attachmentVersion, ContentEntityObject originalContent, AttachmentDataStreamType dataStreamType)
Removes the attachment data of the specific stream type for the given attachment version.void
replaceDataForAttachment(Attachment attachment, AttachmentDataStream dataStream)
Sets the data for attachmentvoid
replaceDataForAttachment(Attachment attachment, InputStream data)
Sets the data for attachmentvoid
save(com.atlassian.core.bean.EntityObject objectToSave)
Save an object.void
saveDataForAttachment(Attachment attachment, AttachmentDataStream dataStream)
Saves data to the attachment data storevoid
saveDataForAttachment(Attachment attachment, InputStream data)
Saves data to the attachment data storevoid
saveDataForAttachmentVersion(Attachment attachment, Attachment previousVersion, AttachmentDataStream dataStream)
Saves data to the attachment data store, for an attachment that has been updated.void
saveDataForAttachmentVersion(Attachment attachment, Attachment previousVersion, InputStream data)
Saves data to the attachment data store, for an attachment that has been updated.-
Methods inherited from class com.atlassian.confluence.core.persistence.hibernate.HibernateObjectDao
applyTransactionTimeout, applyTransactionTimeout, checkDaoConfig, createHibernateTemplate, findAllSorted, findByClassIds, findByClassIdsFiltered, findNamedQuery, findNamedQuery, findNamedQuery, findNamedQueryStringParam, findNamedQueryStringParam, findNamedQueryStringParam, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findSingleObject, getByClassId, getCountResult, getHibernateTemplate, getSessionFactory, index, indexEntity, refresh, refreshEntity, reIndex, reIndexEntity, remove, removeEntity, replicate, replicateEntity, saveEntity, saveRaw, saveRawEntity, setEventPublisher, setHibernateTemplate, setIndexer, setSessionFactory, unIndex, unIndexEntity, uniqueResult, updateEntityModificationData, updateModificationData
-
-
-
-
Method Detail
-
findAll
public @NonNull List findAll()
Description copied from class:HibernateObjectDao
Find all objects of the class provided by getPersistentClass()- Specified by:
findAll
in interfaceObjectDao
- Specified by:
findAll
in interfaceObjectDaoInternal
- Overrides:
findAll
in classHibernateObjectDao
- Returns:
- a list of all objects of the appropriate class, or the empty list if no objects are found
-
findAllSorted
public @NonNull List findAllSorted(String s)
Description copied from interface:ObjectDaoInternal
Find all objects currently persisted of a particular type and sort results by named property.- Specified by:
findAllSorted
in interfaceObjectDao
- Specified by:
findAllSorted
in interfaceObjectDaoInternal
- Overrides:
findAllSorted
in classHibernateObjectDao
- Parameters:
s
- the name of the property to be sorted on. This should be null if no sorting is required.
-
save
public void save(com.atlassian.core.bean.EntityObject objectToSave)
Description copied from class:HibernateObjectDao
Save an object. The object's last-modified time will be updated, and if the object is searchable it will be indexed.- Specified by:
save
in interfaceObjectDao
- Specified by:
save
in interfaceObjectDaoInternal
- Overrides:
save
in classHibernateObjectDao
- Parameters:
objectToSave
- the object to save
-
getPersistentClass
public Class getPersistentClass()
Description copied from interface:ObjectDaoInternal
Gets the type ofEntityObject
this Dao works with.- Specified by:
getPersistentClass
in interfaceObjectDao
- Specified by:
getPersistentClass
in interfaceObjectDaoInternal
- Returns:
- the type
-
getAttachmentDataForAttachment
protected AttachmentData getAttachmentDataForAttachment(Attachment attachment) throws AttachmentDataNotFoundException
Retrieves the attachment data object for a given attachment.- Parameters:
attachment
- the attachment to retrieve data for- Returns:
- attachment data for the provided attachment
- Throws:
AttachmentDataNotFoundException
- if the attachment data is not foundorg.springframework.dao.IncorrectResultSizeDataAccessException
- if the database contains more than one data object associated with the given attachment
-
getDataForAttachment
public InputStream getDataForAttachment(Attachment attachment) throws AttachmentDataNotFoundException
Description copied from interface:AttachmentDataDao
Grabs the AttachmentData object for an Attachment- Specified by:
getDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment representing the data- Returns:
- an AttachmentData object
- Throws:
AttachmentDataNotFoundException
- if no data was found
-
removeDataForAttachment
public void removeDataForAttachment(Attachment attachment, ContentEntityObject originalContent)
Description copied from interface:AttachmentDataDao
Removes all attachment data for the given attachment. Since Confluence 4.2 the contract of this method has been clarified. It now removes all versions of the given attachment.- Specified by:
removeDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the latest version of the attachment for which the data should be removedoriginalContent
- the content the attachment belongs to
-
removeDataForAttachmentVersion
public void removeDataForAttachmentVersion(Attachment attachment, ContentEntityObject originalContent)
Description copied from interface:AttachmentDataDao
Removes the attachment data for the given attachment version.- Specified by:
removeDataForAttachmentVersion
in interfaceAttachmentDataDao
- Parameters:
attachment
- the version of the attachment for which the data should be removedoriginalContent
- the content the attachment belongs to
-
removeDataForAttachmentVersion
public void removeDataForAttachmentVersion(Attachment attachmentVersion, ContentEntityObject originalContent, AttachmentDataStreamType dataStreamType)
Description copied from interface:AttachmentDataDao
Removes the attachment data of the specific stream type for the given attachment version.- Specified by:
removeDataForAttachmentVersion
in interfaceAttachmentDataDao
- Parameters:
attachmentVersion
- the version of the attachment for which the data should be removedoriginalContent
- the content the attachment belongs todataStreamType
- the data stream type
-
moveDataForAttachmentVersion
public void moveDataForAttachmentVersion(Attachment sourceAttachmentVersion, Attachment targetAttachmentVersion)
Description copied from interface:AttachmentDataDao
Moves the attachment data from oneAbstractVersionedEntityObject.getVersion()
to the other.This method will overwrite any existing data for the target attachment version.
- Specified by:
moveDataForAttachmentVersion
in interfaceAttachmentDataDao
- Parameters:
sourceAttachmentVersion
- the attachment- See Also:
AttachmentDataDao.moveAttachment(Attachment, Attachment, ContentEntityObject)
-
saveDataForAttachment
public void saveDataForAttachment(Attachment attachment, InputStream data)
Description copied from interface:AttachmentDataDao
Saves data to the attachment data store- Specified by:
saveDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment the data belongs todata
- the InputStream to be written
-
saveDataForAttachmentVersion
public void saveDataForAttachmentVersion(Attachment attachment, Attachment previousVersion, InputStream data)
Description copied from interface:AttachmentDataDao
Saves data to the attachment data store, for an attachment that has been updated.This method assumes that the attachment has already been saved.
- Specified by:
saveDataForAttachmentVersion
in interfaceAttachmentDataDao
- Parameters:
attachment
- the new version of the attachmentpreviousVersion
- the previous version of the attachmentdata
- the InputStream representing the data
-
replaceDataForAttachment
public void replaceDataForAttachment(Attachment attachment, InputStream data)
Description copied from interface:AttachmentDataDao
Sets the data for attachmentThis method will overwrite any existing data for the attachment.
- Specified by:
replaceDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- Attachment the data belongs todata
- the data to be saved
-
isAttachmentPresent
public boolean isAttachmentPresent(Attachment attachment)
Description copied from interface:AttachmentDataDao
Check that an attachment exists- Specified by:
isAttachmentPresent
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment to be checked
-
moveAttachment
public void moveAttachment(Attachment attachment, Attachment oldAttachment, ContentEntityObject newContent)
Description copied from interface:AttachmentDataDao
Moves an attachment to a new file name or content object- Specified by:
moveAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment to be movedoldAttachment
- the original version of the attachmentnewContent
- the new content the Attachment belongs to
-
prepareForMigrationTo
public void prepareForMigrationTo()
This implementation clears out the Attachment data table, so we have a clean base for migration. It circumvents hibernate, so should only be called when nobody else can see the attachment data.- Specified by:
prepareForMigrationTo
in interfaceAttachmentDataDao
-
afterMigrationFrom
public void afterMigrationFrom()
Once a data migration has occurred, remove all records from the table, as they are no longer necessary, and we don't want foreign key violations to occur when removing Attachments. It circumvents hibernate, so should only be called when nobody else can see the data.- Specified by:
afterMigrationFrom
in interfaceAttachmentDataDao
-
getStorageType
public AttachmentDataStorageType getStorageType()
Description copied from interface:AttachmentDataDao
Returns the storage type.The client code should be storage agnostic in general. Thus this method should only be used in rare cases in order to hide operations which are known to be not implemented for the specific type.
- Specified by:
getStorageType
in interfaceAttachmentDataDao
- Returns:
- the storage type
-
getDataForAttachment
public AttachmentDataStream getDataForAttachment(Attachment attachment, AttachmentDataStreamType dataStreamType) throws AttachmentDataNotFoundException
Description copied from interface:AttachmentDataDao
Grabs the AttachmentData object for an Attachment- Specified by:
getDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment representing the data- Returns:
- an AttachmentData object
- Throws:
AttachmentDataNotFoundException
- if no data was found
-
getDataForAttachment
public AttachmentDataStream getDataForAttachment(Attachment attachment, AttachmentDataStreamType dataStreamType, Optional<RangeRequest> range) throws AttachmentDataNotFoundException
Description copied from interface:AttachmentDataDao
Grabs the AttachmentData object for an Attachment- Specified by:
getDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment representing the datadataStreamType
- the stream type of attachmentrange
- the range of attachment data- Returns:
- an AttachmentData object
- Throws:
AttachmentDataNotFoundException
- if no data was found
-
saveDataForAttachment
public void saveDataForAttachment(Attachment attachment, AttachmentDataStream dataStream)
Description copied from interface:AttachmentDataDao
Saves data to the attachment data store- Specified by:
saveDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- the Attachment the data belongs todataStream
- the data stream to be written
-
saveDataForAttachmentVersion
public void saveDataForAttachmentVersion(Attachment attachment, Attachment previousVersion, AttachmentDataStream dataStream)
Description copied from interface:AttachmentDataDao
Saves data to the attachment data store, for an attachment that has been updated.This method assumes that the attachment has already been saved.
- Specified by:
saveDataForAttachmentVersion
in interfaceAttachmentDataDao
- Parameters:
attachment
- the new version of the attachmentpreviousVersion
- the previous version of the attachmentdataStream
- the InputStream representing the data
-
replaceDataForAttachment
public void replaceDataForAttachment(Attachment attachment, AttachmentDataStream dataStream)
Description copied from interface:AttachmentDataDao
Sets the data for attachmentThis method will overwrite any existing data for the attachment.
- Specified by:
replaceDataForAttachment
in interfaceAttachmentDataDao
- Parameters:
attachment
- Attachment the data belongs todataStream
- the data to be saved
-
-