package jdepend.metadata.profile;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jdepend.metadata.JavaClassRelationType;
import jdepend.metadata.relationtype.FieldRelation;
import jdepend.metadata.relationtype.HttpRelation;
import jdepend.metadata.relationtype.InheritRelation;
import jdepend.metadata.relationtype.JavaClassRelationTypes;
import jdepend.metadata.relationtype.ParamRelation;
import jdepend.metadata.relationtype.TableRelation;
import jdepend.metadata.relationtype.VariableRelation;
public class JavaClassRelationItemProfile implements Serializable {
private static final long serialVersionUID = 6254286808982233198L;
private Map<String, Float> types;
private List<String> ignoreTables;// 实际忽略的表集合
private transient JavaClassRelationTypes javaClassRelationTypes;
public static List<String> getAllTypes() {
List<String> allTypes = new ArrayList<String>();
allTypes.add(JavaClassRelationTypes.Inherit);
allTypes.add(JavaClassRelationTypes.Field);
allTypes.add(JavaClassRelationTypes.Param);
allTypes.add(JavaClassRelationTypes.Variable);
allTypes.add(JavaClassRelationTypes.Table);
allTypes.add(JavaClassRelationTypes.Http);
return allTypes;
}
public Map<String, Float> getTypes() {
return types;
}
public void setTypes(Map<String, Float> types) {
this.types = types;
}
public Float getType(String name) {
return this.types.get(name);
}
public List<String> getIgnoreTables() {
return ignoreTables;
}
public void setIgnoreTables(List<String> ignoreTables) {
this.ignoreTables = ignoreTables;
}
public JavaClassRelationTypes getJavaClassRelationTypes() {
if (javaClassRelationTypes == null) {
javaClassRelationTypes = new JavaClassRelationTypes();
Map<String, JavaClassRelationType> types = new HashMap<String, JavaClassRelationType>();
types.put(JavaClassRelationTypes.Inherit, new InheritRelation(this.getType(JavaClassRelationTypes.Inherit)));
types.put(JavaClassRelationTypes.Field, new FieldRelation(this.getType(JavaClassRelationTypes.Field)));
types.put(JavaClassRelationTypes.Param, new ParamRelation(this.getType(JavaClassRelationTypes.Param)));
types.put(JavaClassRelationTypes.Variable,
new VariableRelation(this.getType(JavaClassRelationTypes.Variable)));
types.put(JavaClassRelationTypes.Table, new TableRelation(this.getType(JavaClassRelationTypes.Table)));
types.put(JavaClassRelationTypes.Http, new HttpRelation(this.getType(JavaClassRelationTypes.Http)));
javaClassRelationTypes.setTypes(types);
}
return javaClassRelationTypes;
}
public String getExplain() {
StringBuilder info = new StringBuilder();
info.append("类关系的强度与类型有关,不同的关系类型有不同的强度。类关系的强度是构成组件关系强度的依据。\n\n");
info.append("当某一类关系类型的强度被设置为0时,系统将不采集该类关系。\n\n");
info.append("Field包含关系是组合和聚合的关系的统称。在实际代码中很多类间的包含关系并非语义的包含关系,而是调用关系,如采用Spring注解向Service注入的其他Service这种关系。系统会识别这样的关系,并确定为Variable关系。\n\n");
info.append("Table关系的含义是两个类共同操作了同一张数据库表。这种关系是以数据库表为手段建立的生产者消费者模式。系统能够通过多种信息(类代码或配置文件信息)识别操作数据库表的具体类型(Select、Insert、Update、Delete)。\n\n");
info.append("Http关系的含义是两个类之间存在http方式的远程调用。这种关系是通过url字符串匹配实现的,被调用方使用了RequestMapping注解,调用方采用了指定的调用者(在设置->管理参数->文件解析配置文件中配置)调用该注解配置的url。\n\n");
return info.toString();
}
}