diff --git a/maven-plugin-report-plugin/pom.xml b/maven-plugin-report-plugin/pom.xml index 7e87d5dd..d5425d28 100644 --- a/maven-plugin-report-plugin/pom.xml +++ b/maven-plugin-report-plugin/pom.xml @@ -100,6 +100,18 @@ org.codehaus.plexus plexus-utils + + + org.codehaus.plexus + plexus-i18n + 1.0-beta-10 + + + org.codehaus.plexus + plexus-component-api + + + diff --git a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java index 3816b4c5..525e22e9 100644 --- a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java +++ b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java @@ -23,13 +23,12 @@ import java.io.Reader; import java.nio.file.Files; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; -import java.util.ResourceBundle; +import org.apache.maven.doxia.markup.Markup; import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.tools.SiteTool; import org.apache.maven.model.Plugin; @@ -56,6 +55,7 @@ import org.apache.maven.tools.plugin.generator.PluginXdocGenerator; import org.apache.maven.tools.plugin.util.PluginUtils; import org.codehaus.plexus.configuration.PlexusConfigurationException; +import org.codehaus.plexus.i18n.I18N; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.XmlStreamReader; import org.codehaus.plexus.util.xml.Xpp3Dom; @@ -120,6 +120,12 @@ public class PluginReport extends AbstractMavenReport { @Component private RuntimeInformation rtInfo; + /** + * Internationalization component. + */ + @Component + private I18N i18n; + /** * Path to enhanced plugin descriptor to generate the report from (must contain some XHTML values) * @@ -175,7 +181,7 @@ protected void executeReport(Locale locale) throws MavenReportException { // Write the overview PluginOverviewRenderer r = new PluginOverviewRenderer( - getProject(), requirementsHistories, getSink(), pluginDescriptor, locale, hasExtensionsToLoad); + getSink(), i18n, locale, getProject(), requirementsHistories, pluginDescriptor, hasExtensionsToLoad); r.render(); } @@ -189,20 +195,29 @@ private PluginDescriptor extractPluginDescriptor() throws MavenReportException { } } + /** + * @param locale The locale + * @param key The key to search for + * @return The text appropriate for the locale. + */ + private String getI18nString(Locale locale, String key) { + return i18n.getString("plugin-report", locale, "report.plugin." + key); + } + /** * {@inheritDoc} */ @Override - public String getDescription(Locale locale) { - return getBundle(locale).getString("report.plugin.description"); + public String getName(Locale locale) { + return getI18nString(locale, "name"); } /** * {@inheritDoc} */ @Override - public String getName(Locale locale) { - return getBundle(locale).getString("report.plugin.name"); + public String getDescription(Locale locale) { + return getI18nString(locale, "description"); } /** @@ -240,62 +255,65 @@ private void generateMojosDocumentation(PluginDescriptor pluginDescriptor, Local } } - /** - * @param locale not null - * @return the bundle for this report - */ - protected static ResourceBundle getBundle(Locale locale) { - return ResourceBundle.getBundle("plugin-report", locale, PluginReport.class.getClassLoader()); - } - /** * Generates an overview page with the list of goals * and a link to the goal's page. */ static class PluginOverviewRenderer extends AbstractMavenReportRenderer { + private final I18N i18n; + + private final Locale locale; + private final MavenProject project; private final List requirementsHistories; private final PluginDescriptor pluginDescriptor; - private final Locale locale; - private final boolean hasExtensionsToLoad; /** + * @param sink not null + * @param i18n not null + * @param locale not null * @param project not null * @param requirementsHistories not null - * @param sink not null * @param pluginDescriptor not null - * @param locale not null */ PluginOverviewRenderer( + Sink sink, + I18N i18n, + Locale locale, MavenProject project, List requirementsHistories, - Sink sink, PluginDescriptor pluginDescriptor, - Locale locale, boolean hasExtensionsToLoad) { super(sink); + this.i18n = i18n; + + this.locale = locale; + this.project = project; this.requirementsHistories = requirementsHistories; this.pluginDescriptor = pluginDescriptor; - this.locale = locale; - this.hasExtensionsToLoad = hasExtensionsToLoad; } - /** - * {@inheritDoc} - */ @Override public String getTitle() { - return getBundle(locale).getString("report.plugin.title"); + return getI18nString("title"); + } + + /** + * @param key The key. + * @return The translated string. + */ + protected String getI18nString(String key) { + return i18n.getString("plugin-report", locale, "report.plugin." + key); } /** @@ -307,17 +325,15 @@ public void renderBody() { if (!(pluginDescriptor.getMojos() != null && pluginDescriptor.getMojos().size() > 0)) { - paragraph(getBundle(locale).getString("report.plugin.goals.nogoal")); + paragraph(getI18nString("goals.nogoal")); endSection(); return; } - paragraph(getBundle(locale).getString("report.plugin.goals.intro")); + paragraph(getI18nString("goals.intro")); boolean hasMavenReport = false; - for (Iterator i = pluginDescriptor.getMojos().iterator(); i.hasNext(); ) { - MojoDescriptor mojo = i.next(); - + for (MojoDescriptor mojo : pluginDescriptor.getMojos()) { if (GeneratorUtils.isMavenReport(mojo.getImplementation(), project)) { hasMavenReport = true; } @@ -325,9 +341,9 @@ public void renderBody() { startTable(); - String goalColumnName = getBundle(locale).getString("report.plugin.goals.column.goal"); - String isMavenReport = getBundle(locale).getString("report.plugin.goals.column.isMavenReport"); - String descriptionColumnName = getBundle(locale).getString("report.plugin.goals.column.description"); + String goalColumnName = getI18nString("goals.column.goal"); + String isMavenReport = getI18nString("goals.column.isMavenReport"); + String descriptionColumnName = getI18nString("goals.column.description"); if (hasMavenReport) { tableHeader(new String[] {goalColumnName, isMavenReport, descriptionColumnName}); } else { @@ -348,25 +364,20 @@ public void renderBody() { String description; if (StringUtils.isNotEmpty(mojo.getDeprecated())) { - description = "" + getBundle(locale).getString("report.plugin.goal.deprecated") - + " " + mojo.getDeprecated(); + description = "" + getI18nString("goal.deprecated") + " " + mojo.getDeprecated(); } else if (StringUtils.isNotEmpty(mojo.getDescription())) { description = mojo.getDescription(); } else { - description = getBundle(locale).getString("report.plugin.goal.nodescription"); + description = getI18nString("goal.nodescription"); } sink.tableRow(); tableCell(createLinkPatternedText(goalName, goalDocumentationLink)); if (hasMavenReport) { if (GeneratorUtils.isMavenReport(mojo.getImplementation(), project)) { - sink.tableCell(); - sink.text(getBundle(locale).getString("report.plugin.isReport")); - sink.tableCell_(); + tableCell(getI18nString("isReport")); } else { - sink.tableCell(); - sink.text(getBundle(locale).getString("report.plugin.isNotReport")); - sink.tableCell_(); + tableCell(getI18nString("isNotReport")); } } tableCell(description, true); @@ -375,25 +386,22 @@ public void renderBody() { endTable(); - startSection(getBundle(locale).getString("report.plugin.systemrequirements")); + startSection(getI18nString("systemrequirements")); - paragraph(getBundle(locale).getString("report.plugin.systemrequirements.intro")); + paragraph(getI18nString("systemrequirements.intro")); startTable(); String maven = discoverMavenRequirement(project, pluginDescriptor); sink.tableRow(); - tableCell(getBundle(locale).getString("report.plugin.systemrequirements.maven")); - tableCell( - (maven != null - ? maven - : getBundle(locale).getString("report.plugin.systemrequirements.nominimum"))); + tableCell(getI18nString("systemrequirements.maven")); + tableCell((maven != null ? maven : getI18nString("systemrequirements.nominimum"))); sink.tableRow_(); String jdk = discoverJdkRequirement(project, pluginDescriptor); sink.tableRow(); - tableCell(getBundle(locale).getString("report.plugin.systemrequirements.jdk")); - tableCell((jdk != null ? jdk : getBundle(locale).getString("report.plugin.systemrequirements.nominimum"))); + tableCell(getI18nString("systemrequirements.jdk")); + tableCell((jdk != null ? jdk : getI18nString("systemrequirements.nominimum"))); sink.tableRow_(); endTable(); @@ -412,14 +420,14 @@ private void renderRequirementsHistories() { return; } - startSection(getBundle(locale).getString("report.plugin.systemrequirements.history")); - paragraph(getBundle(locale).getString("report.plugin.systemrequirements.history.intro")); + startSection(getI18nString("systemrequirements.history")); + paragraph(getI18nString("systemrequirements.history.intro")); startTable(); tableHeader(new String[] { - getBundle(locale).getString("report.plugin.systemrequirements.history.version"), - getBundle(locale).getString("report.plugin.systemrequirements.history.maven"), - getBundle(locale).getString("report.plugin.systemrequirements.history.jdk") + getI18nString("systemrequirements.history.version"), + getI18nString("systemrequirements.history.maven"), + getI18nString("systemrequirements.history.jdk") }); requirementsHistories.forEach(requirementsHistory -> { @@ -440,90 +448,86 @@ private void renderRequirementsHistories() { * @param hasMavenReport If the plugin has a report or not */ private void renderUsageSection(boolean hasMavenReport) { - startSection(getBundle(locale).getString("report.plugin.usage")); + startSection(getI18nString("usage")); // Configuration - sink.paragraph(); - text(getBundle(locale).getString("report.plugin.usage.intro")); - sink.paragraph_(); + paragraph(getI18nString("usage.intro")); StringBuilder sb = new StringBuilder(); - sb.append("").append('\n'); - sb.append(" ...").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ") - .append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); + sb.append("").append(Markup.EOL); + sb.append(" ...").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ") + .append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getGroupId()) .append("") - .append('\n'); + .append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getArtifactId()) .append("") - .append('\n'); + .append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getVersion()) .append("") - .append('\n'); + .append(Markup.EOL); if (hasExtensionsToLoad) { - sb.append(" true").append('\n'); + sb.append(" true").append(Markup.EOL); } - sb.append(" ").append('\n'); - sb.append(" ...").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ") - .append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); + sb.append(" ").append(Markup.EOL); + sb.append(" ...").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getGroupId()) .append("") - .append('\n'); + .append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getArtifactId()) .append("") - .append('\n'); - sb.append(" ").append('\n'); - sb.append(" ...").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); + .append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ...").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); if (hasMavenReport) { - sb.append(" ...").append('\n'); - sb.append(" ") - .append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); + sb.append(" ...").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getGroupId()) .append("") - .append('\n'); + .append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getArtifactId()) .append("") - .append('\n'); + .append(Markup.EOL); sb.append(" ") .append(pluginDescriptor.getVersion()) .append("") - .append('\n'); - sb.append(" ").append('\n'); - sb.append(" ...").append('\n'); - sb.append(" ").append('\n'); - sb.append(" ").append('\n'); + .append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ...").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); + sb.append(" ").append(Markup.EOL); } - sb.append(" ...").append('\n'); - sb.append("").append('\n'); + sb.append(" ...").append(Markup.EOL); + sb.append(""); verbatimText(sb.toString()); sink.paragraph(); - linkPatternedText(getBundle(locale).getString("report.plugin.configuration.end")); + linkPatternedText(getI18nString("configuration.end")); sink.paragraph_(); endSection();