codependent
codependent

Reputation: 24482

How to get list of issues from a release (fix version) when capturing VersionReleaseEvent

I'm implementing a Jira Server plugin with a listener that captures every VersionReleaseEvent:

@EventListener
public void onVersionReleaseEvent(VersionReleaseEvent versionReleaseEvent) {
    log.info("#### onVersionReleaseEvent {}", versionReleaseEvent);
}

I need to know which issues are included in that versionRelease, but the VersionReleaseEvent class doesn't include them. How can I access that information?

enter image description here

Upvotes: 2

Views: 153

Answers (1)

codependent
codependent

Reputation: 24482

I finally managed to work this out, using JQL and SearchService:

@Component
public class ReleaseVersionListener implements InitializingBean, DisposableBean {
    private static final Logger log = LoggerFactory.getLogger(ReleaseVersionListener.class);

    @JiraImport
    private final EventPublisher eventPublisher;

    @JiraImport
    private SearchService searchService;

    @JiraImport
    private JiraAuthenticationContext jiraAuthenticationContext;

    @ComponentImport
    private final PluginSettingsFactory pluginSettingsFactory;

    private final RestTemplate restTemplate = new RestTemplate();

    @Autowired
    public ReleaseVersionListener(EventPublisher eventPublisher, JiraAuthenticationContext jiraAuthenticationContext, PluginSettingsFactory pluginSettingsFactory,
                                  SearchService searchService) {
        this.eventPublisher = eventPublisher;
        this.pluginSettingsFactory = pluginSettingsFactory;
        this.searchService = searchService;
        this.jiraAuthenticationContext = jiraAuthenticationContext;
    }

    @EventListener
    public void onVersionReleaseEvent(VersionReleaseEvent versionReleaseEvent) {
        log.info("#### onVersionReleaseEvent {}", versionReleaseEvent);
        String projectId = versionReleaseEvent.getVersion().getProject().getName();
        ApplicationUser loggedInUser = jiraAuthenticationContext.getLoggedInUser();
        JqlClauseBuilder jqlClauseBuilder = JqlQueryBuilder.newClauseBuilder();
        Query query = jqlClauseBuilder.fixVersion().in().functionReleasedVersions(projectId).buildQuery();
        PagerFilter<?> pagerFilter = PagerFilter.getUnlimitedFilter();
        try {
            SearchResults results = searchService.search(loggedInUser, query, pagerFilter);
            List<Issue> issues = results.getIssues();

            List<Issue> releasedIssues = issues.stream()
                    .filter(i -> i.getFixVersions().iterator().next().getName().equalsIgnoreCase(versionReleaseEvent.getVersion().getName()))
                    .collect(Collectors.toList());
        ...
    }

Upvotes: 2

Related Questions