private void generateMavenReport()

in src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java [825:925]


    private void generateMavenReport(MavenReportExecution reportExecution, Locale locale)
            throws IOException, MojoExecutionException {
        MavenReport report = reportExecution.getMavenReport();

        String localReportName = report.getName(locale);

        if (!reportExecution.canGenerateReport()) {
            getLog().info("Skipped \"" + localReportName + "\" report.");
            getLog().debug("canGenerateReport() was false.");

            return;
        }

        if (report.isExternalReport()) {
            getLog().info("Skipped external \"" + localReportName + "\" report (not supported by pdf plugin).");
            getLog().debug("isExternalReport() was false.");

            return;
        }

        for (final MavenReport generatedReport : getGeneratedMavenReports(locale)) {
            if (report.getName(locale).equals(generatedReport.getName(locale))) {
                if (getLog().isDebugEnabled()) {
                    getLog().debug(report.getName(locale) + " was already generated.");
                }
                return;
            }
        }

        File outDir = new File(getGeneratedSiteDirectoryTmp(), "xdoc");
        if (!locale.getLanguage().equals(defaultLocale.getLanguage())) {
            outDir = new File(new File(getGeneratedSiteDirectoryTmp(), locale.getLanguage()), "xdoc");
        }
        outDir.mkdirs();

        File generatedReport = new File(outDir, report.getOutputName() + ".xml");

        if (siteDirectory.exists()) {
            String excludes = getDefaultExcludesWithLocales(getAvailableLocales(), getDefaultLocale());
            List<String> files =
                    FileUtils.getFileNames(siteDirectory, "*/" + report.getOutputName() + ".*", excludes, false);
            if (!locale.getLanguage().equals(defaultLocale.getLanguage())) {
                files = FileUtils.getFileNames(
                        new File(siteDirectory, locale.getLanguage()),
                        "*/" + report.getOutputName() + ".*",
                        excludes,
                        false);
            }

            if (files.size() != 0) {
                String displayLanguage = locale.getDisplayLanguage(Locale.ENGLISH);

                if (getLog().isInfoEnabled()) {
                    getLog().info("Skipped \"" + report.getName(locale) + "\" report, file \""
                            + report.getOutputName() + "\" already exists for the " + displayLanguage
                            + " version.");
                }

                return;
            }
        }

        if (getLog().isInfoEnabled()) {
            getLog().info("Generating \"" + localReportName + "\" report.");
        }

        // The report will eventually generate output by itself, so we set its output directory anyway.
        report.setReportOutputDirectory(outDir);

        StringWriter sw = new StringWriter();

        PdfXdocSink pdfXdocSink = null;
        try {
            pdfXdocSink = new PdfXdocSink(sw);
            renderReportToSink(reportExecution, locale, pdfXdocSink);
        } catch (MavenReportException e) {
            String goal = reportExecution.getPlugin().getArtifactId()
                    + ':'
                    + reportExecution.getPlugin().getVersion()
                    + ':'
                    + reportExecution.getGoal();
            throw new MojoExecutionException("Error generating " + goal + " report", e);
        } finally {
            if (pdfXdocSink != null) {
                pdfXdocSink.close();
            }
        }

        if (getLog().isDebugEnabled()) {
            getLog().debug("Writing generated xdoc to " + generatedReport);
        }
        writeGeneratedReport(sw.toString(), generatedReport);

        // keep generated report xdoc only if it is valid
        if (isValidGeneratedReportXdoc(
                reportExecution.getPlugin().getId() + ':' + reportExecution.getGoal(),
                generatedReport,
                localReportName)) {
            getGeneratedMavenReports(locale).add(report);
        }
    }