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);
}
}