package com.ikokoon.serenity.process.aggregator; import java.util.ArrayList; import java.util.List; import com.ikokoon.serenity.model.Class; import com.ikokoon.serenity.model.Line; import com.ikokoon.serenity.model.Method; import com.ikokoon.serenity.persistence.IDataBase; /** * @author Michael Couck * @since 07.03.10 * @version 01.00 */ public class ClassAggregator extends AAggregator { private Class<?, ?> klass; public ClassAggregator(IDataBase dataBase, Class<?, ?> klass) { super(dataBase); this.klass = klass; } @SuppressWarnings("unchecked") public void aggregate() { // First do the methods List<Method<?, ?>> methods = klass.getChildren(); for (Method method : methods) { new MethodAggregator(dataBase, method).aggregate(); } aggregate(klass); setPrecision(klass); dataBase.persist(klass); } protected void aggregate(Class<?, ?> klass) { logger.debug("Processing class : " + klass); List<Line<?, ?>> lines = getLines(klass, new ArrayList<Line<?, ?>>()); List<Method<?, ?>> methods = getMethods(klass, new ArrayList<Method<?, ?>>()); double executed = 0d; double totalComplexity = 0d; for (Line<?, ?> line : lines) { if (line.getCounter() > 0d) { executed++; } } for (Method<?, ?> method : methods) { if (lines.size() > 0) { totalComplexity += method.getComplexity(); } else { totalComplexity++; } } // lines.size() > 0 ? (executed / (double) lines.size()) * 100 : 0; double coverage = getCoverage(lines.size(), executed); // methods.size() > 0 ? totalComplexity / methods.size() : 1; double complexity = getComplexity(methods.size(), totalComplexity); klass.setCoverage(coverage); klass.setComplexity(complexity); klass.setAfference(klass.getAfferent().size()); klass.setEfference(klass.getEfferent().size()); // (efference + afference) > 0 ? efference / (efference + afference) : 1; double stability = getStability(klass.getEfferent().size(), klass.getAfferent().size()); klass.setStability(stability); } }