package hudson.plugins.tfs; import hudson.Extension; import hudson.FilePath; import hudson.Launcher; import hudson.model.AbstractProject; import hudson.model.Descriptor; import hudson.model.Run; import hudson.model.TaskListener; import hudson.plugins.tfs.util.TeamStatus; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.Builder; import jenkins.tasks.SimpleBuildStep; import org.kohsuke.stapler.DataBoundConstructor; import javax.annotation.Nonnull; import java.io.IOException; /** * A _Build Step_ that reports the status of an associated build as "Pending" to TFS/Team Services. */ public class TeamPendingStatusBuildStep extends Builder implements SimpleBuildStep { @DataBoundConstructor public TeamPendingStatusBuildStep() { } @Override public void perform( @Nonnull final Run<?, ?> run, @Nonnull final FilePath workspace, @Nonnull final Launcher launcher, @Nonnull final TaskListener listener ) throws InterruptedException, IOException { if (!TeamGlobalStatusAction.isApplicable(run)){ perform(run, listener); } } public void perform(final @Nonnull Run<?, ?> run, final @Nonnull TaskListener listener) { try { TeamStatus.createFromRun(run, listener, getDisplayName()); } catch (final IllegalArgumentException e) { listener.error(e.getMessage()); } catch (final Exception e) { e.printStackTrace(listener.error("Error while trying to update pending status in TFS/Team Services")); } } String getDisplayName() { final Descriptor<Builder> descriptor = getDescriptor(); return descriptor.getDisplayName(); } @Extension public static class DescriptorImpl extends BuildStepDescriptor<Builder> { @Override public boolean isApplicable(Class<? extends AbstractProject> jobType) { return true; } @Override public String getDisplayName() { return "Set build pending status in TFS/Team Services"; } } }