Skip to content

Commit 2154d23

Browse files
#115 Rendering bubble charts inline
Rendering bubble chars inline in both the HTML report and Maven report
1 parent d268cb5 commit 2154d23

File tree

3 files changed

+36
-119
lines changed

3 files changed

+36
-119
lines changed

refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstMavenReport.java

Lines changed: 19 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package org.hjug.mavenreport;
22

3-
import java.io.BufferedWriter;
43
import java.io.File;
5-
import java.io.FileWriter;
6-
import java.io.IOException;
74
import java.nio.file.Paths;
85
import java.time.Instant;
96
import java.time.ZoneId;
@@ -147,20 +144,6 @@ public void executeReport(Locale locale) throws MavenReportException {
147144
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_START}, googleChartImport);
148145
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
149146

150-
SinkEventAttributeSet godClassJavascript = new SinkEventAttributeSet();
151-
godClassJavascript.addAttribute(SinkEventAttributes.TYPE, "text/javascript");
152-
godClassJavascript.addAttribute(SinkEventAttributes.SRC, "./godClassChart.js");
153-
154-
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_START}, godClassJavascript);
155-
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
156-
157-
SinkEventAttributeSet cboJavascript = new SinkEventAttributeSet();
158-
cboJavascript.addAttribute(SinkEventAttributes.TYPE, "text/javascript");
159-
cboJavascript.addAttribute(SinkEventAttributes.SRC, "./cboChart.js");
160-
161-
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_START}, cboJavascript);
162-
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
163-
164147
SinkEventAttributeSet d3js = new SinkEventAttributeSet();
165148
d3js.addAttribute(SinkEventAttributes.TYPE, "text/javascript");
166149
d3js.addAttribute(SinkEventAttributes.SRC, "https://d3js.org/d3.v5.min.js");
@@ -289,13 +272,19 @@ public void executeReport(Locale locale) throws MavenReportException {
289272
mainSink.section2_();
290273
mainSink.division_();
291274

292-
writeGodClassGchartJs(rankedGodClassDisharmonies, maxGodClassPriority - 1);
275+
String godClassScript = writeGodClassGchartJs(rankedGodClassDisharmonies, maxGodClassPriority - 1);
293276
SinkEventAttributeSet seriesChartDiv = new SinkEventAttributeSet();
294277
seriesChartDiv.addAttribute(SinkEventAttributes.ID, "series_chart_div");
295278
seriesChartDiv.addAttribute(SinkEventAttributes.ALIGN, "center");
296279
mainSink.division(seriesChartDiv);
297280
mainSink.division_();
298281

282+
SinkEventAttributeSet godClassJavascript = new SinkEventAttributeSet();
283+
godClassJavascript.addAttribute(SinkEventAttributes.TYPE, "text/javascript");
284+
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_START}, godClassJavascript);
285+
mainSink.rawText(godClassScript);
286+
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
287+
299288
renderGitHubButtons(mainSink);
300289

301290
String legendHeading = "God Class Chart Legend:";
@@ -399,7 +388,14 @@ public void executeReport(Locale locale) throws MavenReportException {
399388
seriesChartDiv.addAttribute(SinkEventAttributes.ALIGN, "center");
400389
mainSink.division(seriesChartDiv);
401390
mainSink.division_();
402-
writeGCBOGchartJs(rankedCBODisharmonies, maxCboPriority - 1);
391+
392+
String cboScript = writeGCBOGchartJs(rankedCBODisharmonies, maxCboPriority - 1);
393+
394+
SinkEventAttributeSet cboJavascript = new SinkEventAttributeSet();
395+
cboJavascript.addAttribute(SinkEventAttributes.TYPE, "text/javascript");
396+
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_START}, cboJavascript);
397+
mainSink.rawText(cboScript);
398+
mainSink.unknown(script, new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
403399

404400
renderGitHubButtons(mainSink);
405401

@@ -775,63 +771,22 @@ private static void renderGitHubButton(
775771
mainSink.unknown("a", new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
776772
}
777773

778-
// TODO: Move to another class to allow use by Gradle plugin
779-
void writeGodClassGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority) {
774+
String writeGodClassGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority) {
780775
GraphDataGenerator graphDataGenerator = new GraphDataGenerator();
781776
String scriptStart = graphDataGenerator.getGodClassScriptStart();
782777
String bubbleChartData = graphDataGenerator.generateGodClassBubbleChartData(rankedDisharmonies, maxPriority);
783778
String scriptEnd = graphDataGenerator.getGodClassScriptEnd();
784779

785-
String javascriptCode = scriptStart + bubbleChartData + scriptEnd;
786-
787-
String reportOutputDirectory = project.getModel().getReporting().getOutputDirectory();
788-
File reportOutputDir = new File(reportOutputDirectory);
789-
if (!reportOutputDir.exists()) {
790-
reportOutputDir.mkdirs();
791-
}
792-
String pathname = reportOutputDirectory + File.separator + "godClassChart.js";
793-
794-
File scriptFile = new File(pathname);
795-
try {
796-
scriptFile.createNewFile();
797-
} catch (IOException e) {
798-
log.error("Failure creating God Class chart script file", e);
799-
}
800-
801-
try (BufferedWriter writer = new BufferedWriter(new FileWriter(scriptFile))) {
802-
writer.write(javascriptCode);
803-
} catch (IOException e) {
804-
log.error("Error writing chart script file", e);
805-
}
780+
return scriptStart + bubbleChartData + scriptEnd;
806781
}
807782

808-
void writeGCBOGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority) {
783+
String writeGCBOGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority) {
809784
GraphDataGenerator graphDataGenerator = new GraphDataGenerator();
810785
String scriptStart = graphDataGenerator.getCBOScriptStart();
811786
String bubbleChartData = graphDataGenerator.generateCBOBubbleChartData(rankedDisharmonies, maxPriority);
812787
String scriptEnd = graphDataGenerator.getCBOScriptEnd();
813788

814-
String javascriptCode = scriptStart + bubbleChartData + scriptEnd;
815-
816-
String reportOutputDirectory = project.getModel().getReporting().getOutputDirectory();
817-
File reportOutputDir = new File(reportOutputDirectory);
818-
if (!reportOutputDir.exists()) {
819-
reportOutputDir.mkdirs();
820-
}
821-
String pathname = reportOutputDirectory + File.separator + "cboChart.js";
822-
823-
File scriptFile = new File(pathname);
824-
try {
825-
scriptFile.createNewFile();
826-
} catch (IOException e) {
827-
log.error("Failure creating CBO chart script file", e);
828-
}
829-
830-
try (BufferedWriter writer = new BufferedWriter(new FileWriter(scriptFile))) {
831-
writer.write(javascriptCode);
832-
} catch (IOException e) {
833-
log.error("Error writing CBO chart script file", e);
834-
}
789+
return scriptStart + bubbleChartData + scriptEnd;
835790
}
836791

837792
void renderCycleImage(Graph<String, DefaultWeightedEdge> classGraph, RankedCycle cycle, Sink mainSink) {

report/src/main/java/org/hjug/refactorfirst/report/HtmlReport.java

Lines changed: 11 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package org.hjug.refactorfirst.report;
22

3-
import java.io.BufferedWriter;
4-
import java.io.File;
5-
import java.io.FileWriter;
6-
import java.io.IOException;
73
import java.util.List;
84
import java.util.Locale;
95
import lombok.extern.slf4j.Slf4j;
@@ -78,64 +74,25 @@ void renderGithubButtons(StringBuilder stringBuilder) {
7874
stringBuilder.append("</div>");
7975
}
8076

81-
// TODO: Move to another class to allow use by Gradle plugin
8277
@Override
83-
void writeGodClassGchartJs(
78+
String writeGodClassGchartJs(
8479
List<RankedDisharmony> rankedDisharmonies, int maxPriority, String reportOutputDirectory) {
8580
GraphDataGenerator graphDataGenerator = new GraphDataGenerator();
8681
String scriptStart = graphDataGenerator.getGodClassScriptStart();
8782
String bubbleChartData = graphDataGenerator.generateGodClassBubbleChartData(rankedDisharmonies, maxPriority);
8883
String scriptEnd = graphDataGenerator.getGodClassScriptEnd();
8984

90-
String javascriptCode = scriptStart + bubbleChartData + scriptEnd;
91-
92-
File reportOutputDir = new File(reportOutputDirectory);
93-
if (!reportOutputDir.exists()) {
94-
reportOutputDir.mkdirs();
95-
}
96-
String pathname = reportOutputDirectory + File.separator + "gchart.js";
97-
98-
File scriptFile = new File(pathname);
99-
try {
100-
scriptFile.createNewFile();
101-
} catch (IOException e) {
102-
log.error("Failure creating God Class chart script file", e);
103-
}
104-
105-
try (BufferedWriter writer = new BufferedWriter(new FileWriter(scriptFile))) {
106-
writer.write(javascriptCode);
107-
} catch (IOException e) {
108-
log.error("Error writing chart script file", e);
109-
}
85+
return scriptStart + bubbleChartData + scriptEnd;
11086
}
11187

11288
@Override
113-
void writeGCBOGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority, String reportOutputDirectory) {
89+
String writeGCBOGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority, String reportOutputDirectory) {
11490
GraphDataGenerator graphDataGenerator = new GraphDataGenerator();
11591
String scriptStart = graphDataGenerator.getCBOScriptStart();
11692
String bubbleChartData = graphDataGenerator.generateCBOBubbleChartData(rankedDisharmonies, maxPriority);
11793
String scriptEnd = graphDataGenerator.getCBOScriptEnd();
11894

119-
String javascriptCode = scriptStart + bubbleChartData + scriptEnd;
120-
121-
File reportOutputDir = new File(reportOutputDirectory);
122-
if (!reportOutputDir.exists()) {
123-
reportOutputDir.mkdirs();
124-
}
125-
String pathname = reportOutputDirectory + File.separator + "gchart2.js";
126-
127-
File scriptFile = new File(pathname);
128-
try {
129-
scriptFile.createNewFile();
130-
} catch (IOException e) {
131-
log.error("Failure creating CBO chart script file", e);
132-
}
133-
134-
try (BufferedWriter writer = new BufferedWriter(new FileWriter(scriptFile))) {
135-
writer.write(javascriptCode);
136-
} catch (IOException e) {
137-
log.error("Error writing CBO chart script file", e);
138-
}
95+
return scriptStart + bubbleChartData + scriptEnd;
13996
}
14097

14198
public String getName(Locale locale) {
@@ -155,8 +112,10 @@ void renderGodClassChart(
155112
List<RankedDisharmony> rankedGodClassDisharmonies,
156113
int maxGodClassPriority,
157114
StringBuilder stringBuilder) {
158-
writeGodClassGchartJs(rankedGodClassDisharmonies, maxGodClassPriority - 1, outputDirectory);
159-
stringBuilder.append("<div id=\"series_chart_div\" align=\"center\"></div>\n");
115+
String godClassChart =
116+
writeGodClassGchartJs(rankedGodClassDisharmonies, maxGodClassPriority - 1, outputDirectory);
117+
stringBuilder.append(
118+
"<div id=\"series_chart_div\" align=\"center\"><script>" + godClassChart + "</script></div>\n");
160119
renderGithubButtons(stringBuilder);
161120
stringBuilder.append(GOD_CLASS_CHART_LEGEND);
162121
}
@@ -167,8 +126,9 @@ void renderCBOChart(
167126
List<RankedDisharmony> rankedCBODisharmonies,
168127
int maxCboPriority,
169128
StringBuilder stringBuilder) {
170-
writeGCBOGchartJs(rankedCBODisharmonies, maxCboPriority - 1, outputDirectory);
171-
stringBuilder.append("<div id=\"series_chart_div_2\" align=\"center\"></div>\n");
129+
String cboChart = writeGCBOGchartJs(rankedCBODisharmonies, maxCboPriority - 1, outputDirectory);
130+
stringBuilder.append(
131+
"<div id=\"series_chart_div_2\" align=\"center\"><script>" + cboChart + "</script></div>\n");
172132
renderGithubButtons(stringBuilder);
173133
stringBuilder.append(COUPLING_BETWEEN_OBJECT_CHART_LEGEND);
174134
}

report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -560,13 +560,15 @@ void renderGodClassChart(
560560
// empty on purpose
561561
}
562562

563-
void writeGodClassGchartJs(
563+
String writeGodClassGchartJs(
564564
List<RankedDisharmony> rankedDisharmonies, int maxPriority, String reportOutputDirectory) {
565-
// empty on purpose
565+
// return empty string on purpose
566+
return "";
566567
}
567568

568-
void writeGCBOGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority, String reportOutputDirectory) {
569-
// empty on purpose
569+
String writeGCBOGchartJs(List<RankedDisharmony> rankedDisharmonies, int maxPriority, String reportOutputDirectory) {
570+
// return empty string on purpose
571+
return "";
570572
}
571573

572574
void renderCBOChart(

0 commit comments

Comments
 (0)