PageRenderTime 28ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/jira/collector/plugin/components/CollectorActivityHelperImpl.java

https://bitbucket.org/knecht_andreas/jira-issue-collector-plugin/
Java | 101 lines | 85 code | 15 blank | 1 comment | 5 complexity | dbe9fe69428a5c294450d08c88e22021 MD5 | raw file
  1. package com.atlassian.jira.collector.plugin.components;
  2. import com.atlassian.crowd.embedded.api.User;
  3. import com.atlassian.jira.bc.issue.search.SearchService;
  4. import com.atlassian.jira.issue.Issue;
  5. import com.atlassian.jira.issue.search.SearchException;
  6. import com.atlassian.jira.issue.search.SearchResults;
  7. import com.atlassian.jira.jql.builder.JqlQueryBuilder;
  8. import com.atlassian.jira.web.bean.PagerFilter;
  9. import com.atlassian.query.Query;
  10. import com.atlassian.query.order.SortOrder;
  11. import org.apache.log4j.Logger;
  12. import org.joda.time.LocalDate;
  13. import java.util.ArrayList;
  14. import java.util.Collections;
  15. import java.util.List;
  16. public class CollectorActivityHelperImpl implements CollectorActivityHelper
  17. {
  18. private static final Logger log = Logger.getLogger(CollectorActivityHelperImpl.class);
  19. private final SearchService searchService;
  20. public CollectorActivityHelperImpl(final SearchService searchService)
  21. {
  22. this.searchService = searchService;
  23. }
  24. @Override
  25. public String getJql(final User loggedInUser, final Collector collector)
  26. {
  27. return searchService.getJqlString(getQuery(collector));
  28. }
  29. @Override
  30. public String getIssueNavigatorUrl(final User loggedInUser, final Collector collector)
  31. {
  32. return "/secure/IssueNavigator.jspa?reset=true" + searchService.getQueryString(loggedInUser, getQuery(collector)) + "&mode=hide";
  33. }
  34. @Override
  35. public List<Integer> getIssuesCreatedPerDay(final User loggedInUser, final Collector collector, int daysPast)
  36. {
  37. int realDaysPast = Math.abs(daysPast);
  38. final Query query = JqlQueryBuilder.newClauseBuilder(getQuery(collector)).and().createdAfter("-" + realDaysPast + "d").buildQuery();
  39. try
  40. {
  41. final SearchResults result = searchService.search(loggedInUser, query, PagerFilter.getUnlimitedFilter());
  42. final List<Issue> issues = result.getIssues();
  43. final int[] createdPerDay = getNormalizedSums(realDaysPast, issues);
  44. final List<Integer> ret = new ArrayList<Integer>(createdPerDay.length);
  45. for (int sum : createdPerDay)
  46. {
  47. ret.add(sum);
  48. }
  49. return ret;
  50. }
  51. catch (SearchException e)
  52. {
  53. log.error("Error running search '" + query + "'", e);
  54. }
  55. return Collections.emptyList();
  56. }
  57. int[] getNormalizedSums(final int realDaysPast, final List<Issue> issues)
  58. {
  59. final int[] createdPerDay = new int[realDaysPast];
  60. final LocalDate dateTime = new LocalDate();
  61. LocalDate start = dateTime.dayOfYear().addToCopy(-realDaysPast);
  62. final int startDay = start.dayOfYear().get() + 1;
  63. for (Issue issue : issues)
  64. {
  65. final LocalDate created = new LocalDate(issue.getCreated());
  66. final int dayOfYear = created.dayOfYear().get();
  67. int arrayIndex = dayOfYear - startDay;
  68. //this means going into the past went across the year barrier.
  69. if(arrayIndex < 0)
  70. {
  71. arrayIndex = start.dayOfYear().getMaximumValue() + arrayIndex;
  72. }
  73. if (arrayIndex >= 0 && arrayIndex < realDaysPast)
  74. {
  75. createdPerDay[arrayIndex]++;
  76. }
  77. }
  78. return createdPerDay;
  79. }
  80. private Query getQuery(final Collector collector)
  81. {
  82. return JqlQueryBuilder.newBuilder().where().project(collector.getProjectId()).and().
  83. labels(COLLECTOR_LABEL_PREFIX + collector.getId()).
  84. endWhere().orderBy().createdDate(SortOrder.DESC).buildQuery();
  85. }
  86. }