[ 
https://issues.apache.org/jira/browse/MSITE-842?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bertrand Martin updated MSITE-842:
----------------------------------
    Description: 
h1. Problem

The _$currentFileName_ and _$alignedFileName_ macros work just fine for regular 
documents (from Markdown source, for example). But for multi-pages documents, 
like a Maven Report plugin would generate, these macros keep returning the name 
of main page of the report, rather than the page being rendered.

h2. KmReference.java

Maven Report plugin that use several instances of _Sink_
 
{code:java}
public class KmReference extends AbstractMavenReport {

    public String getOutputName() {
        return "km-reference";
    }

...

    @Override
    protected void executeReport(Locale locale) throws MavenReportException {

...

            // Create a new sink!
            Sink kmSink;
            try {
                kmSink = getSinkFactory().createSink(outputDirectory, 
pageFilename);
            } catch (IOException e) {
                throw new MavenReportException("Could not create sink for " + 
pageFilename + " in " + outputDirectory.getAbsolutePath(), e);
            }
{code}

h2. site.vm

{code}
alignedFileName = $alignedFileName

currentFileName = $currentFileName

getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()

getGenerator() = $docRenderingContext.getGenerator()

getInputName() = $docRenderingContext.getInputName()

getOutputName() = $docRenderingContext.getOutputName()

getParserId() = $docRenderingContext.getParserId()

getRelativePath() = $docRenderingContext.getRelativePath()
{code}

h2. Resulting another-page.html

This file is *not* km_reference.html, and stil:

{code}
alignedFileName = km-reference.html

currentFileName = km-reference.html

getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()

getGenerator() = 
com.sentrysoftware.maven:patrolreport-maven-plugin:2.0:km-reference

getInputName() = km-reference.html

getOutputName() = km-reference.html

getParserId() = $docRenderingContext.getParserId()

getRelativePath() = .
{code}

h1. Specification

Modify _MultiPageSinkFactory.createSink( File outputDir, String outputName )_ 
so that it creates a new _RenderingContext_ for each sub-sink, with the proper 
document name.

Note: _MultiPageSinkFactory_ is a private class in 
**org.apache.maven.plugins.site.render.ReportDocumentRenderer.java**

Note: Make sure that the new document name (which will end up in 
*$currentFileName*) is calculated relative to the project site output 
directory, so that sub-sink objects can be in sub-directories.

  was:
h1. Problem

The _$currentFileName_ and _$alignedFileName_ macros work just fine for regular 
documents (from Markdown source, for example). But for multi-pages documents, 
like a Maven Report plugin would generate, these macros keep returning the name 
of main page of the report, rather than the page being rendered.

h2. KmReference.java

Maven Report plugin that use several instances of _Sink_
 
{code:java}
public class KmReference extends AbstractMavenReport {

    public String getOutputName() {
        return "km-reference";
    }

...

    @Override
    protected void executeReport(Locale locale) throws MavenReportException {

...

            // Create a new sink!
            Sink kmSink;
            try {
                kmSink = getSinkFactory().createSink(outputDirectory, 
pageFilename);
            } catch (IOException e) {
                throw new MavenReportException("Could not create sink for " + 
pageFilename + " in " + outputDirectory.getAbsolutePath(), e);
            }
{code}

h2. site.vm

{code}
alignedFileName = $alignedFileName

currentFileName = $currentFileName

getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()

getGenerator() = $docRenderingContext.getGenerator()

getInputName() = $docRenderingContext.getInputName()

getOutputName() = $docRenderingContext.getOutputName()

getParserId() = $docRenderingContext.getParserId()

getRelativePath() = $docRenderingContext.getRelativePath()
{code}

h2. Resulting another-page.html

This file is *not* km_reference.html, and stil:

{code}
alignedFileName = km-reference.html

currentFileName = km-reference.html

getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()

getGenerator() = 
com.sentrysoftware.maven:patrolreport-maven-plugin:2.0:km-reference

getInputName() = km-reference.html

getOutputName() = km-reference.html

getParserId() = $docRenderingContext.getParserId()

getRelativePath() = .
{code}

h1. Specification

Modify the _DefaultSiteRenderer.createDocumentVelocityContext()_ method to 
expose the actual name of the file being rendered.

Suggestion:
Property name: *renderedFileName*
Property value: {{File( siteContext.getProcessedContentOutput(), 
docRenderingContext.getInputName().substring( 0, input.length() - 3 ) )}}




> $currentFileName and $alignedFileName are incorrect for Maven Report plugins 
> that use several Sink instances
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: MSITE-842
>                 URL: https://issues.apache.org/jira/browse/MSITE-842
>             Project: Maven Site Plugin
>          Issue Type: Bug
>          Components: doxia integration
>            Reporter: Bertrand Martin
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> h1. Problem
> The _$currentFileName_ and _$alignedFileName_ macros work just fine for 
> regular documents (from Markdown source, for example). But for multi-pages 
> documents, like a Maven Report plugin would generate, these macros keep 
> returning the name of main page of the report, rather than the page being 
> rendered.
> h2. KmReference.java
> Maven Report plugin that use several instances of _Sink_
>  
> {code:java}
> public class KmReference extends AbstractMavenReport {
>     public String getOutputName() {
>         return "km-reference";
>     }
> ...
>     @Override
>     protected void executeReport(Locale locale) throws MavenReportException {
> ...
>             // Create a new sink!
>             Sink kmSink;
>             try {
>                 kmSink = getSinkFactory().createSink(outputDirectory, 
> pageFilename);
>             } catch (IOException e) {
>                 throw new MavenReportException("Could not create sink for " + 
> pageFilename + " in " + outputDirectory.getAbsolutePath(), e);
>             }
> {code}
> h2. site.vm
> {code}
> alignedFileName = $alignedFileName
> currentFileName = $currentFileName
> getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()
> getGenerator() = $docRenderingContext.getGenerator()
> getInputName() = $docRenderingContext.getInputName()
> getOutputName() = $docRenderingContext.getOutputName()
> getParserId() = $docRenderingContext.getParserId()
> getRelativePath() = $docRenderingContext.getRelativePath()
> {code}
> h2. Resulting another-page.html
> This file is *not* km_reference.html, and stil:
> {code}
> alignedFileName = km-reference.html
> currentFileName = km-reference.html
> getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()
> getGenerator() = 
> com.sentrysoftware.maven:patrolreport-maven-plugin:2.0:km-reference
> getInputName() = km-reference.html
> getOutputName() = km-reference.html
> getParserId() = $docRenderingContext.getParserId()
> getRelativePath() = .
> {code}
> h1. Specification
> Modify _MultiPageSinkFactory.createSink( File outputDir, String outputName )_ 
> so that it creates a new _RenderingContext_ for each sub-sink, with the 
> proper document name.
> Note: _MultiPageSinkFactory_ is a private class in 
> **org.apache.maven.plugins.site.render.ReportDocumentRenderer.java**
> Note: Make sure that the new document name (which will end up in 
> *$currentFileName*) is calculated relative to the project site output 
> directory, so that sub-sink objects can be in sub-directories.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to