[DOXIASITETOOLS-183] add relative path to build root
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
index 9a17e3c..f7abb91 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
@@ -189,7 +189,8 @@
String excludes = ( moduleExcludes == null ) ? null : moduleExcludes.get( module.getParserId() );
- addModuleFiles( moduleBasedir, module, excludes, files, editable );
+ addModuleFiles( siteRenderingContext.getRootDirectory(), moduleBasedir, module, excludes, files,
+ editable );
}
}
}
@@ -203,7 +204,8 @@
String excludes = ( moduleExcludes == null ) ? null : moduleExcludes.get( module.getParserId() );
- addModuleFiles( module.getBasedir(), parserModule, excludes, files, editable );
+ addModuleFiles( siteRenderingContext.getRootDirectory(), module.getBasedir(), parserModule, excludes,
+ files, editable );
}
catch ( ParserModuleNotFoundException e )
{
@@ -229,7 +231,7 @@
return filtered;
}
- private void addModuleFiles( File moduleBasedir, ParserModule module, String excludes,
+ private void addModuleFiles( File rootDir, File moduleBasedir, ParserModule module, String excludes,
Map<String, DocumentRenderer> files, boolean editable )
throws IOException, RendererException
{
@@ -238,6 +240,9 @@
return;
}
+ String moduleRelativePath =
+ PathTool.getRelativeFilePath( rootDir.getAbsolutePath(), moduleBasedir.getAbsolutePath() );
+
List<String> allFiles = FileUtils.getFileNames( moduleBasedir, "**/*.*", excludes, false );
for ( String extension : module.getExtensions() )
@@ -253,8 +258,8 @@
for ( String doc : docs )
{
- RenderingContext context =
- new RenderingContext( moduleBasedir, doc, module.getParserId(), extension, editable );
+ RenderingContext context = new RenderingContext( moduleBasedir, moduleRelativePath, doc,
+ module.getParserId(), extension, editable );
// TODO: DOXIA-111: we need a general filter here that knows how to alter the context
if ( endsWithIgnoreCase( doc, ".vm" ) )
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java
index 44831e9..b05c0c6 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java
@@ -37,6 +37,8 @@
{
private final File basedir;
+ private final String basedirRelativePath;
+
private final String inputName;
private final String outputName;
@@ -56,7 +58,7 @@
@Deprecated
public RenderingContext( File basedir, String document )
{
- this( basedir, document, null, null, false, null );
+ this( basedir, null, document, null, null, false, null );
}
/**
@@ -72,18 +74,19 @@
*/
public RenderingContext( File basedir, String document, String generator )
{
- this( basedir, document, null, null, false, generator );
+ this( basedir, null, document, null, null, false, generator );
}
@Deprecated
public RenderingContext( File basedir, String document, String parserId, String extension )
{
- this( basedir, document, parserId, extension, false, null );
+ this( basedir, null, document, parserId, extension, false, null );
}
- public RenderingContext( File basedir, String document, String parserId, String extension, boolean editable )
+ public RenderingContext( File basedir, String basedirRelativePath, String document, String parserId,
+ String extension, boolean editable )
{
- this( basedir, document, parserId, extension, editable, null );
+ this( basedir, basedirRelativePath, document, parserId, extension, editable, null );
}
/**
@@ -92,6 +95,7 @@
* </p>
*
* @param basedir the source base directory (not null, pseudo value when not a Doxia source).
+ * @param basedirRelativePath the relative path from root (null if not Doxia source)
* @param document the source document name.
* @param parserId the Doxia module parser id associated to this document, may be null if document not rendered from
* a Doxia source.
@@ -101,10 +105,11 @@
* @param generator the generator (in general a reporting goal: <code>groupId:artifactId:version:goal</code>)
* @since 1.8
*/
- public RenderingContext( File basedir, String document, String parserId, String extension, boolean editable,
- String generator )
+ public RenderingContext( File basedir, String basedirRelativePath, String document, String parserId,
+ String extension, boolean editable, String generator )
{
this.basedir = basedir;
+ this.basedirRelativePath = basedirRelativePath;
this.inputName = document;
this.parserId = parserId;
this.extension = extension;
@@ -223,7 +228,9 @@
/**
* Is the source document editable?
+ *
* @return <code>true</code> if comes from an editable Doxia source (not generated one).
+ * @since 1.8
*/
public boolean isEditable()
{
@@ -231,11 +238,46 @@
}
/**
+ * Is the document rendered from a Doxia source?
+ *
+ * @return <code>true</code> if comes from a Doxia source.
+ * @since 1.8
+ */
+ public boolean isDoxiaSource()
+ {
+ return StringUtils.isNotEmpty( extension );
+ }
+
+ /**
* What is the generator (if any)?
+ *
* @return <code>null</code> if no known generator
+ * @since 1.8
*/
public String getGenerator()
{
return generator;
}
+
+ /**
+ * Get the relative path of basedir (when a Doxia source)
+ *
+ * @return the relative path of basedir when a Doxia source, or <code>null</code> if not a Doxia source
+ * @since 1.8
+ */
+ public String getBasedirRelativePath()
+ {
+ return basedirRelativePath;
+ }
+
+ /**
+ * Get the relative path to Doxia source from build root.
+ *
+ * @return the relative path to Doxia source from build root, or <code>null</code> if not a Doxia source
+ * @since 1.8
+ */
+ public String getDoxiaSourcePath()
+ {
+ return isDoxiaSource() ? ( basedirRelativePath + '/' + inputName ) : null;
+ }
}
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
index 552eb12..994e2a1 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
@@ -64,6 +64,8 @@
private boolean usingDefaultTemplate;
+ private File rootDirectory;
+
private List<File> siteDirectories = new ArrayList<File>();
private Map<String, String> moduleExcludes;
@@ -427,6 +429,7 @@
* Directory where to save content after Velocity processing (<code>*.vm</code>), but before parsing it with Doxia.
*
* @return not null if the documents are to be saved
+ * @since 1.7
*/
public File getProcessedContentOutput()
{
@@ -438,9 +441,33 @@
* Doxia?
*
* @param processedContentOutput not null if the documents are to be saved
+ * @since 1.7
*/
public void setProcessedContentOutput( File processedContentOutput )
{
this.processedContentOutput = processedContentOutput;
}
+
+ /**
+ * Root directory, to calculate relative path to every site directories.
+ * Corresponds to the <code>pom.xml</code> directory for Maven build.
+ *
+ * @return the root directory
+ * @since 1.8
+ */
+ public File getRootDirectory()
+ {
+ return rootDirectory;
+ }
+
+ /**
+ * Set the root directory.
+ *
+ * @param rootDirectory
+ * @since 1.8
+ */
+ public void setRootDirectory( File rootDirectory )
+ {
+ this.rootDirectory = rootDirectory;
+ }
}
diff --git a/doxia-site-renderer/src/main/resources/org/apache/maven/doxia/siterenderer/resources/default-site.vm b/doxia-site-renderer/src/main/resources/org/apache/maven/doxia/siterenderer/resources/default-site.vm
index eb2814e..77fd795 100644
--- a/doxia-site-renderer/src/main/resources/org/apache/maven/doxia/siterenderer/resources/default-site.vm
+++ b/doxia-site-renderer/src/main/resources/org/apache/maven/doxia/siterenderer/resources/default-site.vm
@@ -18,9 +18,9 @@
##
#parse( "default-site-macros.vm" )
<!-- Generated by Apache Maven Doxia Site Renderer#if( $doxiaSiteRendererVersion ) $doxiaSiteRendererVersion#end##
-#if( $docRenderingContext.generator || $docRenderingContext.extension ) from##
+#if( $docRenderingContext.generator || $docRenderingContext.doxiaSource ) from##
#if( $docRenderingContext.generator ) $docRenderingContext.generator#end##
-#if( $docRenderingContext.extension ) $docRenderingContext.basedir.name/$docRenderingContext.inputName#end##
+#if( $docRenderingContext.doxiaSource ) $docRenderingContext.doxiaSourcePath#end##
#end
at $dateFormat.format( $currentDate ) -->
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
diff --git a/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java b/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
index ffcb3fb..4032b5d 100644
--- a/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
+++ b/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
@@ -162,10 +162,12 @@
.read( new FileReader( getTestFile( "src/test/resources/site/site.xml" ) ) );
SiteRenderingContext ctxt = getSiteRenderingContext( decoration, "src/test/resources/site", false );
- renderer.render( renderer.locateDocumentFiles( ctxt ).values(), ctxt, getTestFile( OUTPUT ) );
+ ctxt.setRootDirectory( getTestFile( "" ) );
+ renderer.render( renderer.locateDocumentFiles( ctxt, true ).values(), ctxt, getTestFile( OUTPUT ) );
ctxt = getSiteRenderingContext( decoration, "src/test/resources/site-validate", true );
- renderer.render( renderer.locateDocumentFiles( ctxt ).values(), ctxt, getTestFile( OUTPUT ) );
+ ctxt.setRootDirectory( getTestFile( "" ) );
+ renderer.render( renderer.locateDocumentFiles( ctxt, true ).values(), ctxt, getTestFile( OUTPUT ) );
// ----------------------------------------------------------------------
// Verify specific pages
@@ -197,7 +199,8 @@
DocumentRenderer docRenderer = mock( DocumentRenderer.class );
when( docRenderer.isExternalReport() ).thenReturn( true );
when( docRenderer.getOutputName() ).thenReturn( "external/index" );
- when( docRenderer.getRenderingContext() ).thenReturn( new RenderingContext( new File( "" ), "index.html" ) );
+ when( docRenderer.getRenderingContext() ).thenReturn( new RenderingContext( new File( "" ), "index.html",
+ "generator:external" ) );
SiteRenderingContext context = new SiteRenderingContext();
@@ -225,9 +228,9 @@
siteRenderingContext.setTemplateProperties( attributes );
siteRenderingContext.setTemplateName( "org/apache/maven/doxia/siterenderer/velocity-toolmanager.vm" );
- RenderingContext context = new RenderingContext( new File( "" ), "document.html" );
+ RenderingContext context = new RenderingContext( new File( "" ), "document.html", "generator" );
SiteRendererSink sink = new SiteRendererSink( context );
- renderer.generateDocument( writer, sink, siteRenderingContext );
+ renderer.mergeDocumentIntoSite( writer, sink, siteRenderingContext );
String renderResult = writer.toString();
String expectedResult = IOUtils.toString( getClass().getResourceAsStream( "velocity-toolmanager.expected.txt" ) );
@@ -253,9 +256,9 @@
SiteRenderingContext siteRenderingContext =
renderer.createContextForTemplate( templateFile, attributes, new DecorationModel(),
"defaultWindowTitle", Locale.ENGLISH );
- RenderingContext context = new RenderingContext( new File( "" ), "document.html" );
+ RenderingContext context = new RenderingContext( new File( "" ), "document.html", "generator" );
SiteRendererSink sink = new SiteRendererSink( context );
- renderer.generateDocument( writer, sink, siteRenderingContext );
+ renderer.mergeDocumentIntoSite( writer, sink, siteRenderingContext );
String renderResult = writer.toString();
String expectedResult = IOUtils.toString( getClass().getResourceAsStream( "velocity-toolmanager.expected.txt" ) );
@@ -283,9 +286,9 @@
SiteRenderingContext siteRenderingContext =
renderer.createContextForSkin( skin, attributes, new DecorationModel(), "defaultWindowTitle",
Locale.ENGLISH );
- RenderingContext context = new RenderingContext( new File( "" ), "document.html" );
+ RenderingContext context = new RenderingContext( new File( "" ), "document.html", "generator" );
SiteRendererSink sink = new SiteRendererSink( context );
- renderer.generateDocument( writer, sink, siteRenderingContext );
+ renderer.mergeDocumentIntoSite( writer, sink, siteRenderingContext );
String renderResult = writer.toString();
String expectedResult = IOUtils.toString( getClass().getResourceAsStream( "velocity-toolmanager.expected.txt" ) );
expectedResult = StringUtils.unifyLineSeparators( expectedResult );
diff --git a/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/RenderingContextTest.java b/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/RenderingContextTest.java
index 6b1faad..2435847 100644
--- a/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/RenderingContextTest.java
+++ b/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/RenderingContextTest.java
@@ -43,32 +43,32 @@
File baseDir = new File( getBasedir() + File.separatorChar + "test" + File.separatorChar + "resources" );
String docName = "file.with.dot.in.name.xml";
- RenderingContext renderingContext = new RenderingContext( baseDir, docName, "", "xml" );
+ RenderingContext renderingContext = new RenderingContext( baseDir, "test", docName, "", "xml", false );
assertEquals( "file.with.dot.in.name.html", renderingContext.getOutputName() );
assertEquals( ".", renderingContext.getRelativePath() );
- renderingContext = new RenderingContext( baseDir, docName ); // not Doxia source
+ renderingContext = new RenderingContext( baseDir, docName, "generator" ); // not Doxia source
assertEquals( "file.with.dot.in.name.html", renderingContext.getOutputName() );
assertEquals( ".", renderingContext.getRelativePath() );
docName = "index.xml.vm";
- renderingContext = new RenderingContext( baseDir, docName, "", "xml" );
+ renderingContext = new RenderingContext( baseDir, "test", docName, "", "xml", false );
assertEquals( "index.html", renderingContext.getOutputName() );
assertEquals( ".", renderingContext.getRelativePath() );
docName = "download.apt.vm";
- renderingContext = new RenderingContext( baseDir, docName, "", "apt" );
+ renderingContext = new RenderingContext( baseDir, "test", docName, "", "apt", false );
assertEquals( "download.html", renderingContext.getOutputName() );
assertEquals( ".", renderingContext.getRelativePath() );
docName = "path/file.apt";
- renderingContext = new RenderingContext( baseDir, docName, "", "apt" );
+ renderingContext = new RenderingContext( baseDir, "test", docName, "", "apt", false );
assertEquals( "path/file.html", renderingContext.getOutputName() );
assertEquals( "..", renderingContext.getRelativePath() );
- renderingContext = new RenderingContext( baseDir, docName );
+ renderingContext = new RenderingContext( baseDir, docName, "generator" );
assertEquals( "path/file.html", renderingContext.getOutputName() );
assertEquals( "..", renderingContext.getRelativePath() );
}