/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd; import net.sourceforge.pmd.stat.Metric; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; public class Report { public static class ProcessingError { private String msg; private String file; public ProcessingError(String msg, String file) { this.msg = msg; this.file = file; } public String getMsg() { return msg; } public String getFile() { return file; } } private Set violations = new TreeSet(new RuleViolation.RuleViolationComparator()); private Set metrics = new HashSet(); private List listeners = new ArrayList(); private List errors = new ArrayList(); /** * * @return a Map summarizing the Report: String (rule name) ->Integer (count of violations) */ public Map getSummary() { Map summary = new HashMap(); for (Iterator i = violations.iterator(); i.hasNext();) { RuleViolation rv = (RuleViolation)i.next(); if (!summary.containsKey(rv.getRule().getName())) { summary.put(rv.getRule().getName(), new Integer(0)); } Integer count = (Integer)summary.get(rv.getRule().getName()); count = new Integer(count.intValue() + 1); summary.put(rv.getRule().getName(), count); } return summary; } public void addListener(ReportListener listener) { listeners.add(listener); } public void addRuleViolation(RuleViolation violation) { violations.add(violation); for (Iterator i = listeners.iterator(); i.hasNext();) { ReportListener listener = (ReportListener) i.next(); listener.ruleViolationAdded(violation); } } public void addMetric(Metric metric) { metrics.add(metric); for (Iterator i = listeners.iterator(); i.hasNext();) { ReportListener listener = (ReportListener) i.next(); listener.metricAdded(metric); } } public void addError(ProcessingError error) { errors.add(error); } public boolean hasMetrics() { return !metrics.isEmpty(); } public Iterator metrics() { return metrics.iterator(); } public boolean isEmpty() { return violations.isEmpty(); } public Iterator iterator() { return violations.iterator(); } public Iterator errors() { return errors.iterator(); } public int size() { return violations.size(); } }