PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-testkit-plugin/src/main/java/com/atlassian/jira/testkit/plugin/ProjectSchemesBackdoorResource.java

https://bitbucket.org/atlassian/jira-testkit
Java | 200 lines | 172 code | 22 blank | 6 comment | 4 complexity | f54e23f72d143d4972230fc003ffd21f MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.testkit.plugin;
  2. import com.atlassian.jira.issue.fields.config.FieldConfigScheme;
  3. import com.atlassian.jira.issue.fields.config.manager.IssueTypeSchemeManager;
  4. import com.atlassian.jira.issue.fields.layout.field.FieldConfigurationScheme;
  5. import com.atlassian.jira.issue.fields.layout.field.FieldLayoutManager;
  6. import com.atlassian.jira.issue.security.IssueSecuritySchemeManager;
  7. import com.atlassian.jira.notification.NotificationSchemeManager;
  8. import com.atlassian.jira.permission.PermissionSchemeManager;
  9. import com.atlassian.jira.project.Project;
  10. import com.atlassian.jira.project.ProjectManager;
  11. import com.atlassian.jira.scheme.Scheme;
  12. import com.atlassian.jira.testkit.beans.FieldConfigurationSchemeBean;
  13. import com.atlassian.jira.testkit.beans.IssueSecuritySchemeBean;
  14. import com.atlassian.jira.testkit.beans.IssueTypeSchemeBean;
  15. import com.atlassian.jira.testkit.beans.NotificationSchemeBean;
  16. import com.atlassian.jira.testkit.beans.PermissionSchemeBean;
  17. import com.atlassian.jira.testkit.beans.ProjectSchemesBean;
  18. import com.atlassian.jira.testkit.beans.WorkflowSchemeData;
  19. import com.atlassian.jira.testkit.plugin.beanbuilders.FieldConfigurationSchemeBeanFactory;
  20. import com.atlassian.jira.testkit.plugin.beanbuilders.IssueSecuritySchemeBeanFactory;
  21. import com.atlassian.jira.testkit.plugin.beanbuilders.IssueTypeSchemeBeanFactory;
  22. import com.atlassian.jira.testkit.plugin.beanbuilders.NotificationSchemeBeanFactory;
  23. import com.atlassian.jira.testkit.plugin.beanbuilders.PermissionSchemeBeanFactory;
  24. import com.atlassian.jira.testkit.plugin.workflows.WorkflowSchemeDataFactory;
  25. import com.atlassian.jira.workflow.AssignableWorkflowScheme;
  26. import com.atlassian.jira.workflow.WorkflowScheme;
  27. import com.atlassian.jira.workflow.WorkflowSchemeManager;
  28. import com.atlassian.plugins.rest.common.security.AnonymousAllowed;
  29. import java.util.regex.Pattern;
  30. import javax.ws.rs.Consumes;
  31. import javax.ws.rs.GET;
  32. import javax.ws.rs.Path;
  33. import javax.ws.rs.PathParam;
  34. import javax.ws.rs.Produces;
  35. import javax.ws.rs.core.MediaType;
  36. import javax.ws.rs.core.Response;
  37. /**
  38. * Retrieves the schemes for the project specified. This resource may not be exhaustive - it may not return all schemes
  39. * for the project.
  40. *
  41. * @since v6.3
  42. */
  43. @AnonymousAllowed
  44. @Produces ({ MediaType.APPLICATION_JSON })
  45. @Consumes ({ MediaType.APPLICATION_JSON })
  46. @Path ("project/{projectIdOrKey}/schemes")
  47. public class ProjectSchemesBackdoorResource
  48. {
  49. private static final Pattern PROJECT_ID_PATTERN = Pattern.compile("^[1-9]\\d{0,17}$");
  50. private final FieldLayoutManager fieldLayoutManager;
  51. private final IssueSecuritySchemeManager issueSecuritySchemeManager;
  52. private final IssueTypeSchemeManager issueTypeSchemeManager;
  53. private final NotificationSchemeManager notificationSchemeManager;
  54. private final PermissionSchemeManager permissionSchemeManager;
  55. private final ProjectManager projectManager;
  56. private final WorkflowSchemeDataFactory workflowSchemeDataFactory;
  57. private final WorkflowSchemeManager workflowSchemeManager;
  58. public ProjectSchemesBackdoorResource(
  59. final FieldLayoutManager fieldLayoutManager,
  60. final IssueSecuritySchemeManager issueSecuritySchemeManager,
  61. final IssueTypeSchemeManager issueTypeSchemeManager,
  62. final NotificationSchemeManager notificationSchemeManager,
  63. final PermissionSchemeManager permissionSchemeManager,
  64. final ProjectManager projectManager,
  65. final WorkflowSchemeDataFactory workflowSchemeDataFactory,
  66. final WorkflowSchemeManager workflowSchemeManager)
  67. {
  68. this.fieldLayoutManager = fieldLayoutManager;
  69. this.issueSecuritySchemeManager = issueSecuritySchemeManager;
  70. this.issueTypeSchemeManager = issueTypeSchemeManager;
  71. this.notificationSchemeManager = notificationSchemeManager;
  72. this.permissionSchemeManager = permissionSchemeManager;
  73. this.projectManager = projectManager;
  74. this.workflowSchemeDataFactory = workflowSchemeDataFactory;
  75. this.workflowSchemeManager = workflowSchemeManager;
  76. }
  77. @GET
  78. public Response getProjectSchemes(@PathParam ("projectIdOrKey") String projectIdOrKey)
  79. {
  80. if (projectIdOrKey == null)
  81. {
  82. return Response.status(Response.Status.BAD_REQUEST).entity("projectIdOrKey must be provided.").build();
  83. }
  84. Project project = getProject(projectIdOrKey);
  85. if (project == null)
  86. {
  87. return Response.status(Response.Status.NOT_FOUND).entity("The specified project does not exist.").build();
  88. }
  89. return Response.ok(new ProjectSchemesBeanBuilder()
  90. .fieldConfigurationScheme(getFieldConfigurationScheme(project))
  91. .issueSecurityScheme(getIssueSecurityScheme(project))
  92. .issueTypeScheme(getIssueTypeScheme(project))
  93. .notificationScheme(getNotificationScheme(project))
  94. .permissionScheme(getPermissionScheme(project))
  95. .workflowScheme(getWorkflowScheme(project))
  96. .build()
  97. ).build();
  98. }
  99. private Project getProject(final String projectIdOrKey)
  100. {
  101. return PROJECT_ID_PATTERN.matcher(projectIdOrKey).matches()
  102. ? projectManager.getProjectObj(Long.parseLong(projectIdOrKey))
  103. : projectManager.getProjectObjByKey(projectIdOrKey);
  104. }
  105. private FieldConfigurationScheme getFieldConfigurationScheme(final Project project)
  106. {
  107. return fieldLayoutManager.getFieldConfigurationScheme(project);
  108. }
  109. private Scheme getIssueSecurityScheme(final Project project)
  110. {
  111. return issueSecuritySchemeManager.getSchemeFor(project);
  112. }
  113. private FieldConfigScheme getIssueTypeScheme(final Project project)
  114. {
  115. return issueTypeSchemeManager.getConfigScheme(project);
  116. }
  117. private Scheme getNotificationScheme(final Project project)
  118. {
  119. return notificationSchemeManager.getSchemeFor(project);
  120. }
  121. private Scheme getPermissionScheme(final Project project)
  122. {
  123. return permissionSchemeManager.getSchemeFor(project);
  124. }
  125. private AssignableWorkflowScheme getWorkflowScheme(final Project project)
  126. {
  127. return workflowSchemeManager.getWorkflowSchemeObj(project);
  128. }
  129. class ProjectSchemesBeanBuilder {
  130. private FieldConfigurationSchemeBean fieldConfigurationSchemeBean;
  131. private IssueSecuritySchemeBean issueSecuritySchemeBean;
  132. private IssueTypeSchemeBean issueTypeSchemeBean;
  133. private NotificationSchemeBean notificationSchemeBean;
  134. private PermissionSchemeBean permissionSchemeBean;
  135. private WorkflowSchemeData workflowSchemeBean;
  136. public ProjectSchemesBeanBuilder fieldConfigurationScheme(FieldConfigurationScheme fieldConfigurationScheme)
  137. {
  138. fieldConfigurationSchemeBean = FieldConfigurationSchemeBeanFactory.toFieldConfigurationSchemeBean(fieldConfigurationScheme);
  139. return this;
  140. }
  141. public ProjectSchemesBeanBuilder issueSecurityScheme(Scheme issueSecurityScheme)
  142. {
  143. issueSecuritySchemeBean = IssueSecuritySchemeBeanFactory.toIssueSecuritySchemeBean(issueSecurityScheme);
  144. return this;
  145. }
  146. public ProjectSchemesBeanBuilder issueTypeScheme(FieldConfigScheme issueTypeScheme)
  147. {
  148. issueTypeSchemeBean = IssueTypeSchemeBeanFactory.toIssueTypeSchemeBean(issueTypeScheme);
  149. return this;
  150. }
  151. public ProjectSchemesBeanBuilder notificationScheme(Scheme notificationScheme)
  152. {
  153. notificationSchemeBean = NotificationSchemeBeanFactory.toNotificationSchemeBean(notificationScheme);
  154. return this;
  155. }
  156. public ProjectSchemesBeanBuilder permissionScheme(Scheme permissionScheme)
  157. {
  158. permissionSchemeBean = PermissionSchemeBeanFactory.toPermissionSchemeBean(permissionScheme);
  159. return this;
  160. }
  161. public ProjectSchemesBeanBuilder workflowScheme(WorkflowScheme workflowScheme)
  162. {
  163. workflowSchemeBean = workflowSchemeDataFactory.toData(workflowScheme);
  164. return this;
  165. }
  166. public ProjectSchemesBean build()
  167. {
  168. return new ProjectSchemesBean(
  169. fieldConfigurationSchemeBean,
  170. issueSecuritySchemeBean,
  171. issueTypeSchemeBean,
  172. notificationSchemeBean,
  173. permissionSchemeBean,
  174. workflowSchemeBean
  175. );
  176. }
  177. }
  178. }