package hudson.plugins.rubyMetrics.railsStats;
import hudson.Extension;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.plugins.rake.Rake;
import hudson.plugins.rake.RubyInstallation;
import hudson.plugins.rubyMetrics.AbstractRailsTaskPublisher;
import hudson.plugins.rubyMetrics.railsStats.model.RailsStatsResults;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Publisher;
import org.kohsuke.stapler.DataBoundConstructor;
import java.io.ByteArrayOutputStream;
/**
* Rails stats {@link Publisher}
*
* @author David Calavera
*
*/
@SuppressWarnings("unchecked")
public class RailsStatsPublisher extends AbstractRailsTaskPublisher {
@DataBoundConstructor
public RailsStatsPublisher(String rakeInstallation, String rakeWorkingDir) {
super(rakeInstallation, rakeWorkingDir, "stats");
}
protected void buildAction(ByteArrayOutputStream out, AbstractBuild<?, ?> build) {
final RailsStatsParser parser = new RailsStatsParser();
RailsStatsResults results = parser.parse(out);
RailsStatsBuildAction action = new RailsStatsBuildAction(build, results);
build.getActions().add(action);
}
@Override
public Action getProjectAction(AbstractProject<?,?> project) {
return new RailsStatsProjectAction(project);
}
@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
protected DescriptorImpl() {
super(RailsStatsPublisher.class);
}
@Override
public String getHelpFile() {
return "/plugin/rubyMetrics/railsStatsHelp.html";
}
@Override
public String getDisplayName() {
return "Publish Rails stats report";
}
public RubyInstallation[] getRakeInstallations() {
return Rake.DESCRIPTOR.getInstallations();
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
}
@Override
public BuildStepDescriptor<Publisher> getDescriptor() {
return DESCRIPTOR;
}
}