package hudson.plugins.jira.pipeline;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
import org.jenkinsci.plugins.workflow.steps.AbstractStepDescriptorImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractStepImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution;
import org.jenkinsci.plugins.workflow.steps.StepContextParameter;
import org.kohsuke.stapler.DataBoundConstructor;
import com.atlassian.jira.rest.client.api.domain.Issue;
import com.google.inject.Inject;
import hudson.AbortException;
import hudson.Extension;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.jira.JiraSession;
import hudson.plugins.jira.JiraSite;
import hudson.plugins.jira.Messages;
/**
* Simple search issues step
*
* @author jan zajic
*/
public class SearchIssuesStep extends AbstractStepImpl {
public final String jql;
@DataBoundConstructor
public SearchIssuesStep(@Nonnull String jql) {
this.jql = jql;
}
public String getJql() {
return jql;
}
@Extension(optional = true)
public static final class DescriptorImpl extends AbstractStepDescriptorImpl {
public DescriptorImpl() {
super(SearchStepExecution.class);
}
@Override
public String getFunctionName() {
return "jiraSearch";
}
@Override
public String getDisplayName() {
return Messages.SearchIssuesStep_Descriptor_DisplayName();
}
}
/**
* @author jan zajic
*/
public static class SearchStepExecution extends AbstractSynchronousNonBlockingStepExecution<List<String>> {
private static final long serialVersionUID = 1L;
@Inject
private transient SearchIssuesStep step;
@StepContextParameter
private transient TaskListener listener;
@StepContextParameter
private transient Run run;
@Override
protected List<String> run() throws Exception {
JiraSite site = JiraSite.get(run.getParent());
JiraSession session = null;
try {
session = site.getSession();
} catch (IOException e) {
listener.getLogger().println(Messages.FailedToConnect());
e.printStackTrace(listener.getLogger());
throw new AbortException("Cannot open jira session - error occured");
}
List<String> resultList = new ArrayList<String>();
List<Issue> issuesFromJqlSearch = session.getIssuesFromJqlSearch(step.jql);
for (Issue issue : issuesFromJqlSearch)
resultList.add(issue.getKey());
return resultList;
}
}
}