package hudson.plugins.testabilityexplorer.parser.converters;
import hudson.plugins.testabilityexplorer.report.costs.MethodCost;
import hudson.plugins.testabilityexplorer.report.costs.ClassCost;
import hudson.plugins.testabilityexplorer.report.costs.CostSummary;
import hudson.plugins.testabilityexplorer.report.costs.TestabilityCost;
import org.xmlpull.v1.XmlPullParser;
import java.util.Collection;
/**
* Converts a <cost> XML element into a {@link MethodCost}.
*
* @author reik.schatz
*/
public class CostElementConverter extends ElementConverter
{
/**
* Constructs a new {@link MethodCost}.
*
* @param xpp XmlPullParser
* @param root the {@link CostSummary} root
* @return MethodCost
*/
public TestabilityCost construct(XmlPullParser xpp, CostSummary root)
{
String namespace = getNamespace();
int cyclomatic = toInt(xpp.getAttributeValue(namespace, "cyclomatic"), -1);
int global = toInt(xpp.getAttributeValue(namespace, "global"), -1);
int line = toInt(xpp.getAttributeValue(namespace, "line"), -1);
int lod = toInt(xpp.getAttributeValue(namespace, "lod"), -1);
String method = xpp.getAttributeValue(namespace, "method");
int overall = toInt(xpp.getAttributeValue(namespace, "overall"), -1);
String reason = xpp.getAttributeValue(namespace, "reason");
MethodCost methodTestability = new MethodCost(method, cyclomatic, global, line, lod, overall, reason);
Collection<ClassCost> classTestabilities = root.getCostStack();
int lastItemIndex = classTestabilities.size() -1;
ClassCost classTestability = (ClassCost) classTestabilities.toArray() [lastItemIndex];
Collection<MethodCost> methodTestabilities = classTestability.getCostStack();
lastItemIndex = methodTestabilities.size() -1;
MethodCost lastMethodTestability = (MethodCost) methodTestabilities.toArray() [lastItemIndex];
lastMethodTestability.addToCostStack(methodTestability);
return lastMethodTestability;
}
}