public final class

DefaultAttachmentStore

extends Object
implements FileSystemAttachmentStore
java.lang.Object
   ↳ com.atlassian.jira.issue.attachment.DefaultAttachmentStore

Summary

Public Constructors
DefaultAttachmentStore(AttachmentDirectoryAccessor da, EventPublisher eventPublisher)
Public Methods
Promise<Unit> delete(Attachment attachment)
Delete the specified attachment.
Promise<Unit> deleteAttachmentContainerForIssue(Issue issue)
Delete the container for attachments for a given issue.
Option<ErrorCollection> errors()
Health status for this component.
Promise<Boolean> exists(Attachment metaData)
Returns true if the attachment exists in the store.
<A> Promise<A> get(Attachment metadata, Function<InputStream, A> inputStreamProcessor)
Retrieve data for a given attachment.
File getAttachmentFile(Issue issue, Attachment attachment)
Returns the physical File for the given Attachment.
File getAttachmentFile(Attachment attachment)
Returns the physical File for the given Attachment.
File getAttachmentFile(AttachmentStore.AttachmentAdapter attachment, File attachmentDir)
This is intended for cases where you want more control over where the attachment actually lives and you just want something to handle the look up logic for the various possible filenames an attachment can have.
Promise<Unit> move(Attachment metaData, String newIssueKey)
Moves an attachment from its current issue under a new one
Promise<Attachment> put(Attachment metadata, File source)
Store attachment data for a given attachment.
Promise<Attachment> put(Attachment metadata, InputStream data)
Store attachment data for a given attachment.
@EventListener void stop(ComponentManagerShutdownEvent event)
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.atlassian.jira.issue.attachment.AttachmentHealth
From interface com.atlassian.jira.issue.attachment.FileBasedAttachmentStore
From interface com.atlassian.jira.issue.attachment.SimpleAttachmentStore

Public Constructors

public DefaultAttachmentStore (AttachmentDirectoryAccessor da, EventPublisher eventPublisher)

Public Methods

public Promise<Unit> delete (Attachment attachment)

Delete the specified attachment.

Parameters
attachment The attachment to delete.
Returns
  • a promise that contains an AttachmentCleanupException in case of error.

public Promise<Unit> deleteAttachmentContainerForIssue (Issue issue)

Delete the container for attachments for a given issue. For file systems, this means the attachment directory for that issue.

Parameters
issue The issue to delete attachments for.
Returns
  • A promise that will contain a AttachmentCleanupException if there is a problem deleting the attachment directory.

public Option<ErrorCollection> errors ()

Health status for this component. Specifically the errors that cause the attachment subsystem to fail.

Returns
  • An option of an error collection that contains error messages if there are any issues. The option will be none if there are no errors.

public Promise<Boolean> exists (Attachment metaData)

Returns true if the attachment exists in the store.

Parameters
metaData attachment metadata, used to determine the logical key under which to store the attachment data
Returns
  • a promise that when claimed will return true if the attachment exists in the store. The promise will contain an AttachmentRuntimeException in case of error.

public Promise<A> get (Attachment metadata, Function<InputStream, A> inputStreamProcessor)

Retrieve data for a given attachment.

Parameters
metadata attachment metadata, used to determine the logical key under which to store the attachment data
inputStreamProcessor Function that processes the attachment data. This function MUST clean up upon failure of reading from the input stream, and must support being re-executed. e.g. If the function writes out to a temp file, the temp file should be created by the function.
Returns
  • A promise of an object that represented the processed attachment data (i.e. from running the inputStreamProcessor over the attachment data). The promise will contain an AttachmentRuntimeException in case of error.

public File getAttachmentFile (Issue issue, Attachment attachment)

Returns the physical File for the given Attachment. This method performs better as it does not need to look up the issue object.

Parameters
issue the issue the attachment belongs to.
attachment the attachment.
Returns
  • the file.
Throws
DataAccessException on failure getting required attachment info.

public File getAttachmentFile (Attachment attachment)

Returns the physical File for the given Attachment. If you are calling this on multiple attachments for the same issue, consider using the overridden method that passes in the issue. Else, this goes to the database for each call.

Parameters
attachment the attachment.
Returns
  • the file.
Throws
DataAccessException on failure getting required attachment info.

public File getAttachmentFile (AttachmentStore.AttachmentAdapter attachment, File attachmentDir)

This is intended for cases where you want more control over where the attachment actually lives and you just want something to handle the look up logic for the various possible filenames an attachment can have.

In practice, this is just used during Project Import

Parameters
attachment it's not an attachment but it acts like one for our purposes.
attachmentDir the directory the attachments live in. This is different that the system-wide attachment directory. i.e. this would "attachments/MKY/MKY-1" and not just "attachments"
Returns
  • the actual attachment

public Promise<Unit> move (Attachment metaData, String newIssueKey)

Moves an attachment from its current issue under a new one

Parameters
metaData attachment metadata, used to determine the logical key of the attachment to be moved.
newIssueKey the key of the new issue under which the attachment will reside.
Returns

public Promise<Attachment> put (Attachment metadata, File source)

Store attachment data for a given attachment.

Parameters
metadata attachment metadata, used to determine the logical key under which to store the attachment data
source source data. It is assumed that the file will exist during the attachment process (i.e. relatively long lived).
Returns
  • A promise of an attachment that performs the 'put' operation once the promise is claimed.

public Promise<Attachment> put (Attachment metadata, InputStream data)

Store attachment data for a given attachment.

Parameters
metadata attachment metadata, used to determine the logical key under which to store the attachment data
data source data. The attachment store will close this stream when it has completed. The stream will be closed once the operation is complete.
Returns
  • A promise of an attachment that performs the 'put' operation once the promise is claimed. The promise will contain an AttachmentRuntimeException in case of error.

@EventListener public void stop (ComponentManagerShutdownEvent event)