package hudson.plugins.testabilityexplorer.report.costs;
import org.apache.commons.lang.StringUtils;
import hudson.plugins.testabilityexplorer.utils.StringUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* Encapsulates the testability of a single class.
*
* @author reik.schatz
*/
public class ClassCost implements Serializable, TestabilityCost
{
private String m_name;
private String m_packageName;
private int m_cost;
private List<MethodCost> m_costStack;
public ClassCost(String name, int cost)
{
m_name = name;
if(StringUtils.isNotBlank(m_name)){
m_packageName = StringUtil.getPackage(m_name);
}
m_cost = cost;
}
public void addToCostStack(MethodCost methodTestability)
{
if (m_costStack == null)
{
m_costStack = new ArrayList<MethodCost>();
}
m_costStack.add(methodTestability);
}
public String getName()
{
return m_name;
}
public String getPackageName(){
return m_packageName;
}
public int getCost()
{
return m_cost;
}
public Collection<MethodCost> getCostStack()
{
return Collections.unmodifiableCollection(m_costStack);
}
/**
* Sorts the all costs contained in this ClassCost highest first.
*/
public void sort()
{
if (m_costStack != null)
{
Collections.sort(m_costStack, MethodCostComparator.getInstance());
for (MethodCost methodCost : m_costStack)
{
methodCost.sort();
}
}
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
if (m_name != null)
{
sb.append("Name: " + m_name + ", ");
}
sb.append("Cost: " + m_cost);
return sb.toString();
}
@Override
public boolean equals(Object o)
{
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ClassCost classCost = (ClassCost) o;
if (m_name != null ? !m_name.equals(classCost.m_name) : classCost.m_name != null) return false;
return true;
}
@Override
public int hashCode()
{
return m_name != null ? m_name.hashCode() : 0;
}
}