PageRenderTime 47ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/groovy/com/ceilfors/jenkins/plugins/jiratrigger/JiraTriggerExecutor.groovy

https://gitlab.com/CORP-RESELLER/jira-trigger-plugin
Groovy | 102 lines | 81 code | 15 blank | 6 comment | 5 complexity | 216507d5ea6f35613dddc92e92c36421 MD5 | raw file
  1. package com.ceilfors.jenkins.plugins.jiratrigger
  2. import com.atlassian.jira.rest.client.api.domain.ChangelogGroup
  3. import com.atlassian.jira.rest.client.api.domain.Comment
  4. import com.atlassian.jira.rest.client.api.domain.Issue
  5. import com.ceilfors.jenkins.plugins.jiratrigger.jira.JiraClient
  6. import com.ceilfors.jenkins.plugins.jiratrigger.webhook.JiraWebhookListener
  7. import com.ceilfors.jenkins.plugins.jiratrigger.webhook.WebhookChangelogEvent
  8. import com.ceilfors.jenkins.plugins.jiratrigger.webhook.WebhookCommentEvent
  9. import com.google.inject.Singleton
  10. import groovy.util.logging.Log
  11. import hudson.model.AbstractProject
  12. import jenkins.model.Jenkins
  13. import javax.inject.Inject
  14. import java.util.concurrent.CopyOnWriteArrayList
  15. /**
  16. * @author ceilfors
  17. */
  18. @Singleton
  19. @Log
  20. class JiraTriggerExecutor implements JiraWebhookListener {
  21. private Jenkins jenkins
  22. private JiraClient jira
  23. private List<JiraTriggerListener> jiraTriggerListeners = new CopyOnWriteArrayList<>()
  24. private int quietPeriod = 3
  25. @Inject
  26. public JiraTriggerExecutor(Jenkins jenkins, JiraClient jira) {
  27. this.jenkins = jenkins
  28. this.jira = jira
  29. }
  30. @Inject
  31. private void setJiraTriggerListeners(Set<JiraTriggerListener> jiraTriggerListeners) {
  32. this.jiraTriggerListeners.addAll(jiraTriggerListeners)
  33. }
  34. void addJiraTriggerListener(JiraTriggerListener jiraTriggerListener) {
  35. jiraTriggerListeners << jiraTriggerListener
  36. }
  37. void setQuietPeriod(int quietPeriod) {
  38. this.quietPeriod = quietPeriod
  39. }
  40. @Override
  41. void commentCreated(WebhookCommentEvent commentEvent) {
  42. List<AbstractProject> scheduledProjects = scheduleBuilds(commentEvent.issue, commentEvent.comment)
  43. fireListeners(scheduledProjects, commentEvent.issue)
  44. }
  45. @Override
  46. void changelogCreated(WebhookChangelogEvent changelogEvent) {
  47. List<AbstractProject> scheduledProjects = scheduleBuilds(changelogEvent.issue, changelogEvent.changelog)
  48. fireListeners(scheduledProjects, changelogEvent.issue)
  49. }
  50. private void fireListeners(List<AbstractProject> scheduledProjects, Issue issue) {
  51. if (scheduledProjects) {
  52. jiraTriggerListeners*.buildScheduled(issue, scheduledProjects)
  53. } else {
  54. jiraTriggerListeners*.buildNotScheduled(issue)
  55. }
  56. }
  57. List<AbstractProject> scheduleBuilds(Issue issue, Comment comment) {
  58. return scheduleBuildsInternal(JiraCommentTrigger, issue, comment)
  59. }
  60. List<AbstractProject> scheduleBuilds(Issue issue, ChangelogGroup changelogGroup) {
  61. return scheduleBuildsInternal(JiraChangelogTrigger, issue, changelogGroup)
  62. }
  63. /**
  64. * @return the scheduled projects
  65. */
  66. private List<AbstractProject> scheduleBuildsInternal(
  67. Class<? extends JiraTrigger> triggerClass, Issue issue, Object jiraObject) {
  68. List<AbstractProject> scheduledProjects = []
  69. def triggers = getTriggers(triggerClass)
  70. for (trigger in triggers) {
  71. trigger.setQuietPeriod(quietPeriod)
  72. boolean scheduled = trigger.run(issue, jiraObject)
  73. if (scheduled) {
  74. scheduledProjects << trigger.job
  75. }
  76. }
  77. return scheduledProjects
  78. }
  79. private List<? extends JiraTrigger> getTriggers(Class<? extends JiraTrigger> triggerClass) {
  80. def descriptor = jenkins.getDescriptor(triggerClass) as JiraTrigger.JiraTriggerDescriptor
  81. List<? extends JiraTrigger> triggers = descriptor.allTriggers()
  82. if (!triggers) {
  83. log.fine("Couldn't find any projects that have ${triggerClass.simpleName} configured")
  84. }
  85. return triggers
  86. }
  87. }