PageRenderTime 52ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/jconnect/jira/tabpanel/GoogleMapsFragment.java

https://bitbucket.org/atlassian/jiraconnect-jiraplugin/
Java | 109 lines | 94 code | 11 blank | 4 comment | 4 complexity | 6b4b91d57bb0328166da3c45e0ab2c34 MD5 | raw file
  1. package com.atlassian.jconnect.jira.tabpanel;
  2. import com.atlassian.jconnect.jira.customfields.BuiltInField;
  3. import com.atlassian.jconnect.jira.customfields.CustomFieldHelper;
  4. import com.atlassian.jconnect.jira.customfields.IssueLocation;
  5. import com.atlassian.jconnect.jira.customfields.Location;
  6. import com.atlassian.jira.bc.issue.search.SearchService;
  7. import com.atlassian.jira.config.properties.ApplicationProperties;
  8. import com.atlassian.jira.issue.Issue;
  9. import com.atlassian.jira.issue.fields.CustomField;
  10. import com.atlassian.jira.issue.search.SearchException;
  11. import com.atlassian.jira.issue.search.SearchResults;
  12. import com.atlassian.jira.plugin.projectpanel.fragment.impl.AbstractFragment;
  13. import com.atlassian.jira.project.browse.BrowseContext;
  14. import com.atlassian.jira.security.JiraAuthenticationContext;
  15. import com.atlassian.jira.util.ErrorCollection;
  16. import com.atlassian.jira.util.SimpleErrorCollection;
  17. import com.atlassian.jira.web.bean.PagerFilter;
  18. import com.atlassian.velocity.VelocityManager;
  19. import com.google.common.base.Function;
  20. import com.google.common.collect.Lists;
  21. import javax.annotation.Nullable;
  22. import java.util.Collections;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * Project Tab panel fragment with Google Maps summary.
  27. *
  28. */
  29. public class GoogleMapsFragment extends AbstractFragment
  30. {
  31. private final CustomFieldHelper customFieldHelper;
  32. private final SearchService searchService;
  33. private static final int MAX_LATEST_ISSUES = 500; // only report on the MAX_LATEST_ISSUES number of issues
  34. public GoogleMapsFragment(VelocityManager velocityManager, ApplicationProperties applicationProperites,
  35. JiraAuthenticationContext jiraAuthenticationContext, CustomFieldHelper customFieldHelper,
  36. SearchService searchService)
  37. {
  38. super(velocityManager, applicationProperites, jiraAuthenticationContext);
  39. this.customFieldHelper = customFieldHelper;
  40. this.searchService = searchService;
  41. }
  42. @Override
  43. protected Map<String, Object> createVelocityParams(BrowseContext ctx)
  44. {
  45. final Map<String, Object> params = super.createVelocityParams(ctx);
  46. final ErrorCollection errors = new SimpleErrorCollection();
  47. final List<IssueLocation> issues = collectIssueLocations(ctx, errors);
  48. params.put("errors", errors);
  49. params.put("issues", issues);
  50. params.put("firstIssue", issues.isEmpty() ? null : issues.get(0));
  51. return params;
  52. }
  53. private List<IssueLocation> collectIssueLocations(BrowseContext ctx, ErrorCollection errors)
  54. {
  55. final String jql = "project=" + ctx.getProject().getKey() + " order by createdDate";
  56. SearchService.ParseResult parseResult = searchService.parseQuery(jiraAuthenticationContext.getLoggedInUser(), jql);
  57. if (!parseResult.isValid())
  58. {
  59. errors.addErrorMessages(parseResult.getErrors().getErrorMessages());
  60. }
  61. else
  62. {
  63. try
  64. {
  65. final SearchResults results = searchService.search(jiraAuthenticationContext.getLoggedInUser(),
  66. parseResult.getQuery(), PagerFilter.newPageAlignedFilter(0, MAX_LATEST_ISSUES));
  67. return Lists.transform(results.getIssues(), new Function<Issue, IssueLocation>()
  68. {
  69. public IssueLocation apply(@Nullable Issue from) {
  70. if (from != null) {
  71. Location location = (Location) from.getCustomFieldValue(getLocationField());
  72. return location != null ? new IssueLocation(location, from) : null;
  73. }
  74. return null;
  75. }
  76. });
  77. }
  78. catch (SearchException se)
  79. {
  80. errors.addErrorMessage(se.getLocalizedMessage());
  81. }
  82. }
  83. return Collections.emptyList();
  84. }
  85. @Override
  86. protected String getTemplateDirectoryPath() {
  87. return JiraConnectProjectTabPanel.TEMPLATE_DIR;
  88. }
  89. public String getId() {
  90. return "googlemaps";
  91. }
  92. public boolean showFragment(BrowseContext browseContext) {
  93. return customFieldHelper.containsField(browseContext.getProject(), getLocationField());
  94. }
  95. private CustomField getLocationField() {
  96. return customFieldHelper.initBuiltInCustomField(BuiltInField.LOCATION);
  97. }
  98. }