Class DefaultWatcherService

java.lang.Object
com.atlassian.jira.bc.issue.watcher.DefaultWatcherService
All Implemented Interfaces:
WatcherService

public class DefaultWatcherService extends Object implements WatcherService
Implementation of WatcherService.
Since:
v4.2
  • Constructor Details

    • DefaultWatcherService

      public DefaultWatcherService(ApplicationProperties applicationProperties, I18nHelper.BeanFactory i18n, PermissionManager permissionManager, WatcherManager watcherManager, UserManager userManager)
      Creates a new DefaultWatcherService with the given dependencies.
      Parameters:
      applicationProperties - an ApplicationProperties
      i18n - a I18nBean
      permissionManager - a PermissionManager
      watcherManager - a WatcherManager
      userManager - a UserManager
  • Method Details

    • getWatchers

      public ServiceOutcome<Pair<Integer,List<ApplicationUser>>> getWatchers(Issue issue, @Nullable ApplicationUser remoteUser) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Returns a the total number of watchers for a given issue in the first element of the returned Pair, and the list of visible watchers in the second element of the Pair. Note that if the remote user does not have permission to view the list of watchers, it is possible for the number of elements in the returned user list to be less than the returned number of watchers.
      Specified by:
      getWatchers in interface WatcherService
      Parameters:
      issue - the Issue to find watchers for
      remoteUser - the calling User
      Returns:
      a ServiceOutcome containing the total number of watchers, and a list of visible watchers
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • addWatcher

      public ServiceOutcome<List<ApplicationUser>> addWatcher(Issue issue, ApplicationUser remoteUser, ApplicationUser watcher) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Adds a watcher to an issue's list of watchers, returning the updated list of watchers.
      Specified by:
      addWatcher in interface WatcherService
      Parameters:
      issue - the issue to update
      remoteUser - the remote user on behalf of which the operation is performed
      watcher - the watcher to add
      Returns:
      a ServiceOutcome containing a list of User
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • addWatcherToAll

      public WatcherService.BulkWatchResult addWatcherToAll(Collection<Issue> issues, ApplicationUser remoteUser, ApplicationUser watcher) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Adds a watcher to all of the supplied issues.

      If there is partial success, the issues which we can modify will be modified and the ones we cannot will be returned in a BulkWatchResult.

      Specified by:
      addWatcherToAll in interface WatcherService
      Parameters:
      issues - the list of issues to update
      remoteUser - the remote user on behalf of which the operation is performed
      watcher - the watcher to add
      Returns:
      a BulkWatchResult containing the issues that could not be modified
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • addWatcherToAll

      public WatcherService.BulkWatchResult addWatcherToAll(Collection<Issue> issues, ApplicationUser remoteUser, ApplicationUser watcher, Context taskContext) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Adds a watcher to all of the supplied issues.

      If there is partial success, the issues which we can modify will be modified and the ones we cannot will be returned in a BulkWatchResult.

      Specified by:
      addWatcherToAll in interface WatcherService
      Parameters:
      issues - the list of issues to update
      remoteUser - the remote user on behalf of which the operation is performed
      watcher - the watcher to add
      taskContext - a context through which progress can be reported back
      Returns:
      a BulkWatchResult containing the issues that could not be modified
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • removeWatcher

      public ServiceOutcome<List<ApplicationUser>> removeWatcher(Issue issue, ApplicationUser remoteUser, ApplicationUser watcher) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Removes a watcher from an issue's list of watchers, returning the updated list of watchers.
      Specified by:
      removeWatcher in interface WatcherService
      Parameters:
      issue - the Issue to update
      remoteUser - a User indicating the user on behalf of whom this operation is being performed
      watcher - a User representing the User to remove from the watcher list
      Returns:
      a ServiceOutcome containing a list of User
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • removeWatcherFromAll

      public WatcherService.BulkWatchResult removeWatcherFromAll(Collection<Issue> issues, ApplicationUser remoteUser, ApplicationUser watcher) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Removes a watcher from all of the supplied issues.

      If there is partial success, the issues which we can modify will be modified and the ones we cannot will be returned in a BulkWatchResult.

      Specified by:
      removeWatcherFromAll in interface WatcherService
      Parameters:
      issues - the list of Issues to update
      remoteUser - an ApplicationUser indicating the user on behalf of whom this operation is being performed
      watcher - an ApplicationUser representing the user to remove from the watcher list for each issue
      Returns:
      a BulkWatchResult containing the issues that could not be modified
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • removeWatcherFromAll

      public WatcherService.BulkWatchResult removeWatcherFromAll(Collection<Issue> issues, ApplicationUser remoteUser, ApplicationUser watcher, Context taskContext) throws WatchingDisabledException
      Description copied from interface: WatcherService
      Removes a watcher from all of the supplied issues.

      If there is partial success, the issues which we can modify will be modified and the ones we cannot will be returned in a BulkWatchResult.

      Specified by:
      removeWatcherFromAll in interface WatcherService
      Parameters:
      issues - the list of Issues to update
      remoteUser - an ApplicationUser indicating the user on behalf of whom this operation is being performed
      watcher - an ApplicationUser representing the user to remove from the watcher list for each issue
      taskContext - a context through which progress can be reported back
      Returns:
      a BulkWatchResult containing the issues that could not be modified
      Throws:
      WatchingDisabledException - if watching is currently disabled
    • canWatchAll

      public boolean canWatchAll(Iterable<Issue> issues, ApplicationUser applicationUser)
      Description copied from interface: WatcherService
      Whether the specified user can watch all the specified issues.
      Specified by:
      canWatchAll in interface WatcherService
      Parameters:
      issues - The list of issues to check
      applicationUser - The user to execute this check for
      Returns:
      true; if the specified user can watch all the specified issues; otherwise, false is returned.
    • canUnwatchAll

      public boolean canUnwatchAll(Iterable<Issue> issues, ApplicationUser remoteUser)
      Description copied from interface: WatcherService
      Whether the specified user can unwatch all the specified issues.
      Specified by:
      canUnwatchAll in interface WatcherService
      Parameters:
      issues - The list of issues to check
      remoteUser - The user to execute this check for
      Returns:
      true; if the specified user can unwatch all the specified issues; otherwise, false is returned.
    • isWatchingEnabled

      public boolean isWatchingEnabled()
      Returns true iff watching is enabled.
      Specified by:
      isWatchingEnabled in interface WatcherService
      Returns:
      true iff watching is enabled
    • hasViewWatcherListPermission

      public boolean hasViewWatcherListPermission(Issue issue, @Nullable ApplicationUser remoteUser)
      Returns true iff the given User has permission to view the watcher list of the issue.
      Specified by:
      hasViewWatcherListPermission in interface WatcherService
      Parameters:
      issue - an Issue
      remoteUser - a User
      Returns:
      a boolean indicating whether the user can view the watch list
    • getWatcherUsernames

      protected Pair<Integer,List<String>> getWatcherUsernames(Issue issue, ApplicationUser remoteUser) throws WatchingDisabledException
      Returns a pair containing the watcher count and the watcher usernames for a given issue.
      Parameters:
      issue - the Issue
      remoteUser - the calling User
      Returns:
      a Pair containing the watcher count and the watcher usernames for a given issue
      Throws:
      WatchingDisabledException - if watching is disabled
    • getCurrentWatchersFor

      protected List<ApplicationUser> getCurrentWatchersFor(Issue issue)
      Returns a List containing the users that are currently watching an issue.
      Parameters:
      issue - the Issue to get the watcher list for
      Returns:
      a List of users that are watching the issue
    • canEditWatcherList

      protected boolean canEditWatcherList(Issue issue, @Nullable ApplicationUser remoteUser)
      Returns true iff the given User has permission to edit the watcher list of the issue.
      Parameters:
      issue - an Issue
      remoteUser - a User
      Returns:
      a boolean indicating whether the user can edit the watch list
    • convertUsers

      protected <T extends ApplicationUser> Pair<Integer,List<T>> convertUsers(Pair<Integer,List<String>> watchers, com.google.common.base.Function<String,T> function)
      Converts the usernames into User objects using the given function.
      Parameters:
      watchers - a Pair of watcher count and watcher usernames
      function - a Function used for conversion
      Returns:
      a Pair of watcher count and User object
    • checkModifyWatchersPermission

      protected void checkModifyWatchersPermission(Issue issue, ApplicationUser remoteUser, ApplicationUser watcher) throws com.atlassian.jira.bc.issue.watcher.DefaultWatcherService.PermissionException, WatchingDisabledException
      Ensures that the given remoteUser has permission to add or remove the given watcher to/from the issue. Throws an exception if the user does not have permission.
      Parameters:
      issue - an Issue
      remoteUser - a User representing the caller
      watcher - a User representing the watcher to add or remove
      Throws:
      com.atlassian.jira.bc.issue.watcher.DefaultWatcherService.PermissionException - if the caller does not have permission to manage watchers, or cannot see the issue
      WatchingDisabledException - if watching is disabled