PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/atlassian/jiraconnect-jiraplugin/
Java | 99 lines | 79 code | 15 blank | 5 comment | 1 complexity | 4e1c93e33e78215c55c5b0db5ce0129f MD5 | raw file
  1. package com.atlassian.jconnect.jira.customfields;
  2. import com.atlassian.jira.JiraDataTypes;
  3. import com.atlassian.jira.issue.customfields.CustomFieldSearcher;
  4. import com.atlassian.jira.issue.customfields.SingleValueCustomFieldValueProvider;
  5. import com.atlassian.jira.issue.customfields.converters.DoubleConverter;
  6. import com.atlassian.jira.issue.customfields.searchers.AbstractInitializationCustomFieldSearcher;
  7. import com.atlassian.jira.issue.customfields.searchers.CustomFieldSearcherClauseHandler;
  8. import com.atlassian.jira.issue.customfields.searchers.SimpleCustomFieldSearcherClauseHandler;
  9. import com.atlassian.jira.issue.customfields.searchers.information.CustomFieldSearcherInformation;
  10. import com.atlassian.jira.issue.customfields.searchers.renderer.CustomFieldRenderer;
  11. import com.atlassian.jira.issue.customfields.searchers.transformer.CustomFieldInputHelper;
  12. import com.atlassian.jira.issue.customfields.searchers.transformer.ExactTextCustomFieldSearchInputTransformer;
  13. import com.atlassian.jira.issue.fields.CustomField;
  14. import com.atlassian.jira.issue.index.indexers.FieldIndexer;
  15. import com.atlassian.jira.issue.search.ClauseNames;
  16. import com.atlassian.jira.issue.search.searchers.information.SearcherInformation;
  17. import com.atlassian.jira.issue.search.searchers.renderer.SearchRenderer;
  18. import com.atlassian.jira.issue.search.searchers.transformer.SearchInputTransformer;
  19. import com.atlassian.jira.jql.operand.JqlOperandResolver;
  20. import com.atlassian.jira.security.JiraAuthenticationContext;
  21. import com.atlassian.jira.web.FieldVisibilityManager;
  22. import com.atlassian.query.operator.Operator;
  23. import java.util.Collections;
  24. import java.util.EnumSet;
  25. import java.util.Set;
  26. import java.util.concurrent.atomic.AtomicReference;
  27. import static com.google.common.base.Preconditions.checkState;
  28. /**
  29. * {@link com.atlassian.jira.issue.customfields.CustomFieldSearcher} for location custom field.
  30. *
  31. * @since v4.4
  32. */
  33. public class LocationSearcher extends AbstractInitializationCustomFieldSearcher implements CustomFieldSearcher {
  34. private final FieldVisibilityManager fieldVisibilityManager;
  35. private final CustomFieldInputHelper customFieldInputHelper;
  36. private final JqlOperandResolver jqlOperandResolver;
  37. private final DoubleConverter doubleConverter;
  38. private final JiraAuthenticationContext authenticationContext;
  39. private volatile CustomFieldSearcherClauseHandler clauseHandler;
  40. private volatile CustomFieldSearcherInformation searcherInformation;
  41. private volatile SearchInputTransformer searchInputTransformer;
  42. private volatile SearchRenderer searchRenderer;
  43. public LocationSearcher(FieldVisibilityManager fieldVisibilityManager, CustomFieldInputHelper customFieldInputHelper,
  44. JqlOperandResolver jqlOperandResolver, DoubleConverter doubleConverter,
  45. JiraAuthenticationContext authenticationContext) {
  46. this.fieldVisibilityManager = fieldVisibilityManager;
  47. this.customFieldInputHelper = customFieldInputHelper;
  48. this.jqlOperandResolver = jqlOperandResolver;
  49. this.doubleConverter = doubleConverter;
  50. this.authenticationContext = authenticationContext;
  51. }
  52. public void init(CustomField field) {
  53. final FieldIndexer indexer = new LocationIndexer(fieldVisibilityManager, field, doubleConverter);
  54. final ClauseNames names = field.getClauseNames();
  55. final Set<Operator> supportedOps = EnumSet.of(Operator.LIKE, Operator.IN);
  56. this.searcherInformation = new CustomFieldSearcherInformation(field.getId(), field.getNameKey(),
  57. Collections.singletonList(indexer), new AtomicReference<CustomField>(field));
  58. this.searchRenderer = new CustomFieldRenderer(names, getDescriptor(), field,
  59. new SingleValueCustomFieldValueProvider(), fieldVisibilityManager);
  60. this.searchInputTransformer = new ExactTextCustomFieldSearchInputTransformer(field, names,
  61. searcherInformation.getId(), customFieldInputHelper);
  62. this.clauseHandler = new SimpleCustomFieldSearcherClauseHandler(
  63. new LocationSearchClauseValidator(supportedOps, jqlOperandResolver),
  64. new LocationLikeQueryFactory(jqlOperandResolver, field.getId(), doubleConverter, authenticationContext),
  65. supportedOps,
  66. JiraDataTypes.TEXT);
  67. }
  68. public CustomFieldSearcherClauseHandler getCustomFieldSearcherClauseHandler() {
  69. return checkInitialized(clauseHandler, "customFieldSearcherClauseHandler");
  70. }
  71. public SearcherInformation<CustomField> getSearchInformation() {
  72. return checkInitialized(searcherInformation, "searcherInformation");
  73. }
  74. public SearchInputTransformer getSearchInputTransformer() {
  75. return checkInitialized(searchInputTransformer, "searchInputTransformer");
  76. }
  77. public SearchRenderer getSearchRenderer() {
  78. return checkInitialized(searchRenderer, "searchRenderer");
  79. }
  80. private <T> T checkInitialized(T instance, String name) {
  81. checkState(instance != null, name + " not initialized! .init() has not been called yet");
  82. return instance;
  83. }
  84. }