public void renderDocument()

in src/main/java/org/apache/maven/plugins/site/render/ReportDocumentRenderer.java [171:258]


    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
        String outputName = "";
        List<MultiPageSubSink> sinks = multiPageSinkFactory.sinks();

        log.debug("Multipage report: " + sinks.size() + " subreports");

        for (MultiPageSubSink mySink : sinks) {
            outputName = mySink.getOutputName();
            log.debug("  Rendering " + outputName);

            // Create directories if necessary
            if (!mySink.getOutputDir().exists()) {
                mySink.getOutputDir().mkdirs();
            }

            File outputFile = new File(mySink.getOutputDir(), outputName);

            try (Writer out = WriterFactory.newWriter(outputFile, siteRenderingContext.getOutputEncoding())) {
                siteRenderer.mergeDocumentIntoSite(out, mySink, siteRenderingContext);
                mySink.close();
                mySink = null;
            } finally {
                if (mySink != null) {
                    mySink.close();
                }
            }
        }
    }