package jdepend.model;
import java.io.Serializable;
import jdepend.framework.util.MetricsFormat;
/**
* 关系元素
*
* @author <b>Abner</b>
*
*/
public final class Element implements Serializable, Comparable<Element> {
/**
*
*/
private static final long serialVersionUID = 4123313621635544844L;
private Component component = null;
public Element(Component component) {
this.component = component;
}
/**
* 元素内聚值
*
* @return
*/
public float getIntensity() {
return component.getCohesion();
}
/**
* 元素稳定性
*
* @return
*/
public float getInstability() {
return component.getStability();
}
/**
* 元素内聚性指数
*
* @return
*/
public float getBalance() {
return component.getBalance();
}
public String getName() {
return this.component.getName();
}
public Component getComponent() {
return component;
}
public int size() {
return this.component.getClassCount();
}
@Override
public String toString() {
StringBuilder info = new StringBuilder();
if (this.component.getAreaComponent() != null) {
info.append(this.component.getAreaComponent().getName());
info.append(" ");
} else {
String layerDesc = this.component.getLayerDesc();
if (layerDesc != null) {
info.append(layerDesc);
info.append(" ");
}
}
info.append("内聚性指数:");
info.append(MetricsFormat.toFormattedMetrics(this.getBalance()));
info.append("(");
info.append(getBalance(this.getBalance()));
info.append(") 稳定性:");
info.append(MetricsFormat.toFormattedMetrics(this.getInstability()));
info.append("(");
info.append(getInstability(this.getInstability()));
info.append(")");
return info.toString();
}
private static String getBalance(float instability) {
if (instability < 0.33) {
return "较差";
} else if (instability > 0.66) {
return "较好";
} else {
return "中等";
}
}
private static String getInstability(float instability) {
if (instability < 0.33) {
return "稳定";
} else if (instability > 0.66) {
return "不稳定";
} else {
return "中等";
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((component == null) ? 0 : component.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Element other = (Element) obj;
if (component == null) {
if (other.component != null)
return false;
} else if (!component.equals(other.component))
return false;
return true;
}
@Override
public int compareTo(Element o) {
// 按Ca值从小到大排序
int rtn = (new Integer(this.component.getAfferentCoupling()).compareTo(o.component.getAfferentCoupling()));
if (rtn != 0) {
return rtn;
} else {
// 按Ce值从大到小
rtn = (new Integer(o.component.getEfferentCoupling()).compareTo(this.component.getEfferentCoupling()));
if (rtn != 0) {
return rtn;
} else {
// 按抽象程度从小到大
return (new Float(this.component.getAbstractness()).compareTo(o.component.getAbstractness()));
}
}
}
}