package hudson.plugins.crap4j.model; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.schneide.crap4j.reader.model.IOverallStatistics; public class CrapReportMerger { public CrapReportMerger() { super(); } public ProjectCrapBean mergeReports(ProjectCrapBean previous, ProjectCrapBean... beans) { List<IMethodCrap> crapMethods = new ArrayList<IMethodCrap>(); for (ProjectCrapBean crapBean : beans) { Collections.addAll(crapMethods, crapBean.getCrapMethods()); } ProjectCrapBean result = new ProjectCrapBean( previous, new MergedOverallStatistics(beans), crapMethods.toArray(new IMethodCrap[crapMethods.size()])); return result; } private static class MergedOverallStatistics implements IOverallStatistics { private final ProjectCrapBean[] beans; public MergedOverallStatistics(ProjectCrapBean... beans) { super(); this.beans = beans; } public int getCrapLoad() { int result = 0; for (ProjectCrapBean crapBean : this.beans) { result += crapBean.getCrapLoad(); } return result; } public int getCrapMethodCount() { int result = 0; for (ProjectCrapBean crapBean : this.beans) { result += crapBean.getCrapMethodCount(); } return result; } public double getCrapMethodPercent() { return (getCrapMethodCount() / (double) getMethodCount()) * 100.0d; } public int getMethodCount() { int result = 0; for (ProjectCrapBean crapBean : this.beans) { result += crapBean.getMethodCount(); } return result; } public String getName() { StringBuilder result = new StringBuilder(); result.append("report merged from "); for (ProjectCrapBean crapBean : this.beans) { result.append(crapBean.getName()); result.append(", "); } return result.toString(); } public double getTotalCrap() { double result = 0; for (ProjectCrapBean crapBean : this.beans) { result += crapBean.getTotalCrap(); } return result; } } }