package hudson.plugins.jira.selector;
import static hudson.Util.fixNull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import hudson.Extension;
import hudson.model.Descriptor;
import hudson.plugins.jira.Messages;
import org.kohsuke.stapler.DataBoundConstructor;
import com.atlassian.jira.rest.client.api.domain.Issue;
import com.google.common.collect.Sets;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.jira.JiraSession;
import hudson.plugins.jira.JiraSite;
public class JqlIssueSelector extends AbstractIssueSelector {
private String jql;
@DataBoundConstructor
public JqlIssueSelector(String jql) {
super();
this.jql = jql;
}
public void setJql(String jql){
this.jql = jql;
}
public String getJql() {
return jql;
}
@Override
public Set<String> findIssueIds(Run<?, ?> run, JiraSite site, TaskListener listener) {
try {
JiraSession session = site.getSession();
if (session == null)
throw new IllegalStateException("Remote access for JIRA isn't configured in Jenkins");
List<Issue> issues = session.getIssuesFromJqlSearch(jql);
List<String> issueKeys = new ArrayList<String>();
for (Issue issue : fixNull(issues)) {
issueKeys.add(issue.getKey());
}
// deduplication
return Sets.newHashSet(issueKeys);
} catch (IOException e) {
throw new IllegalStateException("Can't open rest session to Jira site " + site, e);
}
}
@Extension
public static final class DescriptorImpl extends Descriptor<AbstractIssueSelector> {
@Override
public String getDisplayName() {
return Messages.IssueSelector_JqlIssueSelector_DisplayName();
}
}
}