package jdepend.client.report.way.textui; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import jdepend.metadata.Named; import jdepend.model.Component; import jdepend.model.JDependUnit; import jdepend.model.JavaClassUnit; import jdepend.model.result.AnalysisResult; public abstract class SummaryPrinter extends Printer { /** * 打印小结信息 * * @param inputData */ public final void printBasic(AnalysisResult inputData) { printHeader(inputData); printComponents(inputData.getComponents()); printCycles(inputData.getComponents()); printSummary(inputData); printFooter(); getWriter().flush(); } protected void printComponents(Collection<Component> components) { printComponentsHeader(); Iterator<Component> i = components.iterator(); while (i.hasNext()) { printComponent(i.next()); } printComponentsFooter(); } public void printComponent(Component component) { printComponentHeader(component); if (component.getClasses().size() == 0) { printNoStats(); printComponentFooter(component); return; } printStatistics(component); printSectionBreak(); printAbstractClasses(component); printSectionBreak(); printConcreteClasses(component); printSectionBreak(); printEfferents(component); printSectionBreak(); printAfferents(component); printComponentFooter(component); } protected void printAbstractClasses(Component unit) { printAbstractClassesHeader(); List<JavaClassUnit> members = new ArrayList<JavaClassUnit>(unit.getClasses()); Collections.sort(members); Iterator<JavaClassUnit> memberIter = members.iterator(); while (memberIter.hasNext()) { JavaClassUnit jClass = memberIter.next(); if (jClass.getJavaClass().isAbstract()) { printClassName(jClass); } } printAbstractClassesFooter(); } protected void printConcreteClasses(Component unit) { printConcreteClassesHeader(); List<JavaClassUnit> members = new ArrayList<JavaClassUnit>(unit.getClasses()); Collections.sort(members); Iterator<JavaClassUnit> memberIter = members.iterator(); while (memberIter.hasNext()) { JavaClassUnit concrete = (JavaClassUnit) memberIter.next(); if (!concrete.getJavaClass().isAbstract()) { printClassName(concrete); } } printConcreteClassesFooter(); } protected void printEfferents(Component unit) { printEfferentsHeader(); Collection<Component> efferents1 = unit.getEfferents(); List<Component> efferents = new ArrayList<Component>(efferents1); Collections.sort(efferents); Iterator<Component> efferentIter = efferents.iterator(); while (efferentIter.hasNext()) { printComponentName(efferentIter.next()); } if (efferents.size() == 0) { printEfferentsError(); } printEfferentsFooter(); } protected void printAfferents(Component unit) { printAfferentsHeader(); Collection<Component> afferents1 = unit.getAfferents(); List<Component> afferents = new ArrayList<Component>(afferents1); Collections.sort(afferents); Iterator<Component> afferentIter = afferents.iterator(); while (afferentIter.hasNext()) { printComponentName(afferentIter.next()); } if (afferents.size() == 0) { printAfferentsError(); } printAfferentsFooter(); } protected void printCycles(Collection<Component> units) { printCyclesHeader(); for (Component unit : units) { printCycle(unit); } printCyclesFooter(); } public void printCycle(JDependUnit unit) { if (!unit.getContainsCycle()) { return; } List<? extends JDependUnit> list = unit.collectCycle(); JDependUnit cycleUnit = (JDependUnit) list.get(list.size() - 1); String cycleUnitName = cycleUnit.getName(); int i = 0; Iterator<? extends JDependUnit> unitIter = list.iterator(); while (unitIter.hasNext()) { i++; JDependUnit pkg = unitIter.next(); if (i == 1) { printCycleHeader(pkg); } else { if (pkg.getName().equals(cycleUnitName)) { printCycleTarget(pkg); } else { printCycleContributor(pkg); } } } printCycleFooter(); } protected void printHeader(AnalysisResult inputData) { // do nothing } protected void printFooter() { // do nothing } protected void printComponentsHeader() { // do nothing } protected void printComponentsFooter() { // do nothing } protected void printNoStats() { } protected void printComponentHeader(Component unit) { } protected void printComponentFooter(Component unit) { // do nothing } protected void printStatistics(Component unit) { } protected void printClassName(JavaClassUnit jClass) { } protected void printComponentName(Component unit) { } protected void printAbstractClassesHeader() { } protected void printAbstractClassesFooter() { // do nothing } protected void printConcreteClassesHeader() { } protected void printConcreteClassesFooter() { // do nothing } protected void printEfferentsHeader() { } protected void printEfferentsFooter() { // do nothing } protected void printEfferentsError() { } protected void printAfferentsHeader() { } protected void printAfferentsFooter() { // do nothing } protected void printAfferentsError() { } protected void printCyclesHeader() { } protected void printCyclesFooter() { // do nothing } protected void printCycleHeader(Named unit) { } protected void printCycleTarget(Named unit) { } protected void printCycleContributor(Named unit) { } protected void printCycleFooter() { printSectionBreak(); } protected void printSummary(AnalysisResult inputData) { } protected void printSectionBreak() { } protected String tab() { return " "; } protected String tab(int n) { StringBuilder s = new StringBuilder(); for (int i = 0; i < n; i++) { s.append(tab()); } return s.toString(); } }