This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 47256d50f0c07e370da2c2eaf75c99544d86077e Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Oct 8 16:20:57 2016 +0200 review tag value report --- .../org/nuiton/eugene/plugin/TagValuesReport.java | 111 ++++++- .../plugin/renderer/TagValuesReportRenderer.java | 359 ++++++++++++++++----- .../main/resources/tag-values-report.properties | 3 +- .../main/resources/tag-values-report_fr.properties | 2 +- 4 files changed, 382 insertions(+), 93 deletions(-) diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java index fef45e5..6b3c775 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java @@ -22,14 +22,20 @@ package org.nuiton.eugene.plugin; * #L% */ +import org.apache.maven.doxia.siterenderer.Renderer; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; +import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.MavenReportException; +import org.codehaus.plexus.i18n.I18N; import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.plugin.renderer.TagValuesReportRenderer; +import java.io.File; +import java.util.Collection; import java.util.Locale; import java.util.Map; @@ -41,9 +47,8 @@ import java.util.Map; * @author Tony Chemit - chemit@codelutin.com * @since 2.10 */ -@Mojo(name = "tag-values-report", requiresProject = true, requiresReports = true, - requiresDependencyResolution = ResolutionScope.COMPILE) -public class TagValuesReport extends AbstractEugeneReport<TagValueMetadatasProvider> { +@Mojo(name = "tag-values-report", requiresReports = true, requiresDependencyResolution = ResolutionScope.COMPILE) +public class TagValuesReport extends AbstractMavenReport { /** * Name of the tagValue provider. @@ -53,30 +58,110 @@ public class TagValuesReport extends AbstractEugeneReport<TagValueMetadatasProvi @Parameter(property = "eugene.providerName", defaultValue = "${project.artifactId}", required = true) protected String providerName; + /** + * Report output directory. Note that this parameter is only relevant if the goal is run from the command line or + * from the default build lifecycle. If the goal is run indirectly as part of a site generation, the output + * directory configured in the Maven Site Plugin is used instead. + */ + @Parameter(property = "config.outputDirectory", + defaultValue = "${project.reporting.outputDirectory}", + required = true) + protected File outputDirectory; + + /** + * Report output encoding. Note that this parameter is only relevant if the goal is run from the command line or + * from the default build lifecycle. If the goal is run indirectly as part of a site generation, the output + * encoding configured in the Maven Site Plugin is used instead. + */ + @Parameter(property = "config.outputEncoding", + defaultValue = "${project.reporting.outputEncoding}", + required = true) + protected String outputEncoding; + + /** + * Skip to generate the report. + */ + @Parameter(property = "config.skip") + protected boolean skip; + + /** + * Location of javadoc report. + */ + @Parameter(property = "eugene.javaDocDestDir", defaultValue = "apidocs") + protected String javaDocDestDir; + + /** + * Location of xref report. + */ + @Parameter(property = "eugene.jxrDestDir", defaultValue = "xref") + protected String jxrDestDir; + + /** + * The Maven Project. + */ + @Parameter(defaultValue = "${project}", readonly = true) + protected MavenProject project; + + /** + * Doxia Site Renderer component. + */ + @Component + protected Renderer siteRenderer; + + /** + * Internationalization component. + */ + @Component + protected I18N i18n; + @Component(role = TagValueMetadatasProvider.class) protected Map<String, TagValueMetadatasProvider> providers; + @Override - protected TagValueMetadatasProvider initData(Locale locale) throws MavenReportException { + public String getDescription(Locale locale) { + return i18n.getString(getOutputName(), locale, "report.description"); + } - TagValueMetadatasProvider provider = providers.get(providerName); - if (provider == null) { + @Override + public String getName(Locale locale) { + return i18n.getString(getOutputName(), locale, "report.title"); + } - String errorMessage = i18n.format(getOutputName(), locale, "tagValueProvider.not.found", providerName); - throw new MavenReportException(errorMessage); + @Override + public String getCategoryName() { + return CATEGORY_PROJECT_REPORTS; + } - } + @Override + public boolean canGenerateReport() { + return !skip; + } - return provider; + @Override + protected Renderer getSiteRenderer() { + return siteRenderer; + } + @Override + protected String getOutputDirectory() { + return outputDirectory.getAbsolutePath(); } @Override - protected TagValuesReportRenderer createRenderer(Locale locale, TagValueMetadatasProvider data) { + protected MavenProject getProject() { + return project; + } + + @Override + protected void executeReport(Locale locale) throws MavenReportException { + + Collection<TagValueMetadatasProvider> providers = this.providers.values(); - return new TagValuesReportRenderer( - getSink(), i18n, locale, getOutputName(), javaDocDestDir, jxrDestDir, data); + TagValuesReportRenderer reportRenderer = new TagValuesReportRenderer( + getSink(), i18n, locale, getOutputName(), javaDocDestDir, jxrDestDir, providers); + reportRenderer.render(); } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java index 1e502e8..6c7ab56 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java @@ -24,10 +24,23 @@ package org.nuiton.eugene.plugin.renderer; import org.apache.commons.collections4.CollectionUtils; import org.apache.maven.doxia.sink.Sink; +import org.apache.maven.doxia.sink.SinkEventAttributes; +import org.apache.maven.reporting.AbstractMavenReportRenderer; import org.codehaus.plexus.i18n.I18N; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; - +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelElement; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.object.ObjectModelParameter; + +import java.util.Collection; import java.util.Locale; import java.util.Set; @@ -37,52 +50,74 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 2.10 */ -public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagValueMetadatasProvider, TagValueMetadata> { +public class TagValuesReportRenderer extends AbstractMavenReportRenderer { - public TagValuesReportRenderer(Sink sink, - I18N i18n, - Locale locale, - String bundleName, - String javaDocDestDir, - String jxrDestDir, - TagValueMetadatasProvider data) { - super(sink, i18n, locale, bundleName, javaDocDestDir, jxrDestDir, data); - } + /** + * Internationalization component. + */ + protected final I18N i18n; - @Override - protected Set<TagValueMetadata> getDataDetails() { - return data.getTagValues(); - } + /** + * The locale we are rendering for. + */ + protected final Locale locale; + + /** + * The name of the bundle containing our I18n resources. + */ + protected final String bundleName; + + /** + * Data to describe. + */ + protected final Collection<TagValueMetadatasProvider> data; + + protected final String javaDocDestDir; @Override - protected String getProviderDescription(TagValueMetadatasProvider data) { - return data.getDescription(); + public String getTitle() { + return getText("report.title"); } @Override - protected void renderSummaryTable(TagValueMetadatasProvider provider, Set<TagValueMetadata> details) { - - sink.section2(); + public void renderBody() { - sink.sectionTitle2(); - sink.text(getText("report.provider.tagvalue.name")); - sink.text(provider.getDescription()); - sink.sectionTitle2_(); + sink.section1(); + sink.sectionTitle1(); + sink.text(getText("report.overview.title")); + sink.sectionTitle1_(); - if (CollectionUtils.isEmpty(details)) { + sink.paragraph(); + sink.link(getEugeneDocLink()); + sink.text(getText("report.overview.more.information")); + sink.link_(); + sink.paragraph_(); - sink.text(getText("report.noTagValues")); + for (TagValueMetadatasProvider provider : data) { - } else { - - sink.section3(); + String implementation = provider.getClass().getName(); - sink.sectionTitle3(); - sink.text(getText("report.summary.tagValues")); - sink.sectionTitle3_(); + sink.section2(); + sink.sectionTitle2(); + sink.text(provider.getDescription()); + sink.sectionTitle2_(); sink.lineBreak(); + sink.paragraph(); + sink.bold(); + sink.text(implementation); + sink.bold_(); + sink.text(" "); + sink.link("./" + javaDocDestDir + "/" + implementation.replace('.', '/') + ".html"); + sink.text("javadoc"); + sink.link_(); + sink.link("./" + jxrDestDir + "/" + implementation.replace('.', '/') + ".html"); + sink.text(" "); + sink.text("xref"); + sink.link_(); + sink.text("."); + sink.paragraph_(); sink.table(); @@ -91,7 +126,7 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal sinkHeaderCellText(getText("report.tagValue.description")); sink.tableRow_(); - for (TagValueMetadata entry : details) { + for (TagValueMetadata entry : provider.getTagValues()) { String tagValueName = entry.getName(); @@ -104,72 +139,118 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal sink.table_(); - sink.section3_(); + sink.section2_(); } - sink.section2_(); - } + sink.section1(); + sink.sectionTitle1(); + sink.text(getText("report.overview.detail")); + sink.sectionTitle1_(); - @Override - protected void renderDetail(TagValueMetadata detail) { + for (TagValueMetadatasProvider provider : data) { - sink.section2(); - sink.sectionTitle2(); - sink.anchor("detail_" + detail.getName()); - sink.text(getText("report.detail.tagValue.title") + " " + detail.getName()); - sink.anchor_(); - sink.sectionTitle2_(); + if (CollectionUtils.isNotEmpty(provider.getTagValues())) { - sink.lineBreak(); + sink.section2(); - sink.table(); + sink.sectionTitle2(); + sink.text(getText("report.detail.title")); + sink.sectionTitle2_(); - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.tagValue.name")); - sinkCellText(detail.getName()); - sink.tableRow_(); + sink.lineBreak(); - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.tagValue.description")); - sinkCellText(detail.getDescription()); - sink.tableRow_(); + sink.paragraph(); + sink.text(getText("report.detail.text")); + sink.paragraph_(); - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.tagValue.defaultValue")); - sinkCellText(detail.getDefaultValue()); - sink.tableRow_(); + for (TagValueMetadata detail : provider.getTagValues()) { - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.tagValue.matcherClass")); - sinkCellText(detail.getMatcherClass().getName()); - sink.tableRow_(); + sink.section2(); + sink.sectionTitle2(); + sink.anchor("detail_" + detail.getName()); + sink.text(getText("report.detail.tagValue.title") + " " + detail.getName()); + sink.anchor_(); + sink.sectionTitle2_(); - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.tagValue.target")); - sink.tableCell(); + sink.lineBreak(); - renderTargets(detail.getTargets()); + sink.table(); - sink.tableCell_(); - sink.tableRow_(); + sink.tableRow(); + sinkHeaderCellText(getText("report.detail.tagValue.name")); + sinkCellText(detail.getName()); + sink.tableRow_(); + + sink.tableRow(); + sinkHeaderCellText(getText("report.detail.tagValue.description")); + sinkCellText(detail.getDescription()); + sink.tableRow_(); + + sink.tableRow(); + sinkHeaderCellText(getText("report.detail.tagValue.defaultValue")); + sinkCellText(detail.getDefaultValue()); + sink.tableRow_(); + + sink.tableRow(); + sinkHeaderCellText(getText("report.detail.tagValue.matcherClass")); + sinkCellText(detail.getMatcherClass().getName()); + sink.tableRow_(); + + sink.tableRow(); + sinkHeaderCellText(getText("report.detail.tagValue.target")); + sink.tableCell(); + + renderTargets(detail.getTargets()); + + sink.tableCell_(); + sink.tableRow_(); + + sink.table_(); + + sink.section3(); + sink.sectionTitle3(); + sink.text(getText("report.detail.tagValue.usage.title")); + sink.sectionTitle3_(); - sink.table_(); + sink.text("//TODO Example of usage of this tag value"); - sink.section3(); - sink.sectionTitle3(); - sink.text(getText("report.detail.tagValue.usage.title")); - sink.sectionTitle3_(); + sink.section3_(); - sink.text("//TODO Example of usage of this tag value"); + sink.section2_(); - sink.section3_(); + } - sink.section2_(); + sink.section2_(); + + } + + } + + sink.section1_(); } - @Override + protected final String jxrDestDir; + + public TagValuesReportRenderer(Sink sink, + I18N i18n, + Locale locale, + String bundleName, + String javaDocDestDir, + String jxrDestDir, + Collection<TagValueMetadatasProvider> data) { + super(sink); + this.i18n = i18n; + this.locale = locale; + this.bundleName = bundleName; + this.javaDocDestDir = javaDocDestDir; + this.jxrDestDir = jxrDestDir; + this.data = data; + this.sink = sink; + } + + protected String getEugeneDocLink() { String url; @@ -184,4 +265,128 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal } + /** + * Gets the localized message for this report. + * + * @param key the message key. + * @return the message. + */ + protected String getText(String key) { + return i18n.getString(bundleName, locale, key); + } + + protected void sinkHeaderCellText(String text) { + sink.tableHeaderCell(); + sink.text(text); + sink.tableHeaderCell_(); + } + + protected void sinkHeaderCellText(SinkEventAttributes width, String text) { + sink.tableHeaderCell(width); + sink.text(text); + sink.tableHeaderCell_(); + } + + protected void sinkCellText(SinkEventAttributes width, String text) { + sink.tableCell(width); + sink.text(text); + sink.tableCell_(); + } + + protected void sinkCellText(String text) { + sink.tableCell(); + sink.text(text); + sink.tableCell_(); + } + + protected void sinkCellLink(String text, String url) { + sink.tableCell(); + sink.link(url); + sink.text(text); + sink.link_(); + sink.tableCell_(); + } + + protected void renderTargets(Set<Class<?>> targets) { + + boolean moreThanOne = targets.size() > 1; + + if (moreThanOne) { + + sink.list_(); + + } + + for (Class<?> target : targets) { + + if (moreThanOne) { + + sink.listItem(); + + } + + renderDetailTarget(target); + + if (moreThanOne) { + + sink.listItem_(); + + } + + } + + if (moreThanOne) { + + sink.list_(); + + } + + } + + protected void renderDetailTarget(Class<?> target) { + + if (ObjectModel.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.model")); + + } else if (ObjectModelPackage.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.package")); + + } else if (ObjectModelClassifier.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.classifier")); + + } else if (ObjectModelClass.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.class")); + + } else if (ObjectModelInterface.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.interface")); + + } else if (ObjectModelEnumeration.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.enumeration")); + + } else if (ObjectModelAttribute.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.attribute")); + + } else if (ObjectModelParameter.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.parameter")); + + } else if (ObjectModelOperation.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.operation")); + + } else if (ObjectModelElement.class.isAssignableFrom(target)) { + + sink.text(getText("report.detail.target.element")); + + } + + } + } diff --git a/eugene-maven-plugin/src/main/resources/tag-values-report.properties b/eugene-maven-plugin/src/main/resources/tag-values-report.properties index 848bd19..c5c0913 100644 --- a/eugene-maven-plugin/src/main/resources/tag-values-report.properties +++ b/eugene-maven-plugin/src/main/resources/tag-values-report.properties @@ -24,8 +24,7 @@ report.description=Provides details of tag values available in a given class report.overview.title=Overview report.overview.text=This report summarizes all tag values available ith the class report.overview.more.information=More information about Tag values in EUGene -tagValueProvider.not.found=Could not find tag value provider named ''{0}'' - +report.overview.detail=Details of all tag values report.detail.title=Detail of tag values report.detail.text=We give details of each tag value diff --git a/eugene-maven-plugin/src/main/resources/tag-values-report_fr.properties b/eugene-maven-plugin/src/main/resources/tag-values-report_fr.properties index f75f9f0..d78e7d4 100644 --- a/eugene-maven-plugin/src/main/resources/tag-values-report_fr.properties +++ b/eugene-maven-plugin/src/main/resources/tag-values-report_fr.properties @@ -25,7 +25,7 @@ report.overview.title=Pr\u00E9ambule report.overview.text=Ce rapport d\u00E9crit les tag values d\u00E9finies dans la classe tagValueProvider.not.found=Impossible de trouver le tag value prodiver nomm\u00E9 ''{0}'' report.overview.more.information=Pour plus d'informations sur les Tag values dans EUGene - +report.overview.detail=D\u00E9tail de tous les tag values report.detail.title=D\u00E9tail des tag values report.detail.text=On d\u00E9taille ici chaque tag value -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.