/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
- package com.atlassian.bitbucket.internal.repository.refchange.web;
- import com.atlassian.soy.renderer.SoyException;
- import com.atlassian.soy.renderer.SoyTemplateRenderer;
- import com.atlassian.bitbucket.repository.refchange.RefChangeSettings;
- import com.atlassian.bitbucket.repository.refchange.RefChangeSettingsService;
- import com.atlassian.bitbucket.internal.repository.refchange.PluginMetadata;
- import com.atlassian.bitbucket.repository.Repository;
- import com.atlassian.bitbucket.repository.RepositoryService;
- import com.atlassian.bitbucket.permission.Permission;
- import com.atlassian.bitbucket.permission.PermissionValidationService;
- import com.atlassian.webresource.api.assembler.PageBuilderService;
- import com.google.common.base.Strings;
- import com.google.common.collect.ImmutableMap;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.util.Map;
- public class RefChangeSettingsServlet extends HttpServlet {
- private final PageBuilderService pageBuilderService;
- private final RefChangeSettingsService refChangeSettingsService;
- private final RepositoryService repositoryService;
- private final SoyTemplateRenderer soyTemplateRenderer;
- private final PermissionValidationService validationService;
- public RefChangeSettingsServlet(PageBuilderService pageBuilderService,
- RefChangeSettingsService refChangeSettingsService,
- RepositoryService repositoryService,
- SoyTemplateRenderer soyTemplateRenderer,
- PermissionValidationService validationService) {
- this.pageBuilderService = pageBuilderService;
- this.refChangeSettingsService = refChangeSettingsService;
- this.repositoryService = repositoryService;
- this.soyTemplateRenderer = soyTemplateRenderer;
- this.validationService = validationService;
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String pathInfo = request.getPathInfo();
- if (Strings.isNullOrEmpty(pathInfo) || pathInfo.equals("/")) {
- response.sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- String[] pathParts = pathInfo.substring(1).split("/");
- if (pathParts.length != 2) {
- response.sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- String projectKey = pathParts[0];
- String repoSlug = pathParts[1];
- Repository repository = repositoryService.getBySlug(projectKey, repoSlug);
- if (repository == null) {
- response.sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- doView(repository, response);
- }
- private void doView(Repository repository, HttpServletResponse response)
- throws ServletException, IOException {
- validationService.validateForRepository(repository, Permission.REPO_ADMIN);
- RefChangeSettings refChangeSettings = refChangeSettingsService.get(repository);
- render(response,
- "bitbucket.page.refchange.settings.viewRefChangeSettings",
- ImmutableMap.<String, Object>builder()
- .put("repository", repository)
- .put("refChangeSettings", refChangeSettings)
- .build()
- );
- }
- private void render(HttpServletResponse response, String templateName, Map<String, Object> data)
- throws IOException, ServletException {
- pageBuilderService.assembler().resources().requireContext("plugin.page.prevent.deletion");
- response.setContentType("text/html;charset=UTF-8");
- try {
- soyTemplateRenderer.render(response.getWriter(), PluginMetadata.getCompleteModuleKey("soy-templates"), templateName, data);
- } catch (SoyException e) {
- Throwable cause = e.getCause();
- if (cause instanceof IOException) {
- throw (IOException) cause;
- }
- throw new ServletException(e);
- }
- }
- }