PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/jira/collector/plugin/web/admin/ViewCollector.java

https://bitbucket.org/knecht_andreas/jira-issue-collector-plugin/
Java | 205 lines | 174 code | 26 blank | 5 comment | 5 complexity | 42c33b6489be91fc32bba88dbbc6f146 MD5 | raw file
  1. package com.atlassian.jira.collector.plugin.web.admin;
  2. import com.atlassian.gadgets.GadgetId;
  3. import com.atlassian.gadgets.GadgetRequestContext;
  4. import com.atlassian.gadgets.GadgetRequestContextFactory;
  5. import com.atlassian.gadgets.GadgetState;
  6. import com.atlassian.gadgets.view.GadgetViewFactory;
  7. import com.atlassian.gadgets.view.ModuleId;
  8. import com.atlassian.gadgets.view.View;
  9. import com.atlassian.gadgets.view.ViewType;
  10. import com.atlassian.jira.bc.ServiceOutcome;
  11. import com.atlassian.jira.bc.project.ProjectService;
  12. import com.atlassian.jira.config.ConstantsManager;
  13. import com.atlassian.jira.issue.issuetype.IssueType;
  14. import com.atlassian.jira.plugin.profile.UserFormatManager;
  15. import com.atlassian.jira.project.Project;
  16. import com.atlassian.jira.util.collect.MapBuilder;
  17. import com.atlassian.jira.util.velocity.VelocityRequestContextFactory;
  18. import com.atlassian.jira.web.action.JiraWebActionSupport;
  19. import com.atlassian.jira.collector.plugin.components.ScriptletRenderer;
  20. import com.atlassian.jira.collector.plugin.components.Trigger;
  21. import com.atlassian.jira.collector.plugin.components.Collector;
  22. import com.atlassian.jira.collector.plugin.components.CollectorActivityHelper;
  23. import com.atlassian.jira.collector.plugin.components.CollectorService;
  24. import com.atlassian.sal.api.websudo.WebSudoRequired;
  25. import org.joda.time.DateTime;
  26. import org.joda.time.format.DateTimeFormat;
  27. import org.joda.time.format.DateTimeFormatter;
  28. import java.io.ByteArrayOutputStream;
  29. import java.io.IOException;
  30. import java.io.OutputStreamWriter;
  31. import java.io.Writer;
  32. import java.net.URI;
  33. import java.util.ArrayList;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. /**
  38. * Lists all the collectors currently defined
  39. *
  40. * @since v1.0
  41. */
  42. @WebSudoRequired
  43. public class ViewCollector extends JiraWebActionSupport
  44. {
  45. private static final int DAYS_PAST = 30;
  46. public static final String GADGET_URL = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:filter-results-gadget/gadgets/filter-results-gadget.xml";
  47. private static final String PREF_FILTER_ID = "filterId";
  48. private static final String PREF_IS_POPUP = "isPopup";
  49. private static final String PREF_IS_CONFIGURED = "isConfigured";
  50. private static final String JQL_PREFIX = "jql-";
  51. private static final String PREF_NUM = "num";
  52. private static final String PREF_COL_NAMES = "columnNames";
  53. private static final String PREF_REFRESH = "refresh";
  54. private final CollectorService collectorService;
  55. private final ProjectService projectService;
  56. private final ConstantsManager constantsManager;
  57. private final UserFormatManager userFormatManager;
  58. private final CollectorActivityHelper collectorActivityHelper;
  59. private final GadgetViewFactory gadgetViewFactory;
  60. private final GadgetRequestContextFactory gadgetRequestContextFactory;
  61. private final ScriptletRenderer scriptletRenderer;
  62. private String collectorId;
  63. private Map<String, List<Integer>> collectorActivty = new HashMap<String, List<Integer>>();
  64. private Collector collector;
  65. private String canonicalBaseUrl;
  66. public ViewCollector(final CollectorService collectorService, final ProjectService projectService,
  67. final ConstantsManager constantsManager, final UserFormatManager userFormatManager,
  68. final CollectorActivityHelper collectorActivityHelper, final GadgetViewFactory gadgetViewFactory,
  69. final GadgetRequestContextFactory gadgetRequestContextFactory, final ScriptletRenderer scriptletRenderer,
  70. final VelocityRequestContextFactory velocityRequestContextFactory)
  71. {
  72. this.collectorService = collectorService;
  73. this.projectService = projectService;
  74. this.constantsManager = constantsManager;
  75. this.userFormatManager = userFormatManager;
  76. this.collectorActivityHelper = collectorActivityHelper;
  77. this.gadgetViewFactory = gadgetViewFactory;
  78. this.gadgetRequestContextFactory = gadgetRequestContextFactory;
  79. this.scriptletRenderer = scriptletRenderer;
  80. this.canonicalBaseUrl = velocityRequestContextFactory.getJiraVelocityRequestContext().getCanonicalBaseUrl();
  81. }
  82. @Override
  83. public String doDefault() throws Exception
  84. {
  85. final ServiceOutcome<Collector> result = collectorService.getCollector(collectorId);
  86. if (!result.isValid() || result.getReturnedValue() == null)
  87. {
  88. return ERROR;
  89. }
  90. collector = result.getReturnedValue();
  91. return SUCCESS;
  92. }
  93. public Collector getCollector()
  94. {
  95. return collector;
  96. }
  97. public Project getProject(Long projectId)
  98. {
  99. return projectService.getProjectById(getLoggedInUser(), projectId).getProject();
  100. }
  101. public IssueType getIssueType(Long issueTypeId)
  102. {
  103. return constantsManager.getIssueTypeObject(issueTypeId.toString());
  104. }
  105. public String getFormattedUser(String username)
  106. {
  107. return userFormatManager.getUserFormat("profileLinkActionHeader").format(username, "collector-reporter");
  108. }
  109. public List<String> getActiviyDates(final Collector collector)
  110. {
  111. final DateTime dateTime = new DateTime();
  112. final List<String> ret = new ArrayList<String>();
  113. final DateTimeFormatter format = DateTimeFormat.forPattern("d MMM");
  114. for (int i = DAYS_PAST - 1; i >= 0; i--)
  115. {
  116. final DateTime pastDateTime = dateTime.dayOfYear().addToCopy(-i);
  117. ret.add(format.print(pastDateTime));
  118. }
  119. return ret;
  120. }
  121. public List<Integer> getActivityForCollector(final Collector collector)
  122. {
  123. if (!collectorActivty.containsKey(collector.getId()))
  124. {
  125. collectorActivty.put(collector.getId(), collectorActivityHelper.getIssuesCreatedPerDay(getLoggedInUser(), collector, DAYS_PAST));
  126. }
  127. return collectorActivty.get(collector.getId());
  128. }
  129. public String getActivityUrl()
  130. {
  131. return collectorActivityHelper.getIssueNavigatorUrl(getLoggedInUser(), collector);
  132. }
  133. public String getCollectorId()
  134. {
  135. return collectorId;
  136. }
  137. public void setCollectorId(final String collectorId)
  138. {
  139. this.collectorId = collectorId;
  140. }
  141. public String getScriptSource()
  142. {
  143. return scriptletRenderer.render(collector);
  144. }
  145. public boolean isCustomTrigger()
  146. {
  147. return collector.getTrigger().getPosition().equals(Trigger.Position.CUSTOM);
  148. }
  149. public String getFilterGadgetHtml()
  150. {
  151. final MapBuilder<String, String> prefsBuilder = MapBuilder.newBuilder();
  152. prefsBuilder.add(PREF_IS_POPUP, Boolean.FALSE.toString());
  153. prefsBuilder.add(PREF_IS_CONFIGURED, Boolean.TRUE.toString());
  154. prefsBuilder.add(PREF_NUM, "7");
  155. prefsBuilder.add(PREF_COL_NAMES, "--Default--");
  156. prefsBuilder.add(PREF_REFRESH, "false");
  157. prefsBuilder.add(PREF_FILTER_ID, JQL_PREFIX + collectorActivityHelper.getJql(getLoggedInUser(), collector));
  158. final Map<String, String> prefs = prefsBuilder.toMutableMap();
  159. final GadgetState gadget = GadgetState.gadget(GadgetId.valueOf("1")).specUri(URI.create(GADGET_URL)).userPrefs(prefs).build();
  160. try
  161. {
  162. final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  163. final Writer gadgetWriter = new OutputStreamWriter(baos);
  164. final GadgetRequestContext requestContext = gadgetRequestContextFactory.get(request);
  165. final View readOnlyDefaultView = new View.Builder().viewType(ViewType.DEFAULT).addViewParam("enableReload", "false").writable(false).build();
  166. gadgetViewFactory.createGadgetView(gadget, ModuleId.valueOf(1L), readOnlyDefaultView, requestContext).writeTo(gadgetWriter);
  167. gadgetWriter.flush();
  168. return baos.toString();
  169. }
  170. catch (IOException e)
  171. {
  172. log.error("Error rendering gadget '" + GADGET_URL + "'", e);
  173. }
  174. return "";
  175. }
  176. public String getCanonicalBaseUrl() {
  177. return canonicalBaseUrl;
  178. }
  179. }