package hudson.plugins.jira.pipeline;
import java.util.Collection;
import java.util.Set;
import hudson.model.Descriptor;
import jenkins.model.Jenkins;
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 org.kohsuke.stapler.DataBoundSetter;
import com.google.inject.Inject;
import hudson.Extension;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.jira.JiraSite;
import hudson.plugins.jira.Messages;
import hudson.plugins.jira.selector.AbstractIssueSelector;
/**
* Step that run selected issue selector.
*
* @see hudson.plugins.jira.selector.AbstractIssueSelector
*/
public class IssueSelectorStep extends AbstractStepImpl {
private AbstractIssueSelector issueSelector;
@DataBoundConstructor
public IssueSelectorStep() {
}
@DataBoundSetter
public void setIssueSelector(AbstractIssueSelector issueSelector) {
this.issueSelector = issueSelector;
}
public AbstractIssueSelector getIssueSelector() {
return issueSelector;
}
@Extension(optional = true)
public static final class DescriptorImpl extends AbstractStepDescriptorImpl {
public DescriptorImpl() {
super(IssueSelectorStepExecution.class);
}
public Collection<? extends Descriptor<?>> getApplicableDescriptors() {
return Jenkins.getInstance().<AbstractIssueSelector, Descriptor<AbstractIssueSelector>>getDescriptorList(AbstractIssueSelector.class);
}
@Override
public String getFunctionName() {
return "jiraIssueSelector";
}
@Override
public String getDisplayName() {
return Messages.IssueSelectorStep_Descriptor_DisplayName();
}
}
public static class IssueSelectorStepExecution extends AbstractSynchronousNonBlockingStepExecution<Set<String>> {
private static final long serialVersionUID = 1L;
@Inject
private transient IssueSelectorStep step;
@StepContextParameter
private transient TaskListener listener;
@StepContextParameter
private transient Run run;
@Override
protected Set<String> run() throws Exception {
JiraSite site = JiraSite.get(run.getParent());
Set<String> ids = step.getIssueSelector().findIssueIds(run, site, listener);
return ids;
}
}
}