CoberturaBuildAction( AbstractBuild<?, ?> owner, CoverageResult r, CoverageTarget healthyTarget, CoverageTarget unhealthyTarget, boolean onlyStable, boolean failUnhealthy, boolean failUnstable, boolean autoUpdateHealth, boolean autoUpdateStability) { this.owner = owner; this.report = new WeakReference<CoverageResult>(r); this.healthyTarget = healthyTarget; this.unhealthyTarget = unhealthyTarget; this.onlyStable = onlyStable; this.failUnhealthy = failUnhealthy; this.failUnstable = failUnstable; this.autoUpdateHealth = autoUpdateHealth; this.autoUpdateStability = autoUpdateStability; r.setOwner(owner); if (result == null) { result = new EnumMap<CoverageMetric, Ratio>(CoverageMetric.class); result.putAll(r.getResults()); } getBuildHealth(); // populate the health field so we don't have to parse everything all the time }
/** {@inheritDoc} */ @SuppressWarnings("unchecked") public HealthReport getBuildHealth() { if (health != null) { return health; } // try to get targets from root project (for maven modules targets are null) DescribableList rootpublishers = owner.getProject().getRootProject().getPublishersList(); if (rootpublishers != null) { CoberturaPublisher publisher = (CoberturaPublisher) rootpublishers.get(CoberturaPublisher.class); if (publisher != null) { healthyTarget = publisher.getHealthyTarget(); unhealthyTarget = publisher.getUnhealthyTarget(); } } if (healthyTarget == null || unhealthyTarget == null) { return null; } if (result == null) { CoverageResult projectCoverage = getResult(); result = new EnumMap<CoverageMetric, Ratio>(CoverageMetric.class); result.putAll(projectCoverage.getResults()); } Map<CoverageMetric, Integer> scores = healthyTarget.getRangeScores(unhealthyTarget, result); int minValue = 100; CoverageMetric minKey = null; for (Map.Entry<CoverageMetric, Integer> e : scores.entrySet()) { if (e.getValue() < minValue) { minKey = e.getKey(); minValue = e.getValue(); } } if (minKey == null) { if (result == null || result.size() == 0) { return null; } else { for (Map.Entry<CoverageMetric, Integer> e : scores.entrySet()) { minKey = e.getKey(); } if (minKey != null) { Localizable localizedDescription = Messages._CoberturaBuildAction_description( result.get(minKey).getPercentage(), result.get(minKey).toString(), minKey.getName()); health = new HealthReport(minValue, localizedDescription); return health; } return null; } } else { Localizable localizedDescription = Messages._CoberturaBuildAction_description( result.get(minKey).getPercentage(), result.get(minKey).toString(), minKey.getName()); health = new HealthReport(minValue, localizedDescription); return health; } }