package hudson.plugins.jira; import hudson.AbortException; import hudson.Extension; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.BuildListener; import hudson.plugins.jira.selector.AbstractIssueSelector; import hudson.plugins.jira.selector.DefaultIssueSelector; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.Builder; import java.io.IOException; import org.kohsuke.stapler.DataBoundConstructor; import java.util.Set; import org.apache.commons.lang.StringUtils; /** * Adds JIRA related environment variables to the build */ public class JiraEnvironmentVariableBuilder extends Builder { private AbstractIssueSelector issueSelector; @DataBoundConstructor public JiraEnvironmentVariableBuilder(AbstractIssueSelector issueSelector) { this.issueSelector = issueSelector; } public AbstractIssueSelector getIssueSelector() { AbstractIssueSelector uis = this.issueSelector; if (uis == null) uis = new DefaultIssueSelector(); return (this.issueSelector = uis); } JiraSite getSiteForProject(AbstractProject<?, ?> project) { return JiraSite.get(project); } @Override public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { JiraSite site = getSiteForProject(build.getProject()); if (site == null) { throw new AbortException(Messages.JiraEnvironmentVariableBuilder_NoJiraSite()); } Set<String> ids = getIssueSelector().findIssueIds(build, site, listener); String idList = StringUtils.join(ids, ","); listener.getLogger().println(Messages.JiraEnvironmentVariableBuilder_Updating(JiraEnvironmentContributingAction.ISSUES_VARIABLE_NAME, idList)); build.addAction(new JiraEnvironmentContributingAction(idList, site.getName())); return true; } /** * Descriptor for {@link JiraEnvironmentVariableBuilder}. */ @Extension public static final class DescriptorImpl extends BuildStepDescriptor<Builder> { @Override public boolean isApplicable(Class<? extends AbstractProject> klass) { return true; } @Override public String getDisplayName() { return Messages.JiraEnvironmentVariableBuilder_DisplayName(); } } }