in src/main/java/org/apache/maven/plugins/site/render/ReportDocumentRenderer.java [172:255]
public void renderDocument(Writer writer, SiteRenderer siteRenderer, SiteRenderingContext siteRenderingContext)
throws RendererException, IOException {
Locale locale = siteRenderingContext.getLocale();
String localReportName = report.getName(locale);
String msg = "Generating \"" + buffer().strong(localReportName) + "\" report";
// CHECKSTYLE_OFF: MagicNumber
log.info(
reportMojoInfo == null
? msg
: (StringUtils.rightPad(msg, 40)
+ buffer().strong(" --- ").mojo(reportMojoInfo)));
// CHECKSTYLE_ON: MagicNumber
// main sink
SiteRendererSink mainSink = new SiteRendererSink(docRenderingContext);
// sink factory, for multi-page reports that need sub-sinks
MultiPageSinkFactory multiPageSinkFactory = new MultiPageSinkFactory(report, docRenderingContext);
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
try {
if (classLoader != null) {
Thread.currentThread().setContextClassLoader(classLoader);
}
if (report instanceof MavenMultiPageReport) {
// extended multi-page API
((MavenMultiPageReport) report).generate(mainSink, multiPageSinkFactory, locale);
} else {
// old single-page-only API
report.generate(mainSink, locale);
}
} catch (MavenReportException e) {
String report = (reportMojoInfo == null) ? ('"' + localReportName + '"') : reportMojoInfo;
throw new RendererException("Error generating " + report + " report", e);
} catch (RuntimeException re) {
// MSITE-836: if report generation throws a RuntimeException, transform to RendererException
String report = (reportMojoInfo == null) ? ('"' + localReportName + '"') : reportMojoInfo;
throw new RendererException("Error generating " + report + " report", re);
} catch (LinkageError e) {
String report = (reportMojoInfo == null) ? ('"' + localReportName + '"') : reportMojoInfo;
log.warn(
"An issue has occurred with " + report + " report, skipping LinkageError " + e.getMessage()
+ ", please report an issue to Maven dev team.",
e);
} finally {
if (classLoader != null) {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
mainSink.close();
}
if (report.isExternalReport()) {
// external reports are rendered from their own: no Doxia site rendering needed
return;
}
// render main sink document content
siteRenderer.mergeDocumentIntoSite(writer, mainSink, siteRenderingContext);
// render sub-sinks, eventually created by multi-page reports
List<MultiPageSubSink> sinks = multiPageSinkFactory.sinks();
log.debug("Multipage report: " + sinks.size() + " subreports");
for (MultiPageSubSink mySink : sinks) {
String outputName = mySink.getOutputName();
log.debug(" Rendering " + outputName);
// Create directories if necessary
if (!mySink.getOutputDirectory().exists()) {
mySink.getOutputDirectory().mkdirs();
}
File outputFile = new File(mySink.getOutputDirectory(), outputName);
try (Writer out = new OutputStreamWriter(
Files.newOutputStream(outputFile.toPath()), siteRenderingContext.getOutputEncoding())) {
siteRenderer.mergeDocumentIntoSite(out, mySink, siteRenderingContext);
} finally {
mySink.close();
}
}
}