1 package net.sf.mavenhist.extractor.jncss; 2 3 import javax.xml.transform.TransformerException; 4 5 import net.sf.mavenhist.extractor.AbstractValidatingXMLValueExtractor; 6 import net.sf.mavenhist.extractor.MultiMetric; 7 8 import org.apache.xpath.XPathAPI; 9 import org.w3c.dom.Document; 10 import org.w3c.dom.Node; 11 import org.w3c.dom.NodeList; 12 13 /** 14 * Extracts the function count per package of a measured entity from a JavaNCSS-XML file. 15 */ 16 public class JNCSSFunctionsPerPackageExtractor extends AbstractValidatingXMLValueExtractor { 17 18 /** 19 * {@inheritDoc} 20 */ 21 public MultiMetric[] extractValidatedDocument(Document document) throws TransformerException { 22 String xPathFunctions = "/javancss/packages/package/functions/text()"; 23 String xPathLocations = "/javancss/packages/package/name/text()"; 24 NodeList functionsNodeList = XPathAPI.selectNodeList(document, xPathFunctions); 25 NodeList locationsNodeList = XPathAPI.selectNodeList(document, xPathLocations); 26 int nodeListLength = locationsNodeList.getLength(); 27 MultiMetric[] metrics = new MultiMetric[nodeListLength]; 28 for (int i = 0; i < nodeListLength; i++) { 29 Node locationNode = locationsNodeList.item(i); 30 Node valueNode = functionsNodeList.item(i); 31 metrics[i] = new MultiMetric(locationNode.getNodeValue(), valueNode.getNodeValue()); 32 } 33 return metrics; 34 } 35 36 /** 37 * {@inheritDoc} 38 */ 39 protected String getValidityTestXPath() { 40 return "/javancss"; 41 } 42 43 /** 44 * {@inheritDoc} 45 */ 46 public String getName() { 47 return "jncssfunctionsperpackage"; 48 } 49 }