package hudson.plugins.cppncss; import hudson.model.AbstractBuild; import hudson.plugins.cppncss.parser.Statistic; import hudson.plugins.helpers.health.HealthMetric; import java.util.Collection; import org.apache.commons.beanutils.Converter; /** * Created by IntelliJ IDEA. User: stephen Date: 18-Mar-2008 Time: 06:04:17 To change this template use File | Settings * | File Templates. */ public enum CppNCSSHealthMetrics implements HealthMetric<CppNCSSBuildIndividualReport> { TOT_CCN_RATIO { public String getName() { return "Total CCN"; } public float measure(CppNCSSBuildIndividualReport report) { final float ccn = report.getTotals().getFileTotal().getCcn(); return (ccn); } public float measureNew(CppNCSSBuildIndividualReport observable) { return measureNew(this, observable); } public float getBest() { return 0; } public float getWorst() { return 1000; } }, AVG_FILE_CCN_RATIO { public String getName() { return "Average File CCN"; } public float measure(CppNCSSBuildIndividualReport report) { final float ccn = report.getTotals().getFileTotal().getCcn(); final float number_of_files = report.getResults().getFileResults().size(); return (ccn/number_of_files); } public float measureNew(CppNCSSBuildIndividualReport observable) { return measureNew(this, observable); } public float getBest() { return 0; } public float getWorst() { return 1000; } }, NUMBER_OF_CCN_VIOLATED_FUNCTION { public String getName() { return "Number of CCN violated functions"; } public float measure(CppNCSSBuildIndividualReport report) { int totalViolations = 0; Collection<Statistic> functionResults = report.getResults().getFunctionResults(); for (Statistic statistic : functionResults) { if(statistic.getCcn() >= report.getFunctionCcnViolationThreshold()){ totalViolations ++; } } return totalViolations; } public float measureNew(CppNCSSBuildIndividualReport observable) { return measureNew(this, observable); } public float getBest() { return 0; } public float getWorst() { return 100; } }, UMBER_OF_NCSS_VIOLATED_FUNCTION { public String getName() { return "Number of NCSS violated functions"; } public float measure(CppNCSSBuildIndividualReport report) { int totalViolations = 0; Collection<Statistic> functionResults = report.getResults().getFunctionResults(); for (Statistic statistic : functionResults) { if(statistic.getNcss() >= report.getFunctionNcssViolationThreshold()){ totalViolations ++; } } return totalViolations; } public float measureNew(CppNCSSBuildIndividualReport observable) { return measureNew(this, observable); } public float getBest() { return 0; } public float getWorst() { return 100; } }; static Converter CONVERTER = new Converter() { public Object convert(Class aClass, Object o) { return valueOf(o.toString()); } }; static float measureNew(CppNCSSHealthMetrics metrics, CppNCSSBuildIndividualReport observable) { final float newValue = metrics.measure(observable); final float oldValue; AbstractBuild<?, ?> previousBuild = (AbstractBuild<?, ?>)observable.getBuild().getPreviousBuild(); if(previousBuild != null){ CppNCSSBuildIndividualReport action = (CppNCSSBuildIndividualReport)previousBuild.getAction(AbstractBuildReport.class); oldValue = metrics.measure(action); return newValue - oldValue; } return 0; }; }