package hudson.plugins.violations.parse;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParserException;
import hudson.plugins.violations.model.BuildModel;
import hudson.plugins.violations.model.Severity;
/**
* Parses a violatios build xml report file.
*/
public class BuildModelParser extends AbstractParser {
private BuildModel buildModel;
/**
* Fluid setting of buildModel attribute.
* @param buildModel the model to populate.
* @return this object.
*/
public BuildModelParser buildModel(BuildModel buildModel) {
this.buildModel = buildModel;
return this;
}
/**
* Parse the build model file.
* @throws IOException if there is an I/O problem.
* @throws XmlPullParserException if there is a parsing problem.
*/
protected void execute()
throws IOException, XmlPullParserException {
// Ensure that the top level tag is "violations"
expectNextTag("violations");
getParser().next(); // consume the "violations" tag
// loop tru the child elements, getting the "file" ones
while (skipToTag("type")) {
parseTypeElement();
}
}
private void parseTypeElement()
throws IOException, XmlPullParserException {
String type = checkNotBlank("name");
getParser().next(); // consume "file" tag
buildModel.getFileCounts(type);
while (skipToTag("file")) {
String filename = checkNotBlank("name");
getParser().next();
int[] counts = new int[Severity.NUMBER_SEVERITIES];
while (skipToTag("severity")) {
counts[getInt("level")] = getInt("count");
skipTag();
}
buildModel.addFileCount(
type, filename, counts);
endElement();
}
endElement();
}
}