package hudson.plugins.testabilityexplorer.report.health;
import hudson.model.HealthReport;
import hudson.plugins.testabilityexplorer.report.charts.ChartBuilder;
import hudson.plugins.testabilityexplorer.report.costs.CostSummary;
import hudson.plugins.testabilityexplorer.report.costs.Statistic;
import java.util.Collection;
import org.jvnet.localizer.Localizable;
/**
* A {@link ReportBuilder} that will compute health based on the specified
* collection of statistics.
*
* @author reik.schatz
*/
public class TestabilityReportBuilder extends DrawingReportBuilder
{
private final HealthCalculator m_healthCalculator;
public TestabilityReportBuilder(ChartBuilder chartBuilder, HealthCalculator healthCalculator)
{
super(chartBuilder);
m_healthCalculator = healthCalculator;
}
public HealthReport computeHealth(Collection<Statistic> results)
{
int score;
Localizable description;
int allClasses = 0;
int excellentClasses = 0;
for (Statistic result : results)
{
allClasses += getNumberOfClasses(result.getCostSummary());
excellentClasses += getNumberOfExcellentClasses(result.getCostSummary());
}
HealthCalculator healthCalculator = m_healthCalculator;
if (m_healthCalculator == null)
{
healthCalculator = new TemporaryHealthCalculator();
}
score = healthCalculator.calculate(allClasses, excellentClasses, 0, 0);
if (score == 100)
{
description = Messages._TestabilityReportBuilder_GreatHealth();
}
else if (score > 80)
{
description = Messages._TestabilityReportBuilder_GoodHealth();
}
else if (score > 0)
{
description = Messages._TestabilityReportBuilder_BadHealth();
}
else
{
description = Messages._TestabilityReportBuilder_NoHealth();
}
return new HealthReport(score, description);
}
private int getNumberOfClasses(CostSummary costSummary)
{
return costSummary.getNumberOfClasses();
}
private int getNumberOfExcellentClasses(CostSummary costSummary)
{
return costSummary.getExcellent();
}
}