package org.jenkinsci.plugins.codedx; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.jenkinsci.plugins.codedx.model.CodeDxReportStatistics; import org.jenkinsci.plugins.codedx.model.CodeDxGroupStatistics; /** * * @author ademartini This file is heavily derived from the sloccount-plugin (author: Michal Turek) * */ public class CodeDxDiffSummary extends CodeDxDiff{ private final List<CodeDxDiffGroup> groupDiffs; private String name; public CodeDxDiffSummary(List<CodeDxDiffGroup> groupDiffs, int findings, int findingsDelta, String name) { super(findings, findingsDelta); this.groupDiffs = groupDiffs; this.name = name; // TODO Auto-generated constructor stub } public List<CodeDxDiffGroup> getGroupDiffs() { return groupDiffs; } public String getName(){ return name; } public static CodeDxDiffSummary getDiffSummary( CodeDxReportStatistics previous, CodeDxReportStatistics current, String name, Comparator<CodeDxDiffGroup> comparator, Map<String,String> iconMap) { if(previous == null) { return getDiffSummary(current,name,comparator,iconMap); } Set<String> groups = new HashSet<String>(); groups.addAll(previous.getAllGroups()); groups.addAll(current.getAllGroups()); List<CodeDxDiffGroup> result = new ArrayList<CodeDxDiffGroup>(); int findings = 0; int findingsDelta = 0; for(String group: groups) { // Quadratic complexity can be optimized, but groups count is small CodeDxGroupStatistics curStats = current.getGroup(group); CodeDxGroupStatistics prevStats = previous.getGroup(group); result.add(new CodeDxDiffGroup(curStats.getGroup(), curStats.getFindings(), curStats.getFindings() - prevStats.getFindings(),iconMap.get(curStats.getGroup()))); findings += curStats.getFindings(); findingsDelta += curStats.getFindings() - prevStats.getFindings(); } Collections.sort(result, comparator); return new CodeDxDiffSummary(result, findings,findingsDelta, name); } private static CodeDxDiffSummary getDiffSummary( CodeDxReportStatistics current, String name, Comparator<CodeDxDiffGroup> comparator, Map<String,String> iconMap) { if(current == null) { return getDiffSummary(name); } List<CodeDxDiffGroup> result = new ArrayList<CodeDxDiffGroup>(); int findings = 0; for(CodeDxGroupStatistics groupStats: current.getStatistics()) { result.add(new CodeDxDiffGroup(groupStats.getGroup(), groupStats.getFindings(), 0,iconMap.get(groupStats.getGroup()))); findings += groupStats.getFindings(); } Collections.sort(result,comparator); return new CodeDxDiffSummary(result, findings, 0, name); } private static CodeDxDiffSummary getDiffSummary(String name) { return new CodeDxDiffSummary( Collections.<CodeDxDiffGroup>emptyList(), 0, 0, name); } }