package hudson.plugins.coverage.model;
import hudson.plugins.coverage.model.measurements.BasicCoverage;
import hudson.plugins.coverage.model.measurements.LineCoverage;
/**
* TODO javadoc.
*
* @author Stephen Connolly
* @since 26-Jun-2008 18:01:36
*/
public class JavaModel implements Model {
public static final Element LANGUAGE = Element.getRootElement().newChild("java", false, SingletonHolder.INSTANCE);
public static final Element PACKAGE = LANGUAGE.newChild("package", false, SingletonHolder.INSTANCE);
public static final Element FILE = PACKAGE.newChild("file", true, SingletonHolder.INSTANCE);
public static final Element CLASS = FILE.newChild("class", false, SingletonHolder.INSTANCE);
public static final Element METHOD = CLASS.newChild("method", false, SingletonHolder.INSTANCE);
public static final Metric PACKAGE_COVERAGE = Metric.newMetric("package", BasicCoverage.class);
public static final Metric FILE_COVERAGE = Metric.newMetric("file", BasicCoverage.class);
public static final Metric CLASS_COVERAGE = Metric.newMetric("class", BasicCoverage.class);
public static final Metric METHOD_COVERAGE = Metric.newMetric("method", BasicCoverage.class);
public static final Metric LINE_COVERAGE = Metric.LINE_COVERAGE;
public static final Metric BRANCH_COVERAGE = Metric.BRANCH_COVERAGE;
public void apply(Instance instance) {
StandardModel.getInstance().apply(instance);
if (LANGUAGE.equals(instance.getElement())) {
int methodCount = 0;
int methodCover = 0;
int classCount = 0;
int classCover = 0;
int fileCount = 0;
int fileCover = 0;
for (Instance child : instance.getChildren(PACKAGE).values()) {
BasicCoverage coverage = (BasicCoverage) child.getMeasurement(METHOD_COVERAGE);
methodCount += coverage.getCount();
methodCover += coverage.getCover();
coverage = (BasicCoverage) child.getMeasurement(CLASS_COVERAGE);
classCount += coverage.getCount();
classCover += coverage.getCover();
if (coverage.getCover() > 0 || coverage.getCount() == 0) {
fileCover++;
}
fileCount++;
}
instance.setMeasurement(METHOD_COVERAGE, new BasicCoverage(methodCount, methodCover));
instance.setMeasurement(CLASS_COVERAGE, new BasicCoverage(classCount, classCover));
instance.setMeasurement(FILE_COVERAGE, new BasicCoverage(fileCount, fileCover));
} else if (PACKAGE.equals(instance.getElement())) {
int methodCount = 0;
int methodCover = 0;
int classCount = 0;
int classCover = 0;
int fileCount = 0;
int fileCover = 0;
for (Instance child : instance.getChildren(FILE).values()) {
BasicCoverage coverage = (BasicCoverage) child.getMeasurement(METHOD_COVERAGE);
methodCount += coverage.getCount();
methodCover += coverage.getCover();
coverage = (BasicCoverage) child.getMeasurement(CLASS_COVERAGE);
classCount += coverage.getCount();
classCover += coverage.getCover();
if (coverage.getCover() > 0 || coverage.getCount() == 0) {
fileCover++;
}
fileCount++;
}
instance.setMeasurement(METHOD_COVERAGE, new BasicCoverage(methodCount, methodCover));
instance.setMeasurement(CLASS_COVERAGE, new BasicCoverage(classCount, classCover));
instance.setMeasurement(FILE_COVERAGE, new BasicCoverage(fileCount, fileCover));
} else if (FILE.equals(instance.getElement())) {
int methodCount = 0;
int methodCover = 0;
int classCount = 0;
int classCover = 0;
for (Instance child : instance.getChildren(CLASS).values()) {
final BasicCoverage coverage = (BasicCoverage) child.getMeasurement(METHOD_COVERAGE);
methodCount += coverage.getCount();
methodCover += coverage.getCover();
if (coverage.getCover() > 0 || coverage.getCount() == 0) {
classCover++;
}
classCount++;
}
instance.setMeasurement(METHOD_COVERAGE, new BasicCoverage(methodCount, methodCover));
instance.setMeasurement(CLASS_COVERAGE, new BasicCoverage(classCount, classCover));
} else if (CLASS.equals(instance.getElement())) {
int count = 0;
int cover = 0;
for (Instance child : instance.getChildren(METHOD).values()) {
final LineCoverage coverage = (LineCoverage) child.getMeasurement(LINE_COVERAGE);
if (coverage.getCover() > 0 || coverage.getCount() == 0) {
cover++;
}
count++;
}
instance.setMeasurement(METHOD_COVERAGE, new BasicCoverage(count, cover));
} else if (METHOD.equals(instance.getElement())) {
// ignore as methods only have line & branch
}
}
private static final class SingletonHolder {
private static final JavaModel INSTANCE = new JavaModel();
}
}