package jdepend.model.result; import java.util.Collection; import jdepend.framework.util.MetricsFormat; import jdepend.metadata.JavaClassRelationItem; import jdepend.metadata.relationtype.TableRelation; import jdepend.model.JavaClassUnit; import jdepend.model.Relation; import jdepend.model.util.JavaClassUnitUtil; public class AnalysisResultUtil { private AnalysisResult result; public AnalysisResultUtil(AnalysisResult result) { super(); this.result = result; } /** * 计算基于数据库表实现组件间通讯的比重 * * @param javaClasses * @return */ public Float tableRelationScale() { Collection<JavaClassUnit> javaClasses = result.getClasses(); if (javaClasses != null && javaClasses.size() > 0) { AnalysisResult result = javaClasses.iterator().next().getResult(); int tableRelations = 0; int relations = 0; for (JavaClassUnit javaClass : javaClasses) { for (JavaClassRelationItem item : javaClass.getJavaClass().getCeItems()) { if (!JavaClassUnitUtil.isInner(item, result)) { if (item.getType() instanceof TableRelation) { tableRelations += 1; } relations += 1; } } } if (relations == 0) { return 0.0F; } else { return MetricsFormat.toFormattedMetrics(tableRelations * 1F / relations); } } else { return 0.0F; } } /** * 计算存在问题的关系的权重 * * @return */ protected float calAttentionRelation() { float scale = 0F; if (result.getRelations().size() == 0) { scale = 0F; } else { float attentions = 0F; for (Relation relation : result.getRelations()) { if (relation.isAttention()) { // 根据关系性质计算存在问题的关系比例 if (relation.getAttentionType().equals(Relation.MutualDependAttentionType)) { attentions += 1.0F;// 彼此依赖一次增加1,两次增加到2(存在彼此依赖的关系,两条线全部记录为有问题的关系) } else if (relation.getAttentionType().equals(Relation.ComponentLayerAttentionType)) { attentions += 0.8F; } else if (relation.getAttentionType().equals(Relation.SDPAttentionType)) { attentions += 0.5F; } if (relation.getAttentionType().equals(Relation.CycleDependAttentionType)) { attentions += 0.3F; } } } scale = attentions * 1F / result.getRelations().size(); } return scale; } /** * 计算存在问题的关系的比例 * * @return */ public float getAttentionRelationScale() { float scale = 0F; if (result.getRelations().size() == 0) { scale = 0F; } else { int isAttention = 0; for (Relation relation : result.getRelations()) { if (relation.isAttention()) { isAttention++; } } scale = isAttention * 1F / result.getRelations().size(); } return scale; } /** * 计算平均类大小 * * @return */ public int calClassSize() { int classCount = 0; for (JavaClassUnit JavaClass : result.getClasses()) { if (JavaClass.getLineCount() != 0) { classCount += 1; } } if (classCount != 0) { return result.getSummary().getLineCount() / classCount; } else { return 0; } } }