Class DefaultCommentService

java.lang.Object
com.atlassian.jira.bc.issue.comment.DefaultCommentService
All Implemented Interfaces:
CommentService

public class DefaultCommentService extends Object implements CommentService
Default implementation of comment service.
  • Field Details

  • Constructor Details

  • Method Details

    • validateCommentUpdate

      public void validateCommentUpdate(ApplicationUser user, Long commentId, String body, String groupLevel, Long roleLevelId, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      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 CommentService.update(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.comments.MutableComment, boolean, com.atlassian.jira.util.ErrorCollection) to persist the changes. If an error is encountered then the ErrorCollection will contain the specific error message.
      Specified by:
      validateCommentUpdate in interface CommentService
      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
    • validateCommentUpdate

      public CommentService.CommentUpdateValidationResult validateCommentUpdate(ApplicationUser user, Long commentId, CommentService.CommentParameters commentParameters)
      Description copied from interface: CommentService
      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 CommentService.update(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.comments.MutableComment, boolean, com.atlassian.jira.util.ErrorCollection) to persist the changes. If an error is encountered then the ErrorCollection will contain the specific error message.
      Specified by:
      validateCommentUpdate in interface CommentService
      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.
    • update

      public void update(ApplicationUser user, MutableComment comment, boolean dispatchEvent, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Updates a Comment and sets the comments updated date to be now and the updatedAuthor to be the passed in user.
      Specified by:
      update in interface CommentService
      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
    • update

      public void update(ApplicationUser user, CommentService.CommentUpdateValidationResult validationResult, boolean dispatchEvent)
      Description copied from interface: CommentService
      Updates a Comment and sets the comments updated date to be now and the updatedAuthor to be the passed in user.
      Specified by:
      update in interface CommentService
      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.
    • validateCommentCreate

      public CommentService.CommentCreateValidationResult validateCommentCreate(ApplicationUser user, @Nonnull CommentService.CommentParameters commentParameters)
      Description copied from interface: CommentService
      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 CommentService.create(ApplicationUser, CommentCreateValidationResult, boolean) to persist the changes.

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

      Specified by:
      validateCommentCreate in interface CommentService
      Parameters:
      user - The ApplicationUser who will be performing the operation.
      commentParameters - the comment parameters.
      Returns:
      validation result.
    • validateCommentCreate

      public CommentService.CommentCreateValidationResult validateCommentCreate(ApplicationUser user, @Nonnull CommentService.CommentParameters commentParameters, Optional<Status> status)
      Description copied from interface: CommentService
      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 CommentService.create(ApplicationUser, CommentCreateValidationResult, boolean) to persist the changes.

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

      Specified by:
      validateCommentCreate in interface CommentService
      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.
    • create

      public Comment create(ApplicationUser user, Issue issue, String body, boolean dispatchEvent, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      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.
      Specified by:
      create in interface CommentService
      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.
    • create

      public Comment create(ApplicationUser user, Issue issue, String body, String groupLevel, Long roleLevelId, boolean dispatchEvent, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Creates and persists a Comment on the given Issue set with current date and time.
      Specified by:
      create in interface CommentService
      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.
    • create

      public Comment create(ApplicationUser user, Issue issue, String body, String groupLevel, Long roleLevelId, Date created, boolean dispatchEvent, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Creates and persists a Comment on the given Issue.
      Specified by:
      create in interface CommentService
      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.
    • create

      public Comment create(ApplicationUser applicationUser, CommentService.CommentCreateValidationResult validationResult, boolean dispatchEvent)
      Description copied from interface: CommentService
      Creates and persists a Comment on given Issue.
      Specified by:
      create in interface CommentService
      Parameters:
      applicationUser - The ApplicationUser who will be performing the operation.
      validationResult - the results of CommentService.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.
    • getCommentsForUser

      public List<Comment> getCommentsForUser(ApplicationUser currentUser, Issue issue, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Will return a list of Comments for the given user.
      Specified by:
      getCommentsForUser in interface CommentService
      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
    • getCommentsForUser

      @Nonnull public List<Comment> getCommentsForUser(@Nullable ApplicationUser user, @Nonnull Issue issue)
      Description copied from interface: CommentService
      Will return a list of Comments for the given user Will return a list of Comments for the given user.
      Specified by:
      getCommentsForUser in interface CommentService
      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.
    • streamComments

      public Stream<Comment> streamComments(@Nullable ApplicationUser user, @Nonnull Issue issue)
      Description copied from interface: CommentService
      Streams every comment of the given issue that is visible to the user. Comments are streamed in the order that they were created in.
      Specified by:
      streamComments in interface CommentService
      Parameters:
      user - the user to check permissions against, or null if anonymous
      issue - issue for which to get comments
      Returns:
      a stream of comments
    • getCommentsForUserSince

      @Nonnull public List<Comment> getCommentsForUserSince(@Nullable ApplicationUser currentUser, @Nonnull Issue issue, @Nonnull Date since)
      Description copied from interface: CommentService
      Will return a list of Comments that were created or updated since the provided date, for the given user.
      Specified by:
      getCommentsForUserSince in interface CommentService
      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.
    • isValidCommentVisibility

      public boolean isValidCommentVisibility(ApplicationUser currentUser, Issue issue, Visibility visibility, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      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.
      Specified by:
      isValidCommentVisibility in interface CommentService
      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
    • isValidCommentBody

      public boolean isValidCommentBody(String body, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      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.
      Specified by:
      isValidCommentBody in interface CommentService
      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.
    • isValidCommentBody

      public boolean isValidCommentBody(String body, ErrorCollection errorCollection, boolean allowEmpty)
      Description copied from interface: CommentService
      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.
      Specified by:
      isValidCommentBody in interface CommentService
      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.
    • isValidAllCommentData

      public boolean isValidAllCommentData(ApplicationUser currentUser, Issue issue, String body, String groupLevel, String roleLevelId, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Will call all other validate methods setting the appropriate errors in the errorCollection if any errors occur.
      Specified by:
      isValidAllCommentData in interface CommentService
      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
    • isValidAllCommentData

      public boolean isValidAllCommentData(ApplicationUser currentUser, Issue issue, String body, Visibility visibility, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Will call all other validate methods setting the appropriate errors in the errorCollection if any errors occur.
      Specified by:
      isValidAllCommentData in interface CommentService
      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
    • isGroupVisibilityEnabled

      public boolean isGroupVisibilityEnabled()
      Description copied from interface: CommentService
      Returns the flag that indicates whether group visiblity is enabled
      Specified by:
      isGroupVisibilityEnabled in interface CommentService
      Returns:
      true if enabled, false otherwise
    • isProjectRoleVisibilityEnabled

      public boolean isProjectRoleVisibilityEnabled()
      Description copied from interface: CommentService
      Returns the flag that indicates whether project role visibility is enabled
      Specified by:
      isProjectRoleVisibilityEnabled in interface CommentService
      Returns:
      true if enabled, false otherwise
    • getCommentById

      public Comment getCommentById(ApplicationUser user, Long commentId, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Will return a comment for the passed in commentId. This will return null if the user does not have permission to view the comment
      Specified by:
      getCommentById in interface CommentService
      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).
    • getMutableComment

      public MutableComment getMutableComment(ApplicationUser user, Long commentId, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      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 CommentService.getCommentById(com.atlassian.jira.user.ApplicationUser, java.lang.Long, com.atlassian.jira.util.ErrorCollection) is that this method returns a version of the Comment that we can set values on.
      Specified by:
      getMutableComment in interface CommentService
      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.
    • hasPermissionToDelete

      public boolean hasPermissionToDelete(JiraServiceContext jiraServiceContext, Long commentId)
      Description copied from interface: CommentService
      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
      Specified by:
      hasPermissionToDelete in interface CommentService
      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
    • hasVisibility

      protected boolean hasVisibility(JiraServiceContext jiraServiceContext, Comment comment)
    • delete

      public void delete(JiraServiceContext jiraServiceContext, Comment comment, boolean dispatchEvent)
      Description copied from interface: CommentService
      Deletes a comment and updates the issue's change history and updated date. Expects that CommentService.hasPermissionToDelete(com.atlassian.jira.bc.JiraServiceContext, Long) is successfully called first.
      Specified by:
      delete in interface CommentService
      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.
    • setPin

      public void setPin(JiraServiceContext jiraServiceContext, Comment comment, boolean pinned)
      Description copied from interface: CommentService
      Pins a comment for given issue
      Specified by:
      setPin in interface CommentService
      Parameters:
      jiraServiceContext - containing the user who wishes to pin a comment and the errorCollection that will contain any errors encountered when calling the method
      comment - the comment to pin (cannot be null)
      pinned - a flag indicating whether to pin or unpin given comment
    • getPinnedComments

      public List<PinnedComment> getPinnedComments(JiraServiceContext jiraServiceContext, Issue issue)
      Description copied from interface: CommentService
      Will return a list of PinnedComments for the given issue.
      Specified by:
      getPinnedComments in interface CommentService
      Parameters:
      jiraServiceContext - containing the user who wishes to get pinned comments and the errorCollection that will contain any errors encountered when calling the method
      issue - the issue for which pinned comments will be returned
      Returns:
      list of pinned to the issue comments (max 5).
    • hasPermissionToPinComments

      public boolean hasPermissionToPinComments(ApplicationUser user, Issue issue, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Check if the given user has permission to pin a comment
      Specified by:
      hasPermissionToPinComments in interface CommentService
      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 pin permissions, false otherwise.
    • hasPermissionToCreate

      public boolean hasPermissionToCreate(ApplicationUser user, Issue issue, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      Check if the given user has permission to create a comment in the current state of the issue.
      Specified by:
      hasPermissionToCreate in interface CommentService
      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.
    • hasPermissionToCreate

      public boolean hasPermissionToCreate(ApplicationUser user, Issue issue, ErrorCollection errorCollection, Optional<Status> status)
      Description copied from interface: CommentService
      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 CommentService.hasPermissionToCreate(ApplicationUser, Issue, ErrorCollection).

      Specified by:
      hasPermissionToCreate in interface CommentService
      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.
    • hasPermissionToCreate

      public boolean hasPermissionToCreate(ApplicationUser user, Issue issue, ErrorCollection errorCollection, com.opensymphony.workflow.loader.ActionDescriptor actionDescriptor)
      Description copied from interface: CommentService
      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.
      Specified by:
      hasPermissionToCreate in interface CommentService
      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.
    • hasPermissionToEdit

      public boolean hasPermissionToEdit(JiraServiceContext jiraServiceContext, Long commentId)
      Description copied from interface: CommentService
      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
      Specified by:
      hasPermissionToEdit in interface CommentService
      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
    • hasPermissionToEdit

      public boolean hasPermissionToEdit(ApplicationUser user, Comment comment, ErrorCollection errorCollection)
      Description copied from interface: CommentService
      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.

      Specified by:
      hasPermissionToEdit in interface CommentService
      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