package jdepend.model.util;
import java.util.Comparator;
import jdepend.model.JDependUnit;
import jdepend.model.MetricsMgr;
/**
* 按指标比较包的比较器
*
* @author <b>Abner</b>
*
*/
public class JDependUnitByMetricsComparator implements Comparator {
private String metrics = null;
private boolean asc = true;
public JDependUnitByMetricsComparator() {
}
public JDependUnitByMetricsComparator(String metrics) {
this.metrics = metrics;
}
public JDependUnitByMetricsComparator(String metrics, boolean asc) {
this(metrics);
this.asc = asc;
}
@Override
public int compare(Object p1, Object p2) {
JDependUnit a = (JDependUnit) p1;
JDependUnit b = (JDependUnit) p2;
int rtn = 0;
if (this.metrics != null) {
if (this.metrics.equals(MetricsMgr.Name)) {
rtn = compare(a.getName(), b.getName());
} else if (this.metrics.equals(MetricsMgr.LC)) {
rtn = compare(a.getLineCount(), b.getLineCount());
} else if (this.metrics.equals(MetricsMgr.CN)) {
rtn = compare(a.getClassCount(), b.getClassCount());
} else if (this.metrics.equals(MetricsMgr.AC)) {
rtn = compare(a.getAbstractClassCount(), b.getAbstractClassCount());
} else if (this.metrics.equals(MetricsMgr.CC)) {
rtn = compare(a.getConcreteClassCount(), b.getConcreteClassCount());
} else if (this.metrics.equals(MetricsMgr.Ca)) {
rtn = compare(a.getAfferentCoupling(), b.getAfferentCoupling());
} else if (this.metrics.equals(MetricsMgr.Ce)) {
rtn = compare(a.getEfferentCoupling(), b.getEfferentCoupling());
} else if (this.metrics.equals(MetricsMgr.A)) {
rtn = compare(a.getAbstractness(), b.getAbstractness());
} else if (this.metrics.equals(MetricsMgr.I)) {
rtn = compare(a.getStability(), b.getStability());
} else if (this.metrics.equals(MetricsMgr.D)) {
rtn = compare(a.getDistance(), b.getDistance());
} else if (this.metrics.equals(MetricsMgr.CaCoupling)) {
rtn = compare(a.caCoupling(), b.caCoupling());
} else if (this.metrics.equals(MetricsMgr.CeCoupling)) {
rtn = compare(a.ceCoupling(), b.ceCoupling());
} else if (this.metrics.equals(MetricsMgr.Coupling)) {
rtn = compare(a.getCoupling(), b.getCoupling());
} else if (this.metrics.equals(MetricsMgr.Cohesion)) {
rtn = compare(a.getCohesion(), b.getCohesion());
} else if (this.metrics.equals(MetricsMgr.Balance)) {
rtn = compare(a.getBalance(), b.getBalance());
} else if (this.metrics.equals(MetricsMgr.Encapsulation)) {
rtn = compare(a.getEncapsulation(), b.getEncapsulation());
} else if (a.extendMetrics(metrics) != null) {
rtn = compare(a.extendMetrics(metrics).getMetrics(), b.extendMetrics(metrics).getMetrics());
} else {
rtn = a.getName().compareTo(b.getName());
}
} else {
rtn = a.getName().compareTo(b.getName());
}
if (this.asc) {
return rtn;
} else {
return -rtn;
}
}
private int compare(Float e1, Float e2) {
if (e1 == null && e2 == null) {
return 0;
} else if (e1 == null && e2 != null) {
return 1;
} else if (e1 != null && e2 == null) {
return -1;
} else {
return e1.compareTo(e2);
}
}
private int compare(Integer e1, Integer e2) {
if (e1 == null && e2 == null) {
return 0;
} else if (e1 == null && e2 != null) {
return 1;
} else if (e1 != null && e2 == null) {
return -1;
} else {
return e1.compareTo(e2);
}
}
private int compare(String e1, String e2) {
if (e1 == null && e2 == null) {
return 0;
} else if (e1 == null && e2 != null) {
return 1;
} else if (e1 != null && e2 == null) {
return -1;
} else {
return e1.compareTo(e2);
}
}
}