PageRenderTime 53ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/jira-project/jira-components/jira-core/src/main/java/com/atlassian/jira/web/action/admin/issuetypes/AddNewIssueTypeToScheme.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 284 lines | 226 code | 52 blank | 6 comment | 16 complexity | 11e258beceaadf1d48c561b0f01ecffa MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.web.action.admin.issuetypes;
  2. import com.atlassian.jira.config.IssueTypeService;
  3. import com.atlassian.jira.config.SubTaskManager;
  4. import com.atlassian.jira.exception.CreateException;
  5. import com.atlassian.jira.issue.fields.option.IssueConstantOption;
  6. import com.atlassian.jira.issue.issuetype.IssueType;
  7. import com.atlassian.jira.security.xsrf.RequiresXsrfCheck;
  8. import com.atlassian.jira.util.JiraArrayUtils;
  9. import com.atlassian.jira.util.UrlBuilder;
  10. import com.atlassian.jira.util.lang.Pair;
  11. import com.atlassian.jira.web.action.JiraWebActionSupport;
  12. import com.atlassian.sal.api.websudo.WebSudoRequired;
  13. import com.google.common.base.Function;
  14. import com.google.common.collect.ImmutableList;
  15. import java.util.Collection;
  16. import java.util.List;
  17. import static com.atlassian.jira.config.IssueTypeService.CreateValidationResult;
  18. import static com.atlassian.jira.config.IssueTypeService.IssueTypeCreateInput;
  19. import static com.atlassian.jira.config.IssueTypeService.IssueTypeCreateInput.Type;
  20. import static com.google.common.collect.ImmutableList.builder;
  21. import static com.google.common.collect.ImmutableList.copyOf;
  22. import static com.google.common.collect.Iterables.transform;
  23. /**
  24. * Will add a new issue type and then redirect the user back to the modify issue type scheme page.
  25. *
  26. * @since v5.0.1
  27. */
  28. @WebSudoRequired
  29. public class AddNewIssueTypeToScheme extends JiraWebActionSupport implements AddIssueTypeAction {
  30. private static final String PARAM_SCHEME_NAME = "schemeName";
  31. private static final String PARAM_SCHEME_ID = "schemeId";
  32. private static final String PARAM_FIELD_ID = "fieldId";
  33. private static final String PARAM_PROJECT_ID = "projectId";
  34. private static final String PARAM_SCHEME_DESCRIPTION = "schemeDescription";
  35. private static final String PARAM_SELECTED_OPTIONS = "selectedOptions";
  36. private static final String PARAM_DEFAULT_OPTION = "defaultOption";
  37. private static final String PARAM_NAME = "name";
  38. private static final String PARAM_DESCRIPTION = "description";
  39. private final ManageableOptionType manageableOptionType;
  40. private final IssueTypeService issueTypeService;
  41. private String iconurl = ViewIssueTypes.NEW_ISSUE_TYPE_DEFAULT_ICON;
  42. private String style;
  43. private String name;
  44. private String description;
  45. private String fieldId;
  46. private Long schemeId;
  47. private Long projectId;
  48. private String schemeName;
  49. private String schemeDescription;
  50. private String[] selectedOptions;
  51. private String defaultOption;
  52. private IssueType newIssueType;
  53. public AddNewIssueTypeToScheme(ManageableOptionType manageableOptionType, IssueTypeService issueTypeService) {
  54. this.manageableOptionType = manageableOptionType;
  55. this.issueTypeService = issueTypeService;
  56. }
  57. @Override
  58. public String getIconurl() {
  59. return iconurl;
  60. }
  61. @Override
  62. public void setIconurl(String iconUrl) {
  63. this.iconurl = iconUrl;
  64. }
  65. @Override
  66. public String getStyle() {
  67. return style;
  68. }
  69. @Override
  70. public void setStyle(String style) {
  71. this.style = style;
  72. }
  73. @Override
  74. public String getSubmitUrl() {
  75. return "AddNewIssueTypeToScheme.jspa";
  76. }
  77. @Override
  78. public String getCancelUrl() {
  79. return createViewUrl(null);
  80. }
  81. @Override
  82. public String getName() {
  83. return name;
  84. }
  85. @Override
  86. public void setName(String name) {
  87. this.name = name;
  88. }
  89. @Override
  90. public String getDescription() {
  91. return description;
  92. }
  93. @Override
  94. public void setDescription(String description) {
  95. this.description = description;
  96. }
  97. public String getFieldId() {
  98. return fieldId;
  99. }
  100. public void setFieldId(String fieldId) {
  101. this.fieldId = fieldId;
  102. }
  103. public Long getSchemeId() {
  104. return schemeId;
  105. }
  106. public void setSchemeId(Long schemeId) {
  107. this.schemeId = schemeId;
  108. }
  109. public String getDefaultOption() {
  110. return defaultOption;
  111. }
  112. public void setDefaultOption(String defaultOption) {
  113. this.defaultOption = defaultOption;
  114. }
  115. public String[] getSelectedOptions() {
  116. return selectedOptions;
  117. }
  118. public void setSelectedOptions(final String[] selectedOptions) {
  119. // Iff the one and only select is null
  120. if (JiraArrayUtils.isContainsOneBlank(selectedOptions)) {
  121. this.selectedOptions = new String[0];
  122. } else {
  123. this.selectedOptions = selectedOptions;
  124. }
  125. }
  126. public String getSchemeName() {
  127. return schemeName;
  128. }
  129. public void setSchemeName(String schemeName) {
  130. this.schemeName = schemeName;
  131. }
  132. public String getSchemeDescription() {
  133. return schemeDescription;
  134. }
  135. public void setSchemeDescription(String schemeDescription) {
  136. this.schemeDescription = schemeDescription;
  137. }
  138. public Long getProjectId() {
  139. return projectId;
  140. }
  141. public void setProjectId(Long projectId) {
  142. this.projectId = projectId;
  143. }
  144. public IssueConstantOption getNewIssueType() {
  145. return newIssueType == null ? null : new IssueConstantOption(newIssueType);
  146. }
  147. @Override
  148. public List<Pair<String, Object>> getHiddenFields() {
  149. final ImmutableList.Builder<Pair<String, Object>> builder = builder();
  150. builder.add(Pair.<String, Object>nicePairOf(PARAM_SCHEME_NAME, getSchemeName()));
  151. builder.add(Pair.<String, Object>nicePairOf(PARAM_SCHEME_DESCRIPTION, getSchemeDescription()));
  152. builder.add(Pair.<String, Object>nicePairOf(PARAM_SCHEME_ID, getSchemeId()));
  153. builder.add(Pair.<String, Object>nicePairOf(PARAM_PROJECT_ID, getProjectId()));
  154. builder.add(Pair.<String, Object>nicePairOf(PARAM_FIELD_ID, getFieldId()));
  155. builder.add(Pair.<String, Object>nicePairOf(PARAM_DEFAULT_OPTION, getDefaultOption()));
  156. final String[] options = getSelectedOptions();
  157. if (options != null) {
  158. for (String s : options) {
  159. builder.add(Pair.<String, Object>nicePairOf(PARAM_SELECTED_OPTIONS, s));
  160. }
  161. }
  162. return builder.build();
  163. }
  164. @Override
  165. public ManageableOptionType getManageableOption() {
  166. return manageableOptionType;
  167. }
  168. public Collection<IssueConstantOption> getAllOptions() {
  169. return copyOf(transform(issueTypeService.getIssueTypes(getLoggedInUser()), new Function<IssueType, IssueConstantOption>() {
  170. @Override
  171. public IssueConstantOption apply(final IssueType issueType) {
  172. return new IssueConstantOption(issueType);
  173. }
  174. }));
  175. }
  176. public String doInput() {
  177. return INPUT;
  178. }
  179. @Override
  180. protected void doValidation() {
  181. IssueTypeCreateInput typeInput = getIssueTypeInput();
  182. CreateValidationResult validationResult = issueTypeService.validateCreateIssueType(getLoggedInUser(), typeInput);
  183. if (!validationResult.isValid()) {
  184. addErrorMessages(validationResult.getErrorCollection().getErrorMessages());
  185. }
  186. }
  187. @RequiresXsrfCheck
  188. protected String doExecute() throws CreateException {
  189. IssueTypeCreateInput typeInput = getIssueTypeInput();
  190. CreateValidationResult validationResult =
  191. issueTypeService.validateCreateIssueType(getLoggedInUser(), typeInput);
  192. if (!validationResult.isValid()) {
  193. addErrors(validationResult.getErrorCollection().getErrors());
  194. return ERROR;
  195. } else {
  196. final IssueTypeService.IssueTypeResult issueType =
  197. issueTypeService.createIssueType(getLoggedInUser(), validationResult);
  198. this.newIssueType = issueType.getIssueType();
  199. if (isInlineDialogMode()) {
  200. returnComplete();
  201. return SUCCESS;
  202. } else {
  203. return getRedirect(createViewUrl(issueType.getIssueType().getId()));
  204. }
  205. }
  206. }
  207. private String createViewUrl(String createdId) {
  208. final UrlBuilder builder = new UrlBuilder("ConfigureOptionSchemes!input.jspa");
  209. builder.addParameter(PARAM_NAME, getSchemeName()).addParameter(PARAM_DESCRIPTION, getSchemeDescription());
  210. builder.addParameter(PARAM_SCHEME_ID, getSchemeId()).addParameter(PARAM_FIELD_ID, getFieldId());
  211. builder.addParameter(PARAM_PROJECT_ID, getProjectId());
  212. builder.addParameter(PARAM_DEFAULT_OPTION, getDefaultOption());
  213. String[] options = getSelectedOptions();
  214. if (options != null) {
  215. for (String selectedOption : options) {
  216. builder.addParameter(PARAM_SELECTED_OPTIONS, selectedOption);
  217. }
  218. }
  219. if (createdId != null) {
  220. builder.addParameter(PARAM_SELECTED_OPTIONS, createdId);
  221. }
  222. return builder.asUrlString();
  223. }
  224. private IssueTypeCreateInput getIssueTypeInput() {
  225. final Type type = SubTaskManager.SUB_TASK_ISSUE_TYPE_STYLE.equals(style) ? Type.SUBTASK : Type.STANDARD;
  226. return IssueTypeCreateInput.builder()
  227. .setName(getName())
  228. .setDescription(getDescription())
  229. .setType(type)
  230. .build();
  231. }
  232. }