PageRenderTime 59ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/java/com/atlassian/jconnect/jira/customfields/CustomFieldHelper.java

https://bitbucket.org/atlassian/jiraconnect-jiraplugin/
Java | 134 lines | 111 code | 19 blank | 4 comment | 12 complexity | dc0291976fcaf5af600d49ee1c128bc7 MD5 | raw file
  1. package com.atlassian.jconnect.jira.customfields;
  2. import com.atlassian.jira.issue.CustomFieldManager;
  3. import com.atlassian.jira.issue.fields.CustomField;
  4. import com.atlassian.jira.issue.fields.config.manager.IssueTypeSchemeManager;
  5. import com.atlassian.jira.issue.issuetype.IssueType;
  6. import com.atlassian.jira.project.Project;
  7. import com.atlassian.jira.security.JiraAuthenticationContext;
  8. import com.google.common.base.Function;
  9. import com.google.common.collect.ImmutableList;
  10. import com.google.common.collect.Lists;
  11. import org.ofbiz.core.entity.GenericEntityException;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import javax.annotation.Nullable;
  15. import java.util.Collection;
  16. import java.util.List;
  17. import static com.google.common.collect.Lists.transform;
  18. /**
  19. * Custom field logic for JIRA Connect.
  20. *
  21. */
  22. public class CustomFieldHelper
  23. {
  24. private static final Logger logger = LoggerFactory.getLogger(CustomFieldHelper.class);
  25. private final CustomFieldManager customFieldManager;
  26. private final IssueTypeSchemeManager issueTypeSchemeManager;
  27. private final JiraAuthenticationContext jiraAuthenticationContext;
  28. public CustomFieldHelper(CustomFieldManager customFieldManager, IssueTypeSchemeManager issueTypeSchemeManager,
  29. JiraAuthenticationContext jiraAuthenticationContext)
  30. {
  31. this.customFieldManager = customFieldManager;
  32. this.issueTypeSchemeManager = issueTypeSchemeManager;
  33. this.jiraAuthenticationContext = jiraAuthenticationContext;
  34. }
  35. static List<String> issueTypeIdsFor(Project project, IssueTypeSchemeManager issueTypeSchemeManager) {
  36. return transform(ImmutableList.copyOf(issueTypeSchemeManager.getIssueTypesForProject(project)), new Function<IssueType, String>() {
  37. public String apply(@Nullable IssueType from) {
  38. return from.getId();
  39. }
  40. });
  41. }
  42. public boolean containsField(Project project, CustomField field)
  43. {
  44. if (field == null)
  45. {
  46. return false;
  47. }
  48. return field.isInScope(project, issueTypeIdsFor(project));
  49. }
  50. private List<String> issueTypeIdsFor(Project project) {
  51. return issueTypeIdsFor(project, issueTypeSchemeManager);
  52. }
  53. public boolean containsAllFields(Project project, CustomField... fields)
  54. {
  55. boolean result = true;
  56. for (CustomField field : fields)
  57. {
  58. result &= containsField(project, field);
  59. }
  60. return result;
  61. }
  62. public CustomField[] getAllBuiltInCustomFields() {
  63. return initBuiltInCustomFields(BuiltInField.values());
  64. }
  65. public CustomField[] initBuiltInCustomFields(BuiltInField... fields) {
  66. List<CustomField> collector = Lists.newArrayList();
  67. for (BuiltInField field : fields) {
  68. collector.add(initBuiltInCustomField(field));
  69. }
  70. return collector.toArray(new CustomField[collector.size()]);
  71. }
  72. public CustomField initBuiltInCustomField(BuiltInField field) {
  73. return initBuiltInCustomField(field, true);
  74. }
  75. private CustomField initBuiltInCustomField(BuiltInField fieldDescription, boolean createIfNecessary) {
  76. Collection<CustomField> fields = customFieldManager.getCustomFieldObjectsByName(fieldDescription.fieldName());
  77. if (fields != null)
  78. {
  79. for (CustomField field : fields)
  80. {
  81. if (field.getCustomFieldType().getKey().equals(fieldDescription.fieldTypeKey()))
  82. {
  83. return field;
  84. }
  85. }
  86. }
  87. if (createIfNecessary) {
  88. return createBuiltInCustomField(fieldDescription);
  89. } else {
  90. logger.warn("Field not yet created: " + fieldDescription.fullDescription());
  91. return null;
  92. }
  93. }
  94. private CustomField createBuiltInCustomField(BuiltInField field) {
  95. try {
  96. return customFieldManager.createCustomField(
  97. field.fieldName(),
  98. getText("customfields.builtin.description"),
  99. customFieldManager.getCustomFieldType(field.fieldTypeKey()),
  100. customFieldManager.getCustomFieldSearcher(field.searcherKey()),
  101. null,
  102. null);
  103. } catch (GenericEntityException e) {
  104. logger.warn("Unable to create field " + field.fullDescription(), e);
  105. return null;
  106. }
  107. }
  108. private String getText(String key, Object... params) {
  109. if (params.length > 0) {
  110. return jiraAuthenticationContext.getI18nHelper().getText(key, params);
  111. } else {
  112. return jiraAuthenticationContext.getI18nHelper().getText(key);
  113. }
  114. }
  115. }