package hudson.plugins.cobertura.targets; import hudson.plugins.cobertura.Ratio; import java.io.Serializable; import java.util.EnumMap; import java.util.EnumSet; import java.util.Map; import java.util.Set; /** * Holds the target coverage for a specific condition; * * @author Stephen Connolly * @since 1.1 */ public class CoverageTarget implements Serializable { private static final long serialVersionUID = -1230271515322670492L; private Map<CoverageMetric, Integer> targets = new EnumMap<CoverageMetric, Integer>(CoverageMetric.class); /** * Constructs a new CoverageTarget. */ public CoverageTarget() { } public CoverageTarget(Map<CoverageMetric, Integer> coverage) { this.targets.putAll(coverage); } /** * Getter for property 'alwaysMet'. * * @return Value for property 'alwaysMet'. */ public boolean isAlwaysMet() { for (Integer target : targets.values()) { if (target != null && target > 0) { return false; } } return true; } /** * Getter for property 'empty'. * * @return Value for property 'empty'. */ public boolean isEmpty() { for (Integer target : targets.values()) { if (target != null) { return false; } } return true; } public Set<CoverageMetric> getFailingMetrics(CoverageResult coverage) { Set<CoverageMetric> result = EnumSet.noneOf(CoverageMetric.class); for (Map.Entry<CoverageMetric, Integer> target : this.targets.entrySet()) { Ratio observed = coverage.getCoverage(target.getKey()); if (observed != null && observed.getPercentage() < target.getValue()) { result.add(target.getKey()); } } return result; } public Map<CoverageMetric, Integer> getRangeScores(CoverageTarget min, CoverageResult coverage) { return getRangeScores(min, coverage.getResults()); } public Map<CoverageMetric, Integer> getRangeScores(CoverageTarget min, Map<CoverageMetric, Ratio> results) { Integer j; Map<CoverageMetric, Integer> result = new EnumMap<CoverageMetric, Integer>(CoverageMetric.class); for (Map.Entry<CoverageMetric, Integer> target : this.targets.entrySet()) { Ratio observed = results.get(target.getKey()); if (observed != null) { j = CoverageTarget.calcRangeScore(target.getValue(), min.targets.get(target.getKey()), observed.getPercentage()); result.put(target.getKey(), Integer.valueOf(j)); } } return result; } private static int calcRangeScore(Integer max, Integer min, int value) { if (min == null || min < 0) min = 0; if (max == null || max > 100) max = 100; if (min > max) min = max - 1; int result = (int) (100f * (value - min.floatValue()) / (max.floatValue() - min.floatValue())); if (result < 0) return 0; if (result > 100) return 100; return result; } /** * Getter for property 'targets'. * * @return Value for property 'targets'. */ public Set<CoverageMetric> getTargets() { Set<CoverageMetric> targets = EnumSet.noneOf(CoverageMetric.class); for (Map.Entry<CoverageMetric, Integer> target : this.targets.entrySet()) { if (target.getValue() != null) { targets.add(target.getKey()); } } return targets; } public void setTarget(CoverageMetric metric, Integer target) { targets.put(metric, target); } public Integer getTarget(CoverageMetric metric) { return targets.get(metric); } public void clear() { targets.clear(); } }