/src/main/java/com/atlassian/bitbucket/internal/repository/refchange/web/RefChangeSettingsServlet.java

https://bitbucket.org/atlassianlabs/stash-refchange-settings-plugin · Java · 94 lines · 85 code · 9 blank · 0 comment · 7 complexity · b4d0f9588b02a6f0e6a3080d14ab18c1 MD5 · raw file

  1. package com.atlassian.bitbucket.internal.repository.refchange.web;
  2. import com.atlassian.soy.renderer.SoyException;
  3. import com.atlassian.soy.renderer.SoyTemplateRenderer;
  4. import com.atlassian.bitbucket.repository.refchange.RefChangeSettings;
  5. import com.atlassian.bitbucket.repository.refchange.RefChangeSettingsService;
  6. import com.atlassian.bitbucket.internal.repository.refchange.PluginMetadata;
  7. import com.atlassian.bitbucket.repository.Repository;
  8. import com.atlassian.bitbucket.repository.RepositoryService;
  9. import com.atlassian.bitbucket.permission.Permission;
  10. import com.atlassian.bitbucket.permission.PermissionValidationService;
  11. import com.atlassian.webresource.api.assembler.PageBuilderService;
  12. import com.google.common.base.Strings;
  13. import com.google.common.collect.ImmutableMap;
  14. import javax.servlet.ServletException;
  15. import javax.servlet.http.HttpServlet;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.io.IOException;
  19. import java.util.Map;
  20. public class RefChangeSettingsServlet extends HttpServlet {
  21. private final PageBuilderService pageBuilderService;
  22. private final RefChangeSettingsService refChangeSettingsService;
  23. private final RepositoryService repositoryService;
  24. private final SoyTemplateRenderer soyTemplateRenderer;
  25. private final PermissionValidationService validationService;
  26. public RefChangeSettingsServlet(PageBuilderService pageBuilderService,
  27. RefChangeSettingsService refChangeSettingsService,
  28. RepositoryService repositoryService,
  29. SoyTemplateRenderer soyTemplateRenderer,
  30. PermissionValidationService validationService) {
  31. this.pageBuilderService = pageBuilderService;
  32. this.refChangeSettingsService = refChangeSettingsService;
  33. this.repositoryService = repositoryService;
  34. this.soyTemplateRenderer = soyTemplateRenderer;
  35. this.validationService = validationService;
  36. }
  37. @Override
  38. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  39. throws ServletException, IOException {
  40. String pathInfo = request.getPathInfo();
  41. if (Strings.isNullOrEmpty(pathInfo) || pathInfo.equals("/")) {
  42. response.sendError(HttpServletResponse.SC_NOT_FOUND);
  43. return;
  44. }
  45. String[] pathParts = pathInfo.substring(1).split("/");
  46. if (pathParts.length != 2) {
  47. response.sendError(HttpServletResponse.SC_NOT_FOUND);
  48. return;
  49. }
  50. String projectKey = pathParts[0];
  51. String repoSlug = pathParts[1];
  52. Repository repository = repositoryService.getBySlug(projectKey, repoSlug);
  53. if (repository == null) {
  54. response.sendError(HttpServletResponse.SC_NOT_FOUND);
  55. return;
  56. }
  57. doView(repository, response);
  58. }
  59. private void doView(Repository repository, HttpServletResponse response)
  60. throws ServletException, IOException {
  61. validationService.validateForRepository(repository, Permission.REPO_ADMIN);
  62. RefChangeSettings refChangeSettings = refChangeSettingsService.get(repository);
  63. render(response,
  64. "bitbucket.page.refchange.settings.viewRefChangeSettings",
  65. ImmutableMap.<String, Object>builder()
  66. .put("repository", repository)
  67. .put("refChangeSettings", refChangeSettings)
  68. .build()
  69. );
  70. }
  71. private void render(HttpServletResponse response, String templateName, Map<String, Object> data)
  72. throws IOException, ServletException {
  73. pageBuilderService.assembler().resources().requireContext("plugin.page.prevent.deletion");
  74. response.setContentType("text/html;charset=UTF-8");
  75. try {
  76. soyTemplateRenderer.render(response.getWriter(), PluginMetadata.getCompleteModuleKey("soy-templates"), templateName, data);
  77. } catch (SoyException e) {
  78. Throwable cause = e.getCause();
  79. if (cause instanceof IOException) {
  80. throw (IOException) cause;
  81. }
  82. throw new ServletException(e);
  83. }
  84. }
  85. }