PageRenderTime 50ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/stash/plugin/inbox/rest/InboxResource.java

https://bitbucket.org/pepoirot/stash-inbox-plugin
Java | 97 lines | 83 code | 14 blank | 0 comment | 0 complexity | d9869bd3e046cd1201bb0ccc9b8bb21a MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.stash.plugin.inbox.rest;
  2. import com.atlassian.plugins.rest.common.security.AnonymousAllowed;
  3. import com.atlassian.stash.i18n.I18nService;
  4. import com.atlassian.stash.nav.NavBuilder;
  5. import com.atlassian.stash.pull.PullRequest;
  6. import com.atlassian.stash.pull.PullRequestRole;
  7. import com.atlassian.stash.pull.PullRequestService;
  8. import com.atlassian.stash.pull.PullRequestState;
  9. import com.atlassian.stash.rest.data.RestPage;
  10. import com.atlassian.stash.rest.data.RestPullRequest;
  11. import com.atlassian.stash.rest.util.BadRequestException;
  12. import com.atlassian.stash.rest.util.ResponseFactory;
  13. import com.atlassian.stash.rest.util.RestResource;
  14. import com.atlassian.stash.rest.util.RestUtils;
  15. import com.atlassian.stash.user.PermissionValidationService;
  16. import com.atlassian.stash.user.StashAuthenticationContext;
  17. import com.atlassian.stash.util.Page;
  18. import com.atlassian.stash.util.PageRequest;
  19. import com.atlassian.stash.util.PageRequestImpl;
  20. import com.google.common.collect.ImmutableMap;
  21. import com.sun.jersey.spi.resource.Singleton;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import javax.ws.rs.*;
  25. import javax.ws.rs.core.MediaType;
  26. import javax.ws.rs.core.Response;
  27. import java.util.Arrays;
  28. import java.util.Map;
  29. @Path("/")
  30. @Consumes({MediaType.APPLICATION_JSON})
  31. @Produces({RestUtils.APPLICATION_JSON_UTF8})
  32. @Singleton
  33. @AnonymousAllowed
  34. public class InboxResource extends RestResource {
  35. private static final Logger log = LoggerFactory.getLogger(InboxResource.class);
  36. private final PullRequestService pullRequestService;
  37. private final StashAuthenticationContext authenticationContext;
  38. private final PermissionValidationService permissionValidationService;
  39. private final NavBuilder navBuilder;
  40. public InboxResource(PullRequestService pullRequestService, StashAuthenticationContext authenticationContext,
  41. PermissionValidationService permissionValidationService, NavBuilder navBuilder, I18nService i18nService) {
  42. super(i18nService);
  43. this.pullRequestService = pullRequestService;
  44. this.authenticationContext = authenticationContext;
  45. this.permissionValidationService = permissionValidationService;
  46. this.navBuilder = navBuilder;
  47. }
  48. @SuppressWarnings("ConstantConditions")
  49. @GET
  50. @Path("pull-requests")
  51. public Response getPullRequests(@QueryParam("start") @DefaultValue(RestUtils.DEFAULT_START) int start,
  52. @QueryParam("limit") @DefaultValue(RestUtils.DEFAULT_LIMIT) int limit,
  53. @QueryParam("role") @DefaultValue("reviewer") String role) {
  54. permissionValidationService.validateAuthenticated();
  55. log.debug("Retrieving pull requests for user {}", authenticationContext.getCurrentUser().getDisplayName());
  56. PageRequest pageRequest = new PageRequestImpl(start, limit);
  57. Page<PullRequest> pullRequestPage = pullRequestService.findByParticipant(authenticationContext.getCurrentUser(),
  58. parseRole(role), false, PullRequestState.OPEN, null, pageRequest);
  59. return ResponseFactory.ok(
  60. new RestPage<RestPullRequest>(pullRequestPage, RestPullRequest.REST_TRANSFORM)
  61. ).build();
  62. }
  63. @SuppressWarnings("ConstantConditions")
  64. @GET
  65. @Path("pull-requests/count")
  66. public Response getPullRequestCount() {
  67. permissionValidationService.validateAuthenticated();
  68. log.debug("Retrieving pull request count for user {}", authenticationContext.getCurrentUser().getDisplayName());
  69. long count = pullRequestService.countForParticipant(authenticationContext.getCurrentUser(),
  70. PullRequestRole.REVIEWER, false, PullRequestState.OPEN);
  71. Map<String, Long> response = ImmutableMap.of("count", count);
  72. return ResponseFactory.ok(response).build();
  73. }
  74. private PullRequestRole parseRole(String role) {
  75. try {
  76. return PullRequestRole.valueOf(role.toUpperCase());
  77. } catch (IllegalArgumentException e) {
  78. throw new BadRequestException(
  79. i18nService.getText("stash.rest.inbox.role.invalid", null, role, Arrays.asList(PullRequestRole.values()))
  80. );
  81. }
  82. }
  83. }