package jdepend.xmlui;
import java.io.*;
import java.util.*;
import java.text.NumberFormat;
import jdepend.framework.JavaClass;
import jdepend.framework.JavaPackage;
/**
* The <code>JDepend</code> class analyzes directories of Java class files,
* generates metrics for each Java package, and reports the metrics in an XML
* format.
*
* @author <b>Mike Clark</b>
* @author Clarkware Consulting, Inc.
*/
public class JDepend extends jdepend.textui.JDepend {
/**
* Constructs a <code>JDepend</code> instance using standard output.
*/
public JDepend() {
this(new PrintWriter(System.out));
}
/**
* Constructs a <code>JDepend</code> instance with the specified writer.
*
* @param writer Writer.
*/
public JDepend(PrintWriter writer) {
super(writer);
formatter = NumberFormat.getInstance(Locale.ENGLISH);
formatter.setMaximumFractionDigits(2);
}
protected void printHeader() {
getWriter().println("<?xml version=\"1.0\"?>");
getWriter().println("<JDepend>");
}
protected void printFooter() {
getWriter().println("</JDepend>");
}
protected void printPackagesHeader() {
getWriter().println(tab() + "<Packages>");
}
protected void printPackagesFooter() {
getWriter().println(tab() + "</Packages>");
}
protected void printPackageHeader(JavaPackage jPackage) {
printSectionBreak();
getWriter().println(
tab(2) + "<Package name=\"" + jPackage.getName() + "\">");
}
protected void printPackageFooter(JavaPackage jPackage) {
getWriter().println(tab(2) + "</Package>");
}
protected void printNoStats() {
getWriter().println(
tab(3) + "<error>No stats available: "
+ "package referenced, but not analyzed.</error>");
}
protected void printStatistics(JavaPackage jPackage) {
getWriter().println(tab(3) + "<Stats>");
getWriter().println(
tab(4) + "<TotalClasses>" + jPackage.getClassCount()
+ "</TotalClasses>");
getWriter().println(
tab(4) + "<ConcreteClasses>" + jPackage.getConcreteClassCount()
+ "</ConcreteClasses>");
getWriter().println(
tab(4) + "<AbstractClasses>" + jPackage.getAbstractClassCount()
+ "</AbstractClasses>");
getWriter().println(
tab(4) + "<Ca>" + jPackage.afferentCoupling() + "</Ca>");
getWriter().println(
tab(4) + "<Ce>" + jPackage.efferentCoupling() + "</Ce>");
getWriter().println(
tab(4) + "<A>" + toFormattedString(jPackage.abstractness())
+ "</A>");
getWriter().println(
tab(4) + "<I>" + toFormattedString(jPackage.instability())
+ "</I>");
getWriter().println(
tab(4) + "<D>" + toFormattedString(jPackage.distance())
+ "</D>");
getWriter().println(tab(4) + "<V>" + jPackage.getVolatility() + "</V>");
getWriter().println(tab(3) + "</Stats>");
}
protected void printClassName(JavaClass jClass) {
getWriter().println(
tab(4) + "<Class sourceFile=\"" + jClass.getSourceFile()
+ "\">");
getWriter().println(tab(5) + jClass.getName());
getWriter().println(tab(4) + "</Class>");
}
protected void printPackageName(JavaPackage jPackage) {
getWriter().println(
tab(4) + "<Package>" + jPackage.getName() + "</Package>");
}
protected void printAbstractClassesHeader() {
getWriter().println(tab(3) + "<AbstractClasses>");
}
protected void printAbstractClassesFooter() {
getWriter().println(tab(3) + "</AbstractClasses>");
}
protected void printConcreteClassesHeader() {
getWriter().println(tab(3) + "<ConcreteClasses>");
}
protected void printConcreteClassesFooter() {
getWriter().println(tab(3) + "</ConcreteClasses>");
}
protected void printEfferentsHeader() {
getWriter().println(tab(3) + "<DependsUpon>");
}
protected void printEfferentsFooter() {
getWriter().println(tab(3) + "</DependsUpon>");
}
protected void printEfferentsError() {
// do nothing
}
protected void printAfferentsHeader() {
getWriter().println(tab(3) + "<UsedBy>");
}
protected void printAfferentsFooter() {
getWriter().println(tab(3) + "</UsedBy>");
}
protected void printAfferentsError() {
// do nothing
}
protected void printCyclesHeader() {
printSectionBreak();
getWriter().println(tab() + "<Cycles>");
}
protected void printCyclesFooter() {
getWriter().println(tab() + "</Cycles>");
}
protected void printCycleHeader(JavaPackage jPackage) {
getWriter().println(
tab(2) + "<Package Name=\"" + jPackage.getName() + "\">");
}
protected void printCycleFooter() {
getWriter().println(tab(2) + "</Package>");
printSectionBreak();
}
protected void printCycleTarget(JavaPackage jPackage) {
printCycleContributor(jPackage);
}
protected void printCycleContributor(JavaPackage jPackage) {
getWriter().println(
tab(3) + "<Package>" + jPackage.getName() + "</Package>");
}
protected void printSummary(Collection packages) {
// do nothing
}
/**
* Main.
*/
public static void main(String args[]) {
new JDepend().instanceMain(args);
}
}