package jdepend.model.result; import java.io.Serializable; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import jdepend.framework.util.DateUtil; import jdepend.framework.util.VersionUtil; import jdepend.metadata.JavaClass; import jdepend.metadata.JavaPackage; import jdepend.metadata.util.JavaClassUtil; import jdepend.model.Component; import jdepend.model.component.CustomComponent; import jdepend.model.component.modelconf.ComponentModelConf; import jdepend.model.profile.ProfileFacade; /** * 一次解析执行的上下文信息 * * @author wangdg * */ public final class AnalysisRunningContext implements Serializable { /** * */ private static final long serialVersionUID = 4744540265380367268L; private String group; private String command; private String path; private String client; private String userName; private Date analyseDate; private Component component; private List<JavaPackage> javaPackages; private boolean analyzeInnerClasses = true; private boolean isCalJavaClassCycle = true; private boolean isLocalRunning = true; private ProfileFacade profileFacade; private transient Map<String, String> diffElements; private transient Collection<JavaClass> javaClasses; private transient Map<String, JavaPackage> javaPackagesForId; public AnalysisRunningContext() { super(); this.analyseDate = DateUtil.getSysDate(); } public String getGroup() { return group; } public void setGroup(String group) { this.group = group; } public String getCommand() { return command; } public void setCommand(String command) { this.command = command; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public boolean isAnalyzeInnerClasses() { return analyzeInnerClasses; } public void setAnalyzeInnerClasses(boolean analyzeInnerClasses) { this.analyzeInnerClasses = analyzeInnerClasses; } public boolean isCalJavaClassCycle() { return isCalJavaClassCycle; } public void setCalJavaClassCycle(boolean isCalJavaClassCycle) { this.isCalJavaClassCycle = isCalJavaClassCycle; } public boolean isLocalRunning() { return isLocalRunning; } public void setLocalRunning(boolean isLocalRunning) { this.isLocalRunning = isLocalRunning; } public String getClient() { return client; } public void setClient(String client) { this.client = client; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Component getComponent() { return component; } public void setComponent(Component component) { this.component = component; } public ProfileFacade getProfileFacade() { return profileFacade; } public void setProfileFacade(ProfileFacade profileFacade) { this.profileFacade = profileFacade; } public Date getAnalyseDate() { return analyseDate; } public List<JavaPackage> getJavaPackages() { return javaPackages; } public void setJavaPackages(List<JavaPackage> packages) { this.javaPackages = packages; } public JavaPackage getThePackage(String id) { if (javaPackagesForId == null) { javaPackagesForId = new HashMap<String, JavaPackage>(); for (JavaPackage javaPackage : this.getJavaPackages()) { javaPackagesForId.put(javaPackage.getId(), javaPackage); } } return this.javaPackagesForId.get(id); } public Collection<JavaClass> getJavaClasses() { if (this.javaClasses == null) { this.javaClasses = JavaClassUtil.getClassesForJavaPackages(javaPackages); } return javaClasses; } /** * 得到与配置信息存在差异的elements * * @return */ public Map<String, String> getDiffElements() { if (diffElements == null) { diffElements = new HashMap<String, String>(); if (this.component instanceof CustomComponent) { ComponentModelConf componentModelConf = ((CustomComponent) this.component).getComponentModelConf(); diffElements = componentModelConf.calDiffElements(this.javaPackages); } } return this.diffElements; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((command == null) ? 0 : command.hashCode()); result = prime * result + ((group == null) ? 0 : group.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; AnalysisRunningContext other = (AnalysisRunningContext) obj; if (command == null) { if (other.command != null) return false; } else if (!command.equals(other.command)) return false; if (group == null) { if (other.group != null) return false; } else if (!group.equals(other.group)) return false; return true; } @Override public String toString() { StringBuilder content = new StringBuilder(); if (this.group != null) { content.append("运行的组:"); content.append(group); content.append("\n"); } if (this.command != null) { content.append("运行的命令:"); content.append(command); content.append("\n"); } content.append("分析路径:"); content.append(path); content.append("\n"); content.append("是否采用本地服务:"); content.append(getBooleanMsg(isLocalRunning)); content.append("\n"); content.append("是否分析了内部类:"); content.append(getBooleanMsg(analyzeInnerClasses)); content.append("\n"); content.append("是否应用了抽象类资格评判器:"); content.append(getBooleanMsg(profileFacade.getJavaClassUnitProfile().isAbstractClassRule())); content.append("\n"); content.append("是否计算类级别的循环依赖:"); content.append(getBooleanMsg(isCalJavaClassCycle)); content.append("\n"); content.append("执行时间:"); content.append(this.analyseDate); content.append(" 使用V"); content.append(VersionUtil.getVersion()); content.append(" BuildDate:"); content.append(VersionUtil.getBuildDate()); content.append("\n"); if (this.component != null && this.component instanceof CustomComponent) { content.append("\n"); content.append(((CustomComponent) this.component).getComponentModelConf()); } return content.toString(); } private static String getBooleanMsg(boolean info) { if (info) { return "是"; } else { return "否"; } } }