package org.jvnet.hudson.plugins.jira.issueversioning.plugin.hudson; import javax.xml.bind.JAXBException; import java.io.IOException; import java.io.PrintStream; import java.net.MalformedURLException; import hudson.Extension; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.BuildListener; import hudson.plugins.jira.JiraCarryOverAction; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.BuildStepMonitor; import hudson.tasks.Publisher; import hudson.tasks.Recorder; import net.sf.json.JSONObject; import org.jvnet.hudson.plugins.jira.issueversioning.plugin.hudson.rest.IssuesToJiraPoster; import org.jvnet.hudson.plugins.jira.issueversioning.plugin.hudson.utils.ProjectUtils; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; /** * Jira Issue Indexer {@link Publisher} * * @author <a href="mailto:from.hudson@nisgits.net">Stig Kleppe-J;odash&rgensen</a> */ // FIXME should this be a recorder? Are there something else that is run post build with a better name? @SuppressWarnings("unchecked") public class JiraIssueIndexerRecorder extends Recorder { private final boolean postIssues; /** * Constructor */ @DataBoundConstructor public JiraIssueIndexerRecorder(boolean postIssues) { this.postIssues = postIssues; } public boolean isPostIssues() { return postIssues; } /** * {@inheritDoc} */ @Override public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { final PrintStream logger = listener.getLogger(); JiraCarryOverAction a = build.getPreviousBuild().getAction(JiraCarryOverAction.class); return true; } private void postBuild(AbstractBuild<?, ?> build, PrintStream logger) { final JiraProjectKeyJobProperty jobProperty = ProjectUtils.getJiraProjectKeyPropertyOfProject(build.getProject()); final String jiraUrl = jobProperty.getJiraBaseUrl(); logger.println("Posting issues to Jira..."); try { final IssuesToJiraPoster poster = new IssuesToJiraPoster(build, jiraUrl, logger); poster.post(); } catch (MalformedURLException e) { logger.println("ERROR: problems posting to " + jiraUrl + ". Is it correct?"); } catch (JAXBException e) { logger.println("ERROR: problems with marshalling: " + e); } catch (IOException e) { logger.println("ERROR: problems posting to " + jiraUrl + ". Is it correct?"); } } /** * {@inheritDoc} */ public BuildStepMonitor getRequiredMonitorService() { return BuildStepMonitor.NONE; } /** * {@link Descriptor} for {@link JiraIssueIndexerRecorder} * * @author <a href="mailto:from.hudson@nisgits.net">Stig Kleppe-J;odash&rgensen</a> */ @Extension public static final class JiraIssueIndexerRecorderDescriptor extends BuildStepDescriptor<Publisher> { /** * {@inheritDoc} */ @Override public String getDisplayName() { return Messages.JiraIssueIndexer_DisplayName(); } /** * {@inheritDoc} */ @Override public String getHelpFile() { return "/plugin/hudson-jiraapi-plugin/help-indexer.html"; } @Override public Publisher newInstance(StaplerRequest req, JSONObject formData) throws FormException { return req.bindJSON(JiraIssueIndexerRecorder.class,formData); } /** * {@inheritDoc} */ @Override public boolean isApplicable(Class<? extends AbstractProject> jobType) { return AbstractProject.class.isAssignableFrom(jobType); } } }