package hudson.plugins.testabilityexplorer.report; import hudson.maven.AggregatableAction; import hudson.maven.MavenAggregatedReport; import hudson.maven.MavenBuild; import hudson.maven.MavenModule; import hudson.maven.MavenModuleSet; import hudson.maven.MavenModuleSetBuild; import hudson.model.Action; import hudson.plugins.testabilityexplorer.publisher.MavenPublisher; import hudson.plugins.testabilityexplorer.report.costs.Statistic; import hudson.plugins.testabilityexplorer.report.health.ReportBuilder; import java.util.Collection; import java.util.List; import java.util.Map; /** * A {@link MavenAggregatedReport} that will update an individual build report every time a maven * module is finished. * * @author reik.schatz */ public class BuildAggregatedReport extends AbstractBuildReport<MavenModuleSetBuild> implements MavenAggregatedReport { public BuildAggregatedReport(MavenModuleSetBuild build, Collection<Statistic> results, ReportBuilder reportBuilder, CostDetailBuilder detailBuilder) { super(results, reportBuilder, detailBuilder); setBuild(build); } @Override void addResults(Collection<Statistic> statistics) { if (!(null == getBuild() || null == getBuild().getProject() || null == getBuild().getProject().getReporters())) { MavenPublisher publisher = getBuild().getProject().getReporters().get( MavenPublisher.class); if (null != publisher && publisher.getAggregateFiles()) { mergeStatistics(statistics, publisher.getWeightFactor()); return; } } super.addResults(statistics); } /** {@inheritDoc} */ public synchronized void update(Map<MavenModule, List<MavenBuild>> moduleBuilds, MavenBuild newBuild) { BuildIndividualReport report = newBuild.getAction(BuildIndividualReport.class); if (report != null) { Collection<Statistic> moduleResults = report.getResults(); addResults(moduleResults); } } /** {@inheritDoc} */ public Class<? extends AggregatableAction> getIndividualActionType() { return BuildIndividualReport.class; } /** {@inheritDoc} */ public Action getProjectAction(MavenModuleSet moduleSet) { for (MavenModuleSetBuild build : moduleSet.getBuilds()) { if (build.getAction(BuildAggregatedReport.class) != null) { return new ProjectAggregatedReport(moduleSet); } } return null; } }