package jdepend.knowledge.domainanalysis.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import jdepend.framework.util.BundleUtil;
import jdepend.knowledge.domainanalysis.AbstractDomainAnalysis;
import jdepend.knowledge.domainanalysis.AdviseInfo;
import jdepend.knowledge.domainanalysis.StructureCategory;
import jdepend.model.JDependUnit;
import jdepend.model.MetricsMgr;
import jdepend.model.result.AnalysisResult;
import jdepend.model.util.JDependUnitByMetricsComparator;
public final class DDomainAnalysis extends AbstractDomainAnalysis {
/**
*
*/
private static final long serialVersionUID = -1817433228682769778L;
public DDomainAnalysis() {
super("抽象程度合理性分析器", "用于对抽象程度合理性项目进行建议");
}
@Override
protected AdviseInfo doAdvise(String name, AnalysisResult result) {
List<JDependUnit> units = new ArrayList<JDependUnit>(result.getComponents());
Collections.sort(units, new JDependUnitByMetricsComparator(MetricsMgr.D, true));
Iterator<JDependUnit> it = units.iterator();
JDependUnit unit = null;
while (it.hasNext()) {
unit = it.next();
if (unit.isInner() && (unit.getAfferents().size() != 0 || unit.getEfferents().size() != 0)) {
break;
}
}
if (unit != null) {
String advise = null;
if (unit.getStability() != null && unit.getStability() < 0.5) {
advise = BundleUtil.getString(BundleUtil.Advise_D_Small);
} else {
advise = BundleUtil.getString(BundleUtil.Advise_D_Big);
}
AdviseInfo info = new DAdviseInfo();
info.setDesc(advise);
info.addComponentName(unit.getName());
return info;
} else {
return null;
}
}
@Override
public StructureCategory getStructureCategory() {
return StructureCategory.DDomainAnalysis;
}
}