Skip to content

Commit b7b4012

Browse files
committed
Initial HTML report generation
1 parent 3bb8f4d commit b7b4012

File tree

7 files changed

+86
-17
lines changed

7 files changed

+86
-17
lines changed

src/main/java/com/manoelcampos/javadoc/coverage/CoverageDoclet.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,13 @@ public String getOutputDir() {
122122
/**
123123
* Gets a {@link PrintWriter} to export the documentation of a class or package.
124124
*
125-
* @param fileName the name of the file to export the documentation to
125+
* @param file the file to export the documentation to
126126
*/
127-
public PrintWriter getWriter(final String fileName) throws FileNotFoundException {
128-
final File file = getOutputFile(fileName);
127+
public PrintWriter getWriter(final File file) throws FileNotFoundException {
129128
return new PrintWriter(new OutputStreamWriter(new FileOutputStream(file)));
130129
}
131130

132-
private File getOutputFile(final String fileName) {
131+
public File getOutputFile(final String fileName) {
133132
final File dir = new File(getOutputDir());
134133
if (!dir.exists() && !dir.mkdirs()) {
135134
throw new RuntimeException("The directory '" + getOutputDir() + "' was not created due to unknown reason.");

src/main/java/com/manoelcampos/javadoc/coverage/ReportGenerator.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.manoelcampos.javadoc.coverage;
1717

18+
import com.manoelcampos.javadoc.coverage.exporter.HtmlDataExporter;
1819
import com.manoelcampos.javadoc.coverage.stats.*;
1920
import com.sun.javadoc.PackageDoc;
2021
import com.sun.javadoc.RootDoc;
@@ -30,12 +31,13 @@
3031
* @since 1.0.0
3132
*/
3233
public class ReportGenerator {
34+
public static final String JAVADOC_COVERAGE_HTML = "javadoc-coverage.html";
3335
private final JavaDocsStats stats;
3436
private final CoverageDoclet doclet;
3537

3638
public ReportGenerator(final CoverageDoclet doclet) {
37-
this.doclet = doclet;
3839
this.stats = new JavaDocsStats(doclet.getRootDoc());
40+
this.doclet = doclet;
3941
}
4042

4143
/**
@@ -51,6 +53,14 @@ public boolean start() {
5153
writer.flush();
5254
}
5355

56+
try {
57+
final File file = doclet.getOutputFile(JAVADOC_COVERAGE_HTML);
58+
new HtmlDataExporter(stats, doclet.getWriter(file)).build();
59+
System.out.printf("JavaDoc Coverage report saved to %s\n", file.getPath());
60+
} catch (FileNotFoundException e) {
61+
throw new RuntimeException(e);
62+
}
63+
5464
return true;
5565
}
5666

@@ -123,14 +133,13 @@ private void exportMembersDocStats(final PrintWriter writer, final MembersDocSta
123133
exportMembersDocStats(writer, membersDocStats, "");
124134
}
125135

126-
private void exportMembersDocStats(final PrintWriter writer, final MembersDocStats membersDocStats, String memberTypeFormat) {
136+
private void exportMembersDocStats(final PrintWriter writer, final MembersDocStats membersDocStats, final String memberTypeFormat) {
127137
if (membersDocStats.getMembersNumber() == 0 && !membersDocStats.isPrintIfNoMembers()) {
128138
return;
129139
}
130140

131-
memberTypeFormat = Utils.isStringEmpty(memberTypeFormat) ? "\t\t%-20s" : memberTypeFormat;
132-
133-
final String format = memberTypeFormat+" %6d Undocumented: %6d Documented: %6d (%.2f%%) \n";
141+
final String format = (Utils.isStringEmpty(memberTypeFormat) ? "\t\t%-20s" : memberTypeFormat) +
142+
" %6d Undocumented: %6d Documented: %6d (%.2f%%) \n";
134143
writer.printf(format,
135144
membersDocStats.getType()+":", membersDocStats.getMembersNumber(),
136145
membersDocStats.getUndocumentedMembers(),

src/main/java/com/manoelcampos/javadoc/coverage/Utils.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@
1515
*/
1616
package com.manoelcampos.javadoc.coverage;
1717

18-
import com.manoelcampos.javadoc.coverage.stats.MethodDocStats;
19-
2018
import java.io.File;
2119
import java.util.Arrays;
2220
import java.util.stream.DoubleStream;
23-
import java.util.stream.Stream;
2421

2522
/**
2623
* An utility class.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.manoelcampos.javadoc.coverage.exporter;
2+
3+
import com.manoelcampos.javadoc.coverage.stats.*;
4+
5+
import java.io.PrintWriter;
6+
7+
/**
8+
* Exports data to HTML format.
9+
*
10+
* @author Manoel Campos da Silva Filho
11+
* @since 1.0.0
12+
*/
13+
public class HtmlDataExporter {
14+
public static final String COLUMNS = "<td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td><td>%.2f%%</td>\n";
15+
private final JavaDocsStats stats;
16+
private final PrintWriter writer;
17+
18+
public HtmlDataExporter(final JavaDocsStats stats, final PrintWriter writer){
19+
this.writer = writer;
20+
this.stats = stats;
21+
}
22+
23+
public void build(){
24+
try{
25+
writer.println("<!DOCTYPE html>\n<html lang=en>");
26+
writer.println("<head>");
27+
writer.println(" <title>JavaDoc Coverage Report</title>");
28+
writer.println(" <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' integrity='sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u' crossorigin='anonymous'>\n");
29+
writer.println(" <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css' integrity='sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp' crossorigin='anonymous'>");
30+
writer.println(" <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js' integrity='sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa' crossorigin='anonymous'></script>");
31+
writer.println(" <meta content='width=device-width,initial-scale=1' name=viewport>");
32+
writer.println("</head>");
33+
writer.println("<body>");
34+
writer.println("<table>");
35+
writer.println("<tr>");
36+
writer.println("<th>Element Type</th><th>Name</th><th>Package</th><th>Count</th><th>Undocumented</th><th>Documented</th><th>Documented Percent</th>");
37+
writer.println("</tr>");
38+
39+
exportMembersDocStatsSummary(stats.getClassesDocStats());
40+
for (final ClassDocStats classDocStats : stats.getClassesDocStats().getClassesList()) {
41+
exportMembersDocStatsSummary(classDocStats)
42+
}
43+
44+
writer.println("</table>");
45+
writer.println("</body>");
46+
writer.flush();
47+
} finally {
48+
writer.close();
49+
}
50+
}
51+
52+
private <T extends DocStats & DocumentableMembers> void exportMembersDocStatsSummary(final T membersDocStats) {
53+
exportMembersDocStatsSummary(membersDocStats, "","");
54+
}
55+
56+
private <T extends DocStats & DocumentableMembers> void exportMembersDocStatsSummary(final T membersDocStats, final String name, final String pkg) {
57+
writer.println("<tr>");
58+
writer.printf(COLUMNS,
59+
membersDocStats.getType(),
60+
name, pkg,
61+
membersDocStats.getMembersNumber(),
62+
membersDocStats.getUndocumentedMembers(),
63+
membersDocStats.getDocumentedMembers(),
64+
membersDocStats.getDocumentedMembersPercent());
65+
writer.println("</tr>");
66+
}
67+
}

src/main/java/com/manoelcampos/javadoc/coverage/stats/ClassMembersDocStats.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
*/
1616
package com.manoelcampos.javadoc.coverage.stats;
1717

18-
import com.manoelcampos.javadoc.coverage.Utils;
1918
import com.sun.javadoc.Doc;
20-
import com.sun.javadoc.MemberDoc;
2119

2220
import java.util.Arrays;
2321
import java.util.Objects;

src/main/java/com/manoelcampos/javadoc/coverage/stats/MembersDocStats.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ public final boolean isPrintIfNoMembers() {
5252
return this.printIfNoMembers;
5353
}
5454

55-
final void enablePrintIfNoMembers() {
55+
public final void enablePrintIfNoMembers() {
5656
this.printIfNoMembers = true;
5757
}
5858

59-
final void disablePrintIfNoMembers() {
59+
public final void disablePrintIfNoMembers() {
6060
this.printIfNoMembers = false;
6161
}
6262
}

src/main/java/com/manoelcampos/javadoc/coverage/stats/MethodTagsDocStats.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.manoelcampos.javadoc.coverage.stats;
1717

18-
import com.manoelcampos.javadoc.coverage.Utils;
1918
import com.sun.javadoc.ExecutableMemberDoc;
2019
import com.sun.javadoc.Tag;
2120

0 commit comments

Comments
 (0)