public class

DefaultCommentService

extends Object
implements CommentService
java.lang.Object
   ↳ com.atlassian.jira.bc.issue.comment.DefaultCommentService

Class Overview

Default implementation of comment service.

Summary

Constants
String ERROR_BODY_TOOLONG
String ERROR_COMMENT_DELETE_NON_EDITABLE_ISSUE
String ERROR_COMMENT_DELETE_NO_PERMISSION
String ERROR_COMMENT_EDIT_NON_EDITABLE_ISSUE
String ERROR_NULL_COMMENT
String ERROR_NULL_COMMENT_DELETE
String ERROR_NULL_COMMENT_ID
String ERROR_NULL_COMMENT_ID_DELETE
Public Constructors
DefaultCommentService(CommentManager commentManager, PermissionManager permissionManager, JiraAuthenticationContext jiraAuthenticationContext, CommentPermissionManager commentPermissionManager, IssueManager issueManager, VisibilityValidator visibilityValidator, TextFieldCharacterLengthValidator textFieldCharacterLengthValidator)
Public Methods
Comment create(ApplicationUser user, Issue issue, String body, boolean dispatchEvent, ErrorCollection errorCollection)
Creates and persists a Comment on the given Issue set with current date and time, visible to all - no group level or role level restriction.
Comment create(ApplicationUser applicationUser, CommentService.CommentCreateValidationResult validationResult, boolean dispatchEvent)
Creates and persists a Comment on given Issue.
Comment create(ApplicationUser user, Issue issue, String body, String groupLevel, Long roleLevelId, Date created, boolean dispatchEvent, ErrorCollection errorCollection)
Creates and persists a Comment on the given Issue.
Comment create(ApplicationUser user, Issue issue, String body, String groupLevel, Long roleLevelId, boolean dispatchEvent, ErrorCollection errorCollection)
Creates and persists a Comment on the given Issue set with current date and time.
void delete(JiraServiceContext jiraServiceContext, Comment comment, boolean dispatchEvent)
Deletes a comment and updates the issue's change history and updated date.
Comment getCommentById(ApplicationUser user, Long commentId, ErrorCollection errorCollection)
Will return a comment for the passed in commentId.
@Nonnull List<Comment> getCommentsForUser(ApplicationUser user, Issue issue)
Will return a list of Comments for the given user Will return a list of Comments for the given user.
List<Comment> getCommentsForUser(ApplicationUser currentUser, Issue issue, ErrorCollection errorCollection)
Will return a list of Comments for the given user.
@Nonnull List<Comment> getCommentsForUserSince(ApplicationUser currentUser, Issue issue, Date since)
Will return a list of Comments that were created or updated since the provided date, for the given user.
MutableComment getMutableComment(ApplicationUser user, Long commentId, ErrorCollection errorCollection)
Will return a MutableComment for the passed in commentId.
boolean hasPermissionToCreate(ApplicationUser user, Issue issue, ErrorCollection errorCollection, ActionDescriptor actionDescriptor)
Check if the given user has permission to create a comment during a workflow transition for a given action description.
boolean hasPermissionToCreate(ApplicationUser user, Issue issue, ErrorCollection errorCollection, Optional<Status> status)
Check if the given user has permission to create a comment in the current state of the issue or if the issue was in the given status.
boolean hasPermissionToCreate(ApplicationUser user, Issue issue, ErrorCollection errorCollection)
Check if the given user has permission to create a comment in the current state of the issue.
boolean hasPermissionToDelete(JiraServiceContext jiraServiceContext, Long commentId)
Determines whether the user can delete a comment.
boolean hasPermissionToEdit(ApplicationUser user, Comment comment, ErrorCollection errorCollection)
Determine whether the current user has the permission to edit the comment.
boolean hasPermissionToEdit(JiraServiceContext jiraServiceContext, Long commentId)
Determines whether the user can edit a comment.
boolean isGroupVisibilityEnabled()
Returns the flag that indicates whether group visiblity is enabled
boolean isGroupVisiblityEnabled()
Returns the flag that indicates whether group visiblity is enabled
boolean isProjectRoleVisibilityEnabled()
Returns the flag that indicates whether project role visibility is enabled
boolean isProjectRoleVisiblityEnabled()
Returns the flag that indicates whether project role visibility is enabled
boolean isValidAllCommentData(ApplicationUser currentUser, Issue issue, String body, Visibility visibility, ErrorCollection errorCollection)
Will call all other validate methods setting the appropriate errors in the errorCollection if any errors occur.
boolean isValidAllCommentData(ApplicationUser currentUser, Issue issue, String body, String groupLevel, String roleLevelId, ErrorCollection errorCollection)
Will call all other validate methods setting the appropriate errors in the errorCollection if any errors occur.
boolean isValidCommentBody(String body, ErrorCollection errorCollection)
Validates that the body is a valid string, if not the appropriate error is added to the errorCollection.
boolean isValidCommentBody(String body, ErrorCollection errorCollection, boolean allowEmpty)
Validates that the body is a valid string, if not the appropriate error is added to the errorCollection.
boolean isValidCommentData(ApplicationUser currentUser, Issue issue, String groupLevel, String roleLevelId, ErrorCollection errorCollection)
This method validates if the comment has the correct role and group levels set.
boolean isValidCommentVisibility(ApplicationUser currentUser, Issue issue, Visibility visibility, ErrorCollection errorCollection)
This method validates if the comment has the correct role and group levels set.
void update(ApplicationUser user, MutableComment comment, boolean dispatchEvent, ErrorCollection errorCollection)
Updates a Comment and sets the comments updated date to be now and the updatedAuthor to be the passed in user.
void update(ApplicationUser user, CommentService.CommentUpdateValidationResult validationResult, boolean dispatchEvent)
Updates a Comment and sets the comments updated date to be now and the updatedAuthor to be the passed in user.
CommentService.CommentCreateValidationResult validateCommentCreate(ApplicationUser user, CommentService.CommentParameters commentParameters, Optional<Status> status)
Confirms the parameters to create a comment are valid and that the user has the permission to do so if the issue was in the given status.
CommentService.CommentCreateValidationResult validateCommentCreate(ApplicationUser user, CommentService.CommentParameters commentParameters)
Confirms the parameters to create a comment are valid and that the user has the permission to do so.
CommentService.CommentUpdateValidationResult validateCommentUpdate(ApplicationUser user, Long commentId, CommentService.CommentParameters commentParameters)
Confirms the parameters to update a comment are valid and that the updating user has the permission to do so.
void validateCommentUpdate(ApplicationUser user, Long commentId, String body, String groupLevel, Long roleLevelId, ErrorCollection errorCollection)
Confirms the parameters to update a comment are valid and that the updating user has the permission to do so.
Protected Methods
boolean hasVisibility(JiraServiceContext jiraServiceContext, Comment comment)
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.atlassian.jira.bc.issue.comment.CommentService

Constants

public static final String ERROR_BODY_TOOLONG

Constant Value: "field.error.text.toolong"

public static final String ERROR_COMMENT_DELETE_NON_EDITABLE_ISSUE

Constant Value: "comment.service.error.delete.issue.non.editable"

public static final String ERROR_COMMENT_DELETE_NO_PERMISSION

Constant Value: "comment.service.error.delete.no.permission"

public static final String ERROR_COMMENT_EDIT_NON_EDITABLE_ISSUE

Constant Value: "comment.service.error.edit.issue.non.editable"

public static final String ERROR_NULL_COMMENT

Constant Value: "comment.service.error.update.null.comment"

public static final String ERROR_NULL_COMMENT_DELETE

Constant Value: "comment.service.error.delete.null.comment"

public static final String ERROR_NULL_COMMENT_ID

Constant Value: "comment.service.error.update.null.comment.id"

public static final String ERROR_NULL_COMMENT_ID_DELETE

Constant Value: "comment.service.error.delete.null.comment.id"

Public Constructors

public DefaultCommentService (CommentManager commentManager, PermissionManager permissionManager, JiraAuthenticationContext jiraAuthenticationContext, CommentPermissionManager commentPermissionManager, IssueManager issueManager, VisibilityValidator visibilityValidator, TextFieldCharacterLengthValidator textFieldCharacterLengthValidator)

Public Methods

public Comment create (ApplicationUser user, Issue issue, String body, boolean dispatchEvent, ErrorCollection errorCollection)

Creates and persists a Comment on the given Issue set with current date and time, visible to all - no group level or role level restriction.

Parameters
user The User who will be performing the operation.
issue The Issue you wish to associate the Comment with. This can not be null
body The body of the comment
dispatchEvent whether or not you want to have an event dispatched on Comment creation
errorCollection holder for any errors that were thrown attempting to create a comment
Returns
  • the created Comment object, or null if no object created.

public Comment create (ApplicationUser applicationUser, CommentService.CommentCreateValidationResult validationResult, boolean dispatchEvent)

Creates and persists a Comment on given Issue.

Parameters
applicationUser The ApplicationUser who will be performing the operation.
validationResult the results of validateCommentCreate(ApplicationUser, com.atlassian.jira.bc.issue.comment.CommentService.CommentParameters).
dispatchEvent whether or not you want to have an event dispatched on Comment creation
Returns
  • the created Comment object, or null if no object created.

public Comment create (ApplicationUser user, Issue issue, String body, String groupLevel, Long roleLevelId, Date created, boolean dispatchEvent, ErrorCollection errorCollection)

Creates and persists a Comment on the given Issue.

Parameters
user The User who will be performing the operation.
issue The Issue you wish to associate the Comment with. This can not be null
body The body of the comment
groupLevel The group level visibility of the comment (null if roleLevelId specified)
roleLevelId The role level visibility id of the comment (null if groupLevel specified)
created The date of comment creation
dispatchEvent whether or not you want to have an event dispatched on Comment creation
errorCollection holder for any errors that were thrown attempting to create a comment
Returns
  • the created Comment object, or null if no object created.

public Comment create (ApplicationUser user, Issue issue, String body, String groupLevel, Long roleLevelId, boolean dispatchEvent, ErrorCollection errorCollection)

Creates and persists a Comment on the given Issue set with current date and time.

Parameters
user The User who will be performing the operation.
issue The Issue you wish to associate the Comment with. This can not be null
body The body of the comment
groupLevel The group level visibility of the comment (null if roleLevelId specified)
roleLevelId The role level visibility id of the comment (null if groupLevel specified)
dispatchEvent whether or not you want to have an event dispatched on Comment creation
errorCollection holder for any errors that were thrown attempting to create a comment
Returns
  • the created Comment object, or null if no object created.

public void delete (JiraServiceContext jiraServiceContext, Comment comment, boolean dispatchEvent)

Deletes a comment and updates the issue's change history and updated date. Expects that hasPermissionToDelete(com.atlassian.jira.bc.JiraServiceContext, Long) is successfully called first.

Parameters
jiraServiceContext containing the user who wishes to delete a comment and the errorCollection that will contain any errors encountered when calling the method
comment the comment to delete (cannot be null)
dispatchEvent a flag indicating whether to dispatch an issue updated event. If this flag is false then the issue will not be reindexed.

public Comment getCommentById (ApplicationUser user, Long commentId, ErrorCollection errorCollection)

Will return a comment for the passed in commentId. This will return null if the user does not have permission to view the comment

Parameters
user who is looking up the comment
commentId the id representing the Comment you would like to retrieve.
errorCollection holder for any errors that can occur in process of validation
Returns
  • a Comment or null (if the user cannot browse the comment).

@Nonnull public List<Comment> getCommentsForUser (ApplicationUser user, Issue issue)

Will return a list of Comments for the given user Will return a list of Comments for the given user.

Parameters
user the user to check permissions against ApplicationUser, or anonymous if null.
issue the issue with associated comments. Must not be null.
Returns
  • a possibly empty List of comments - will not be null.

public List<Comment> getCommentsForUser (ApplicationUser currentUser, Issue issue, ErrorCollection errorCollection)

Will return a list of Comments for the given user.

Parameters
currentUser current User
issue the issue with associated comments
errorCollection holder for any errors that were thrown attempting to retrieve comments
Returns
  • a List of comments

@Nonnull public List<Comment> getCommentsForUserSince (ApplicationUser currentUser, Issue issue, Date since)

Will return a list of Comments that were created or updated since the provided date, for the given user.

Parameters
currentUser the user to check permissions against ApplicationUser, or anonymous if null.
issue the issue with associated comments. Must not be null.
since only comments created or updated after this date will be returned. Must not be null.
Returns
  • a possibly empty List of comments - will not be null.

public MutableComment getMutableComment (ApplicationUser user, Long commentId, ErrorCollection errorCollection)

Will return a MutableComment for the passed in commentId. This will return null if the user does not have permission to view the comment. The difference between this method and getCommentById(ApplicationUser, Long, ErrorCollection) is that this method returns a version of the Comment that we can set values on.

Parameters
user the current user.
commentId the id that we use to find the comment object.
errorCollection holder for any errors that can occur in process of validation
Returns
  • the comment that is identified by the commentId.

public boolean hasPermissionToCreate (ApplicationUser user, Issue issue, ErrorCollection errorCollection, ActionDescriptor actionDescriptor)

Check if the given user has permission to create a comment during a workflow transition for a given action description. This checks if the user is able to create a comment in either the origin status or the target status of the workflow transition.

Parameters
user The ApplicationUser who will be performing the operation.
issue The issue with associated comments.
errorCollection Holder for any errors that were thrown attempting permission checks.
actionDescriptor The status that should be used for the permission check. If Optional.none, will check using current status of the given issue.
Returns
  • true if the user has comment create permissions, false otherwise.

public boolean hasPermissionToCreate (ApplicationUser user, Issue issue, ErrorCollection errorCollection, Optional<Status> status)

Check if the given user has permission to create a comment in the current state of the issue or if the issue was in the given status.

If the state is Optional.none, we use the status in the issue param - the same as calling hasPermissionToCreate(ApplicationUser, Issue, ErrorCollection).

Parameters
user The ApplicationUser who will be performing the operation.
issue The issue with associated comments.
errorCollection Holder for any errors that were thrown attempting permission checks.
status The status that should be used for the permission check. If Optional.none, will check using current status of the given issue.
Returns
  • true if the user has comment create permissions, false otherwise.

public boolean hasPermissionToCreate (ApplicationUser user, Issue issue, ErrorCollection errorCollection)

Check if the given user has permission to create a comment in the current state of the issue.

Parameters
user The ApplicationUser who will be performing the operation.
issue The issue with associated comments.
errorCollection Holder for any errors that were thrown attempting permission checks.
Returns
  • true if the user has comment create permissions, false otherwise.

public boolean hasPermissionToDelete (JiraServiceContext jiraServiceContext, Long commentId)

Determines whether the user can delete a comment. Will return true when the following are satisfied:

  • The user has the DELETE_COMMENT_ALL permission, or the user has the DELETE_COMMENT_OWN permission and is attempting to delete a comment they authored
  • The issue is in an editable workflow state

Parameters
jiraServiceContext jiraServiceContext containing the user who wishes to delete a comment and the errorCollection that will contain any errors encountered when calling the method
commentId the id of the target comment (cannot be null)
Returns
  • true if the user has permission to delete the target comment, false otherwise

public boolean hasPermissionToEdit (ApplicationUser user, Comment comment, ErrorCollection errorCollection)

Determine whether the current user has the permission to edit the comment. In case of errors, add error messages to the error collection.

Passing in null comment or a comment with null ID will return false and an error message will be added to the error collection.

Passing in null error collection will throw NPE.

Parameters
user The User who will be performing the operation.
comment The Comment you wish to edit.
errorCollection holder for any errors that were thrown attempting permission checks
Returns
  • true if the user has edit permission, false otherwise

public boolean hasPermissionToEdit (JiraServiceContext jiraServiceContext, Long commentId)

Determines whether the user can edit a comment. Will return true when the following are satisfied:

  • The user has the comment edit all or comment edit own permission
  • The issue is in an editable workflow state

Parameters
jiraServiceContext JIRA service context containing the user who wishes to edit a comment and the errorCollection that will contain any errors encountered when calling the method
commentId the id of the target comment (cannot be null)
Returns
  • true if the user has permission to edit the comment, false otherwise

public boolean isGroupVisibilityEnabled ()

Returns the flag that indicates whether group visiblity is enabled

Returns
  • true if enabled, false otherwise

public boolean isGroupVisiblityEnabled ()

Returns the flag that indicates whether group visiblity is enabled

Returns
  • true if enabled, false otherwise

public boolean isProjectRoleVisibilityEnabled ()

Returns the flag that indicates whether project role visibility is enabled

Returns
  • true if enabled, false otherwise

public boolean isProjectRoleVisiblityEnabled ()

Returns the flag that indicates whether project role visibility is enabled

Returns
  • true if enabled, false otherwise

public boolean isValidAllCommentData (ApplicationUser currentUser, Issue issue, String body, Visibility visibility, ErrorCollection errorCollection)

Will call all other validate methods setting the appropriate errors in the errorCollection if any errors occur.

Parameters
currentUser The User who will be performing the operation.
issue issue to associate the comment with
body comment body
visibility visibility level
errorCollection holder for any errors that can occur in process of validarion
Returns
  • true if validation passes

public boolean isValidAllCommentData (ApplicationUser currentUser, Issue issue, String body, String groupLevel, String roleLevelId, ErrorCollection errorCollection)

Will call all other validate methods setting the appropriate errors in the errorCollection if any errors occur.

Parameters
currentUser The User who will be performing the operation.
issue issue to associate the comment with
body comment body
groupLevel comment group visibility level
roleLevelId comment project role visibility level id
errorCollection holder for any errors that can occur in process of validarion
Returns
  • true if validation passes

public boolean isValidCommentBody (String body, ErrorCollection errorCollection)

Validates that the body is a valid string, if not the appropriate error is added to the errorCollection. This method was added so the CommentSystemField can validate the body and set the appropriate error message.

Parameters
body comment body to validate
errorCollection holder for any errors that can occur in process of validation
Returns
  • true is the body is valid.

public boolean isValidCommentBody (String body, ErrorCollection errorCollection, boolean allowEmpty)

Validates that the body is a valid string, if not the appropriate error is added to the errorCollection. This method was added so the CommentSystemField can validate the body and set the appropriate error message.

Parameters
body comment body to validate
errorCollection holder for any errors that can occur in process of validation
allowEmpty indicates whether empty body is allowed
Returns
  • true is the body is valid.

public boolean isValidCommentData (ApplicationUser currentUser, Issue issue, String groupLevel, String roleLevelId, ErrorCollection errorCollection)

This method validates if the comment has the correct role and group levels set. If there is an error during validation the passed in errorCollection will contain the errors.

Parameters
currentUser The User who will be performing the operation.
issue issue to associate the comment with
groupLevel comment group visibility level
roleLevelId comment project role visibility level id
errorCollection holder for any errors that can occur in process of validation
Returns
  • true if the role and group level information has been set correctly for a comment

public boolean isValidCommentVisibility (ApplicationUser currentUser, Issue issue, Visibility visibility, ErrorCollection errorCollection)

This method validates if the comment has the correct role and group levels set. If there is an error during validation the passed in errorCollection will contain the errors.

Parameters
currentUser The User who will be performing the operation.
issue issue to associate the comment with
visibility comment visibility level
errorCollection holder for any errors that can occur in process of validation
Returns
  • true if the role and group level information has been set correctly for a comment

public void update (ApplicationUser user, MutableComment comment, boolean dispatchEvent, ErrorCollection errorCollection)

Updates a Comment and sets the comments updated date to be now and the updatedAuthor to be the passed in user.

Parameters
user the User who must have permission to update this comment and who will be used as the updateAuthor
comment the object that contains the changes to the comment to persist.
dispatchEvent whether or not you want to have an event dispatched on Comment update. If false then the issue will not be reindexed.
errorCollection holder for any errors that were thrown attempting to update a comment

public void update (ApplicationUser user, CommentService.CommentUpdateValidationResult validationResult, boolean dispatchEvent)

Updates a Comment and sets the comments updated date to be now and the updatedAuthor to be the passed in user.

Parameters
user the ApplicationUser who must have permission to update this comment and who will be used as the updateAuthor
validationResult the comment parameters.
dispatchEvent whether or not you want to have an event dispatched on Comment update. If false then the issue will not be reindexed.

public CommentService.CommentCreateValidationResult validateCommentCreate (ApplicationUser user, CommentService.CommentParameters commentParameters, Optional<Status> status)

Confirms the parameters to create a comment are valid and that the user has the permission to do so if the issue was in the given status. This method will validate the raw input parameters. This method only validates the parameters and will not actually persist the changes, you must call create(ApplicationUser, CommentCreateValidationResult, boolean) to persist the changes.

If an error is encountered then the CommentService.CommentCreateValidationResult will contain the specific error message.

Parameters
user The ApplicationUser who will be performing the operation.
commentParameters the comment parameters.
status The given status to be validated against.
Returns
  • validation result.

public CommentService.CommentCreateValidationResult validateCommentCreate (ApplicationUser user, CommentService.CommentParameters commentParameters)

Confirms the parameters to create a comment are valid and that the user has the permission to do so. This method will validate the raw input parameters. This method only validates the parameters and will not actually persist the changes, you must call create(ApplicationUser, CommentCreateValidationResult, boolean) to persist the changes.

If an error is encountered then the CommentService.CommentCreateValidationResult will contain the specific error message.

Parameters
user The ApplicationUser who will be performing the operation.
commentParameters the comment parameters.
Returns
  • validation result.

public CommentService.CommentUpdateValidationResult validateCommentUpdate (ApplicationUser user, Long commentId, CommentService.CommentParameters commentParameters)

Confirms the parameters to update a comment are valid and that the updating user has the permission to do so. This method will validate the raw input parameters. This method only validates the parameters and will not actually persist the changes, you must call update(ApplicationUser, CommentService.CommentUpdateValidationResult, boolean) to persist the changes. If an error is encountered then the ErrorCollection will contain the specific error message.

Parameters
user The ApplicationUser who will be performing the operation and who will be the updatedAuthor.
commentId The id of the comment to be updated. Permissions will be checked to ensure that the user has the right to update this comment. If the comment does not exist an error will be reported.
commentParameters the comment parameters.

public void validateCommentUpdate (ApplicationUser user, Long commentId, String body, String groupLevel, Long roleLevelId, ErrorCollection errorCollection)

Confirms the parameters to update a comment are valid and that the updating user has the permission to do so. This method will validate the raw input parameters. This method only validates the parameters and will not actually persist the changes, you must call update(ApplicationUser, CommentService.CommentUpdateValidationResult, boolean) to persist the changes. If an error is encountered then the ErrorCollection will contain the specific error message.

Parameters
user The ApplicationUser who will be performing the operation and who will be the updatedAuthor.
commentId The id of the comment to be updated. Permissions will be checked to ensure that the user has the right to update this comment. If the comment does not exist an error will be reported.
body The body of the comment to be updated.
groupLevel The group level visibility of the comment (null if roleLevelId specified)
roleLevelId The role level visibility id of the comment (null if groupLevel specified)
errorCollection holder for any errors that were thrown attempting to update a comment

Protected Methods

protected boolean hasVisibility (JiraServiceContext jiraServiceContext, Comment comment)