package jdepend.client.report.way.textui;
import java.util.Iterator;
import jdepend.client.report.util.ReportConstant;
import jdepend.core.domain.WisdomAnalysisResult;
import jdepend.framework.exception.JDependException;
import jdepend.framework.util.MetricsFormat;
import jdepend.metadata.Named;
import jdepend.model.Component;
import jdepend.model.JDependUnit;
import jdepend.model.JavaClassUnit;
import jdepend.model.MetricsMgr;
import jdepend.model.result.AnalysisResult;
public final class TextSummaryPrinter extends SummaryPrinter {
public TextSummaryPrinter() {
super();
}
@Override
protected void printHeader(AnalysisResult result) {
getWriter().println(result);
// 建议
try {
StringBuilder advise = new WisdomAnalysisResult(result).getAdvise();
if (advise != null && advise.length() > 0) {
getWriter().println(advise);
}
} catch (JDependException e) {
e.printStackTrace();
}
}
@Override
protected void printNoStats() {
getWriter().println("No stats available: JDependUnit referenced, but not analyzed.");
}
@Override
protected void printComponentHeader(Component unit) {
getWriter().println("\n--------------------------------------------------");
getWriter().println("# UnitName: " + unit.getName());
if (unit instanceof Component) {
Component component = (Component) unit;
if (component.isDefinedComponentLevel()) {
getWriter().println("# Layer: " + component.getLayerDesc());
}
if (component.getAreaComponent() != null) {
getWriter().println("# AreaComponent: " + component.getAreaComponent().getName());
}
}
getWriter().println("--------------------------------------------------");
}
@Override
protected void printStatistics(Component unit) {
getWriter().println("\nStats:");
getWriter().println(tab() + "isInner: " + unit.isInner());
getWriter().println(tab() + "TotalClasses: " + unit.getClassCount());
getWriter().println(tab() + "ConcreteClasses: " + unit.getConcreteClassCount());
getWriter().println(tab() + "AbstractClasses: " + unit.getAbstractClassCount());
getWriter().println(tab() + "TotalLineCount: " + unit.getLineCount());
getWriter().println("");
getWriter().println(tab() + "Ca: " + unit.getAfferentCoupling());
getWriter().println(tab() + "Ce: " + unit.getEfferentCoupling());
getWriter().println("");
getWriter().println(tab() + "A: " + MetricsFormat.toFormattedMetrics(unit.getAbstractness()));
getWriter().println(tab() + "I: " + MetricsFormat.toFormattedMetrics(unit.getStability()));
getWriter().println(tab() + "D: " + MetricsFormat.toFormattedMetrics(unit.getDistance()));
getWriter().println(tab() + "Coupling: " + MetricsFormat.toFormattedMetrics(unit.getCoupling()));
getWriter().println(tab() + "Cohesion: " + MetricsFormat.toFormattedMetrics(unit.getCohesion()));
getWriter().println(tab() + "Balance: " + MetricsFormat.toFormattedMetrics(unit.getBalance()));
}
@Override
protected void printClassName(JavaClassUnit jClass) {
getWriter().println(tab() + jClass.getName());
}
@Override
protected void printComponentName(Component unit) {
getWriter().println(tab() + unit.getName());
}
@Override
protected void printAbstractClassesHeader() {
getWriter().println("AbstractClasses:");
}
@Override
protected void printConcreteClassesHeader() {
getWriter().println("ConcreteClasses:");
}
@Override
protected void printEfferentsHeader() {
getWriter().println("DependsUpon:");
}
@Override
protected void printEfferentsError() {
getWriter().println(tab() + "Not dependent on any JDependUnits.");
}
@Override
protected void printAfferentsHeader() {
getWriter().println("UsedBy:");
}
@Override
protected void printAfferentsError() {
getWriter().println(tab() + "Not used by any JDependUnits.");
}
@Override
protected void printCyclesHeader() {
printSectionBreak();
getWriter().println("\n--------------------------------------------------");
getWriter().println("# DependencyCycles:");
getWriter().println("--------------------------------------------------\n");
}
@Override
protected void printCycleHeader(Named unit) {
getWriter().println(unit.getName());
getWriter().println(tab() + "|");
}
@Override
protected void printCycleTarget(Named unit) {
getWriter().println(tab() + "|-> " + unit.getName());
}
@Override
protected void printCycleContributor(Named unit) {
getWriter().println(tab() + "| " + unit.getName());
}
@Override
protected void printCycleFooter() {
printSectionBreak();
}
@Override
protected void printSummary(AnalysisResult inputData) {
getWriter().println("\n--------------------------------------------------");
getWriter().println("# Summary:");
getWriter().println("--------------------------------------------------\n");
int maxNameLength = 0;
for (JDependUnit unit : inputData.getComponents()) {
if (maxNameLength < unit.getName().length()) {
maxNameLength = unit.getName().length();
}
}
getWriter().print(ReportConstant.Name + this.calBlank(ReportConstant.Name.length(), maxNameLength) + " ");
getWriter().print(ReportConstant.LC + " ");
getWriter().print(ReportConstant.CN + " ");
getWriter().print(ReportConstant.CC + " ");
getWriter().print(ReportConstant.AC + " ");
getWriter().print(ReportConstant.Ca + " ");
getWriter().print(ReportConstant.Ce + " ");
getWriter().print(ReportConstant.A + " ");
getWriter().print(ReportConstant.I + " ");
getWriter().print(ReportConstant.D + " ");
getWriter().print(ReportConstant.Coupling + " ");
getWriter().print(ReportConstant.Cohesion + " ");
getWriter().print(ReportConstant.Balance + " ");
getWriter().print(ReportConstant.Cycle);
getWriter().println(":\n");
Object[][] data = new Object[inputData.getComponents().size()][15];
Object[] row = new Object[15];
int rowCount = 0;
Iterator<Component> i = inputData.getComponents().iterator();
while (i.hasNext()) {
JDependUnit unit = i.next();
row[0] = unit.getName();
row[1] = unit.getLineCount();
row[2] = unit.getClassCount();
row[3] = unit.getAbstractClassCount();
row[4] = unit.getConcreteClassCount();
row[5] = unit.getAfferentCoupling();
row[6] = unit.getEfferentCoupling();
row[7] = unit.getAbstractness();
row[8] = unit.getStability();
row[9] = unit.getDistance();
row[10] = unit.getCoupling();
row[11] = unit.getCohesion();
row[12] = unit.getBalance();
row[13] = 0F;
if (unit.getContainsCycle()) {
row[14] = MetricsMgr.Cyclic;
} else {
row[14] = MetricsMgr.NoValue;
}
for (int col = 0; col < row.length; col++) {
data[rowCount][col] = row[col];
if (col == 0) {
getWriter().print(row[col] + this.calBlank(((String) row[col]).length(), maxNameLength) + " ");
} else if (row[col] instanceof Float) {
getWriter().print(MetricsFormat.toFormattedMetrics((Float) row[col]) + " ");
} else {
getWriter().print(row[col] + " ");
}
}
rowCount++;
getWriter().print("\n");
}
getWriter().print(
inputData.getSummary().getName()
+ this.calBlank(inputData.getSummary().getName().length(), maxNameLength) + " ");
getWriter().print(inputData.getSummary().getLineCount() + " ");
getWriter().print(inputData.getSummary().getClassCount() + " ");
getWriter().print(inputData.getSummary().getConcreteClassCount() + " ");
getWriter().print(inputData.getSummary().getAbstractClassCount() + " ");
getWriter().print(inputData.getSummary().getAbstractClassCount() + " ");
getWriter().print(inputData.getSummary().getEfferentCoupling() + " ");
getWriter().print(MetricsFormat.toFormattedMetrics(inputData.getSummary().getAbstractness()) + " ");
getWriter().print(MetricsFormat.toFormattedMetrics(inputData.getSummary().getStability()) + " ");
getWriter().print(MetricsFormat.toFormattedMetrics(inputData.getSummary().getDistance()) + " ");
getWriter().print(MetricsFormat.toFormattedMetrics(inputData.getSummary().getCoupling()) + " ");
getWriter().print(MetricsFormat.toFormattedMetrics(inputData.getSummary().getCohesion()) + " ");
getWriter().print(MetricsFormat.toFormattedMetrics(inputData.getSummary().getBalance()) + " ");
getWriter().print("\n");
}
private String calBlank(int currentLength, int maxLength) {
StringBuilder blank = new StringBuilder();
for (int i = currentLength; i < maxLength; i++) {
blank.append(" ");
}
return blank.toString();
}
protected void printSectionBreak() {
getWriter().println("");
}
}