Author: vsiveton Date: Tue Aug 4 14:02:47 2009 New Revision: 800802 URL: http://svn.apache.org/viewvc?rev=800802&view=rev Log: DOXIASITETOOLS-21: Add Velocity support to DocRenderer
o added velocity 1.6.2 o added DocumentRendererContext Object o updated code to handle vm files o TODO we need to improve interface in 1.2 Added: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java (with props) Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/pom.xml maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/AbstractDocumentRenderer.java maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRenderer.java maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/AbstractPdfRenderer.java maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/pom.xml URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/pom.xml?rev=800802&r1=800801&r2=800802&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/pom.xml (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/pom.xml Tue Aug 4 14:02:47 2009 @@ -99,6 +99,37 @@ <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> </dependency> + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-velocity</artifactId> + <version>1.1.7</version> + <exclusions> + <exclusion> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + </exclusion> + <exclusion> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-component-api</artifactId> + </exclusion> + <exclusion> + <groupId>velocity</groupId> + <artifactId>velocity</artifactId> + </exclusion> + </exclusions> + </dependency> + + <!-- misc --> + <dependency> + <groupId>org.apache.velocity</groupId> + <artifactId>velocity</artifactId> + <version>1.6.2</version> + </dependency> + <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + <version>3.2.1</version> + </dependency> <!-- misc --> <dependency> Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/AbstractDocumentRenderer.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/AbstractDocumentRenderer.java?rev=800802&r1=800801&r2=800802&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/AbstractDocumentRenderer.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/AbstractDocumentRenderer.java Tue Aug 4 14:02:47 2009 @@ -22,6 +22,8 @@ import java.io.File; import java.io.IOException; import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; @@ -42,6 +44,8 @@ import org.apache.maven.doxia.logging.PlexusLoggerWrapper; import org.apache.maven.doxia.module.site.SiteModule; import org.apache.maven.doxia.module.site.manager.SiteModuleManager; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.context.Context; import org.codehaus.plexus.logging.AbstractLogEnabled; @@ -49,7 +53,10 @@ import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.ReaderFactory; +import org.codehaus.plexus.util.xml.XmlStreamReader; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import org.codehaus.plexus.velocity.SiteResourceLoader; +import org.codehaus.plexus.velocity.VelocityComponent; /** * Abstract <code>document</code> renderer. @@ -69,6 +76,9 @@ /** @plexus.requirement */ protected Doxia doxia; + /** @plexus.requirement */ + private VelocityComponent velocity; + /** * The common base directory of source files. */ @@ -87,6 +97,7 @@ * @param documentModel the document model, containing all the metadata, etc. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any * @throws java.io.IOException if any + * @deprecated since 1.1.2, use {...@link #render(Map, File, DocumentModel, DocumentRendererContext)} */ public abstract void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException; @@ -99,14 +110,54 @@ public void render( Collection files, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException { - render( getFilesToProcess( files ), outputDirectory, documentModel ); + render( getFilesToProcess( files ), outputDirectory, documentModel, null ); } /** {...@inheritdoc} */ public void render( File baseDirectory, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException { - render( getFilesToProcess( baseDirectory ), outputDirectory, documentModel ); + render( baseDirectory, outputDirectory, documentModel, null ); + } + + /** + * Render an aggregate document from the files found in a Map. + * + * @param filesToProcess the Map of Files to process. The Map should contain as keys the paths of the + * source files (relative to {...@link #getBaseDir() baseDir}), and the corresponding SiteModule as values. + * @param outputDirectory the output directory where the aggregate document should be generated. + * @param documentModel the document model, containing all the metadata, etc. + * @param context the rendering context when processing files. + * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any + * @throws java.io.IOException if any + */ + public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel, + DocumentRendererContext context ) + throws DocumentRendererException, IOException + { + // nop + } + + /** + * Render a document from the files found in a source directory, depending on a rendering context. + * + * @param baseDirectory the directory containing the source files. + * This should follow the standard Maven convention, ie containing all the site modules. + * @param outputDirectory the output directory where the document should be generated. + * @param documentModel the document model, containing all the metadata, etc. + * If the model contains a TOC, only the files found in this TOC are rendered, + * otherwise all files found under baseDirectory will be processed. + * If the model is null, render all files from baseDirectory individually. + * @param context the rendering context when processing files. + * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any + * @throws java.io.IOException if any + * @since 1.1.2 + */ + public void render( File baseDirectory, File outputDirectory, DocumentModel documentModel, + DocumentRendererContext context ) + throws DocumentRendererException, IOException + { + render( getFilesToProcess( baseDirectory ), outputDirectory, documentModel, context ); } /** @@ -150,7 +201,7 @@ } else { - render( getFilesToProcess( baseDirectory ), outputDirectory, readDocumentModel( documentDescriptor ) ); + render( getFilesToProcess( baseDirectory ), outputDirectory, readDocumentModel( documentDescriptor ), null ); } } @@ -160,9 +211,11 @@ * @param filesToProcess the Map of Files to process. The Map should contain as keys the paths of the * source files (relative to {...@link #getBaseDir() baseDir}), and the corresponding SiteModule as values. * @param outputDirectory the output directory where the documents should be generated. + * @param context the rendering context. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any * @throws java.io.IOException if any * @since 1.1.1 + * @deprecated since 1.1.2, use {...@link #renderIndividual(Map, File, DocumentRendererContext)} */ public void renderIndividual( Map filesToProcess, File outputDirectory ) throws DocumentRendererException, IOException @@ -171,6 +224,23 @@ } /** + * Render documents separately for each file found in a Map. + * + * @param filesToProcess the Map of Files to process. The Map should contain as keys the paths of the + * source files (relative to {...@link #getBaseDir() baseDir}), and the corresponding SiteModule as values. + * @param outputDirectory the output directory where the documents should be generated. + * @param context the rendering context. + * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any + * @throws java.io.IOException if any + * @since 1.1.2 + */ + public void renderIndividual( Map filesToProcess, File outputDirectory, DocumentRendererContext context ) + throws DocumentRendererException, IOException + { + // nop + } + + /** * Returns a Map of files to process. The Map contains as keys the paths of the source files * (relative to {...@link #getBaseDir() baseDir}), and the corresponding SiteModule as values. * @@ -219,6 +289,19 @@ } } + List velocityFiles = new LinkedList( allFiles ); + // *.xml.vm + for ( Iterator it = velocityFiles.iterator(); it.hasNext(); ) + { + String name = it.next().toString().trim(); + + if ( !name.toLowerCase( Locale.ENGLISH ).endsWith( lowerCaseExtension + ".vm" ) ) + { + it.remove(); + } + } + docs.addAll( velocityFiles ); + for ( Iterator j = docs.iterator(); j.hasNext(); ) { String filePath = j.next().toString().trim(); @@ -349,10 +432,27 @@ * @param sink the sink to receive the events. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException in case of a parsing error. * @throws java.io.IOException if the source document cannot be opened. + * @deprecated since 1.1.2, use {...@link #parse(String, String, Sink, DocumentRendererContext)} */ protected void parse( String fullDocPath, String parserId, Sink sink ) throws DocumentRendererException, IOException { + parse( fullDocPath, parserId, sink, null ); + } + + /** + * Parse a source document into a sink. + * + * @param fullDocPath absolute path to the source document. + * @param parserId determines the parser to use. + * @param sink the sink to receive the events. + * @param context the rendering context. + * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException in case of a parsing error. + * @throws java.io.IOException if the source document cannot be opened. + */ + protected void parse( String fullDocPath, String parserId, Sink sink, DocumentRendererContext context ) + throws DocumentRendererException, IOException + { if ( getLogger().isDebugEnabled() ) { getLogger().debug( "Parsing file " + fullDocPath ); @@ -368,13 +468,33 @@ { case Parser.XML_TYPE: reader = ReaderFactory.newXmlReader( f ); + + if ( isVelocityFile( f ) ) + { + reader = getVelocityReader( f, ( (XmlStreamReader) reader ).getEncoding(), context ); + } break; case Parser.TXT_TYPE: case Parser.UNKNOWN_TYPE: default: - // TODO Platform dependent? - reader = ReaderFactory.newPlatformReader( f ); + if ( isVelocityFile( f ) ) + { + reader = + getVelocityReader( f, ( context == null ? ReaderFactory.FILE_ENCODING + : context.getInputEncoding() ), context ); + } + else + { + if ( context == null ) + { + reader = ReaderFactory.newPlatformReader( f ); + } + else + { + reader = ReaderFactory.newReader( f, context.getInputEncoding() ); + } + } } sink.enableLogging( new PlexusLoggerWrapper( getLogger() ) ); @@ -490,4 +610,54 @@ return documentModel.getOutputName(); } + + /** + * TODO: DOXIA-111: we need a general filter here that knows how to alter the context + * + * @param f the file to process, not null + * @param encoding the wanted encoding, not null + * @param context the current render document context not null + * @return a reader with + * @throws DocumentRendererException + */ + private Reader getVelocityReader( File f, String encoding, DocumentRendererContext context ) + throws DocumentRendererException + { + SiteResourceLoader.setResource( f.getAbsolutePath() ); + + Context velocityContext = new VelocityContext(); + + if ( context.getKeys() != null ) + { + for ( int i = 0; i < context.getKeys().length; i++ ) + { + String key = (String) context.getKeys()[i]; + + velocityContext.put( key, context.get( key ) ); + } + } + + StringWriter sw = new StringWriter(); + + try + { + velocity.getEngine().mergeTemplate( f.getAbsolutePath(), encoding, velocityContext, sw ); + } + catch ( Exception e ) + { + throw new DocumentRendererException( "Error whenn parsing Velocity file " + f.getAbsolutePath() + ": " + + e.getMessage(), e ); + } + + return new StringReader( sw.toString() ); + } + + /** + * @param f not null + * @return <code>true</code> if file has a vm extension, <code>false</false> otherwise. + */ + private static boolean isVelocityFile( File f ) + { + return FileUtils.getExtension( f.getAbsolutePath() ).toLowerCase( Locale.ENGLISH ).endsWith( "vm" ); + } } Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRenderer.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRenderer.java?rev=800802&r1=800801&r2=800802&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRenderer.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRenderer.java Tue Aug 4 14:02:47 2009 @@ -66,10 +66,29 @@ * If the model is null, render all files from baseDirectory individually. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any * @throws java.io.IOException if any +// * @deprecated since 1.1.2, use {...@link #render(File, File, DocumentModel, DocumentRendererContext)} */ void render( File baseDirectory, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException; +// /** +// * Render a document from the files found in a source directory, depending on a rendering context. +// * +// * @param baseDirectory the directory containing the source files. +// * This should follow the standard Maven convention, ie containing all the site modules. +// * @param outputDirectory the output directory where the document should be generated. +// * @param documentModel the document model, containing all the metadata, etc. +// * If the model contains a TOC, only the files found in this TOC are rendered, +// * otherwise all files found under baseDirectory will be processed. +// * If the model is null, render all files from baseDirectory individually. +// * @param context the rendering context when processing files. +// * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any +// * @throws java.io.IOException if any +// * @since 1.1.2 +// */ +// void render( File baseDirectory, File outputDirectory, DocumentModel documentModel, DocumentRendererContext context ) +// throws DocumentRendererException, IOException; + /** * Read a document model from a file. * Added: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java?rev=800802&view=auto ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java (added) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java Tue Aug 4 14:02:47 2009 @@ -0,0 +1,141 @@ +package org.apache.maven.doxia.docrenderer; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.HashMap; +import java.util.Map; + +import org.codehaus.plexus.util.ReaderFactory; + +/** + * Context when processing Velocity files using a {...@link java.util.HashMap} for data storage. + * + * @author <a href="mailto:vincent.sive...@gmail.com">Vincent Siveton</a> + * @version $Id$ + * @since 1.1.2 + */ +public class DocumentRendererContext +{ + private String inputEncoding = ReaderFactory.UTF_8; + + /** + * Storage for key/value pairs. + */ + private final Map context; + + /** + * Default constructor. + */ + public DocumentRendererContext() + { + context = new HashMap(); + } + + /** + * @return The input encoding when processing files. + */ + public String getInputEncoding() + { + return inputEncoding; + } + + /** + * @param inputEncoding new input encoding value when processing files. + */ + public void setInputEncoding( String inputEncoding ) + { + this.inputEncoding = inputEncoding; + } + + /** + * Adds a name/value pair to the context. + * + * @param key The name to key the provided value with. + * @param value The corresponding value. + * @return Object that was replaced in the the Context if applicable or null if not. + */ + public Object put( String key, Object value ) + { + if ( key == null ) + { + return null; + } + + return context.put( key, value ); + } + + /** + * Gets the value corresponding to the provided key from the context. + * + * @param key The name of the desired value. + * @return The value corresponding to the provided key or null if the key param is null. + */ + public Object get( String key ) + { + if ( key == null ) + { + return null; + } + + return context.get( key ); + } + + /** + * Indicates whether the specified key is in the context. + * + * @param key The key to look for. + * @return true if the key is in the context, false if not. + */ + public boolean containsKey( Object key ) + { + if ( key == null ) + { + return false; + } + + return context.containsKey( key ); + } + + /** + * Get all the keys for the values in the context + * + * @return Object[] of keys in the Context. + */ + public Object[] getKeys() + { + return context.keySet().toArray(); + } + + /** + * Removes the value associated with the specified key from the context. + * + * @param key The name of the value to remove. + * @return The value that the key was mapped to, or <code>null</code> if unmapped. + */ + public Object remove( Object key ) + { + if ( key == null ) + { + return null; + } + + return context.remove( key ); + } +} Propchange: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/DocumentRendererContext.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/AbstractPdfRenderer.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/AbstractPdfRenderer.java?rev=800802&r1=800801&r2=800802&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/AbstractPdfRenderer.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/AbstractPdfRenderer.java Tue Aug 4 14:02:47 2009 @@ -19,7 +19,14 @@ * under the License. */ +import java.io.File; +import java.io.IOException; +import java.util.Map; + import org.apache.maven.doxia.docrenderer.AbstractDocumentRenderer; +import org.apache.maven.doxia.docrenderer.DocumentRendererContext; +import org.apache.maven.doxia.docrenderer.DocumentRendererException; +import org.apache.maven.doxia.document.DocumentModel; /** * Abstract pdf renderer, this doesn't depend on the framework. @@ -37,4 +44,11 @@ { return "pdf"; } + + /** {...@inheritdoc} */ + public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) + throws DocumentRendererException, IOException + { + render( filesToProcess, outputDirectory, documentModel, null ); + } } Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java?rev=800802&r1=800801&r2=800802&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java Tue Aug 4 14:02:47 2009 @@ -29,6 +29,7 @@ import javax.xml.transform.TransformerException; +import org.apache.maven.doxia.docrenderer.DocumentRendererContext; import org.apache.maven.doxia.docrenderer.DocumentRendererException; import org.apache.maven.doxia.docrenderer.pdf.AbstractPdfRenderer; import org.apache.maven.doxia.document.DocumentModel; @@ -72,6 +73,13 @@ public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException { + render( filesToProcess, outputDirectory, documentModel, null ); + } + + /** {...@inheritdoc} */ + public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel, DocumentRendererContext context ) + throws DocumentRendererException, IOException + { // copy resources, images, etc. copyResources( outputDirectory ); @@ -79,7 +87,7 @@ { getLogger().debug( "No document model, generating all documents individually." ); - renderIndividual( filesToProcess, outputDirectory ); + renderIndividual( filesToProcess, outputDirectory, context ); return; } @@ -124,13 +132,13 @@ { getLogger().info( "No TOC is defined in the document descriptor. Merging all documents." ); - mergeAllSources( filesToProcess, sink ); + mergeAllSources( filesToProcess, sink, context ); } else { getLogger().debug( "Using TOC defined in the document descriptor." ); - mergeSourcesFromTOC( documentModel.getToc(), sink ); + mergeSourcesFromTOC( documentModel.getToc(), sink, context ); } sink.endDocument(); @@ -147,6 +155,13 @@ public void renderIndividual( Map filesToProcess, File outputDirectory ) throws DocumentRendererException, IOException { + renderIndividual( filesToProcess, outputDirectory, null ); + } + + /** {...@inheritdoc} */ + public void renderIndividual( Map filesToProcess, File outputDirectory, DocumentRendererContext context ) + throws DocumentRendererException, IOException + { for ( Iterator j = filesToProcess.keySet().iterator(); j.hasNext(); ) { String key = (String) j.next(); @@ -177,14 +192,14 @@ FoSink sink = (FoSink) new FoSinkFactory().createSink( outputFOFile.getParentFile(), outputFOFile.getName() ); sink.beginDocument(); - parse( fullDoc.getAbsolutePath(), module.getParserId(), sink ); + parse( fullDoc.getAbsolutePath(), module.getParserId(), sink, context ); sink.endDocument(); generatePdf( outputFOFile, pdfOutputFile, null ); } } - private void mergeAllSources( Map filesToProcess, FoAggregateSink sink ) + private void mergeAllSources( Map filesToProcess, FoAggregateSink sink, DocumentRendererContext context ) throws DocumentRendererException, IOException { for ( Iterator j = filesToProcess.keySet().iterator(); j.hasNext(); ) @@ -194,17 +209,17 @@ sink.setDocumentName( key ); File fullDoc = new File( getBaseDir(), module.getSourceDirectory() + File.separator + key ); - parse( fullDoc.getAbsolutePath(), module.getParserId(), sink ); + parse( fullDoc.getAbsolutePath(), module.getParserId(), sink, context ); } } - private void mergeSourcesFromTOC( DocumentTOC toc, FoAggregateSink sink ) + private void mergeSourcesFromTOC( DocumentTOC toc, FoAggregateSink sink, DocumentRendererContext context ) throws IOException, DocumentRendererException { - parseTocItems( toc.getItems(), sink ); + parseTocItems( toc.getItems(), sink, context ); } - private void parseTocItems( List items, FoAggregateSink sink ) + private void parseTocItems( List items, FoAggregateSink sink, DocumentRendererContext context ) throws IOException, DocumentRendererException { for ( Iterator k = items.iterator(); k.hasNext(); ) @@ -227,16 +242,16 @@ href = href.substring( 0, href.lastIndexOf( "." ) ); } - renderModules( href, sink, tocItem ); + renderModules( href, sink, tocItem, context ); if ( tocItem.getItems() != null ) { - parseTocItems( tocItem.getItems(), sink ); + parseTocItems( tocItem.getItems(), sink, context ); } } } - private void renderModules( String href, FoAggregateSink sink, DocumentTOCItem tocItem ) + private void renderModules( String href, FoAggregateSink sink, DocumentTOCItem tocItem, DocumentRendererContext context ) throws DocumentRendererException, IOException { for ( Iterator i = siteModuleManager.getSiteModules().iterator(); i.hasNext(); ) @@ -249,12 +264,19 @@ String doc = href + "." + module.getExtension(); File source = new File( moduleBasedir, doc ); + // Velocity file? + if ( !source.exists() ) + { + doc = href + "." + module.getExtension() + ".vm"; + source = new File( moduleBasedir, doc ); + } + if ( source.exists() ) { sink.setDocumentName( doc ); sink.setDocumentTitle( tocItem.getName() ); - parse( source.getPath(), module.getParserId(), sink ); + parse( source.getPath(), module.getParserId(), sink, context ); } } } Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java?rev=800802&r1=800801&r2=800802&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java Tue Aug 4 14:02:47 2009 @@ -47,6 +47,7 @@ import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import org.apache.maven.doxia.docrenderer.DocumentRendererContext; import org.apache.maven.doxia.docrenderer.DocumentRendererException; import org.apache.maven.doxia.docrenderer.pdf.AbstractPdfRenderer; import org.apache.maven.doxia.document.DocumentCover; @@ -133,6 +134,13 @@ public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException { + render( filesToProcess, outputDirectory, documentModel, null ); + } + + /** {...@inheritdoc} */ + public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel, DocumentRendererContext context ) + throws DocumentRendererException, IOException + { // copy resources, images, etc. copyResources( outputDirectory ); @@ -140,7 +148,7 @@ { getLogger().debug( "No document model, generating all documents individually." ); - renderIndividual( filesToProcess, outputDirectory ); + renderIndividual( filesToProcess, outputDirectory, context ); return; } @@ -163,13 +171,13 @@ { getLogger().info( "No TOC is defined in the document descriptor. Merging all documents." ); - iTextFiles = parseAllFiles( filesToProcess, outputDirectory ); + iTextFiles = parseAllFiles( filesToProcess, outputDirectory, context ); } else { getLogger().debug( "Using TOC defined in the document descriptor." ); - iTextFiles = parseTOCFiles( outputDirectory, documentModel ); + iTextFiles = parseTOCFiles( outputDirectory, documentModel, context ); } File iTextFile = new File( outputDirectory, outputName + ".xml" ); @@ -183,6 +191,13 @@ public void renderIndividual( Map filesToProcess, File outputDirectory ) throws DocumentRendererException, IOException { + renderIndividual( filesToProcess, outputDirectory, null ); + } + + /** {...@inheritdoc} */ + public void renderIndividual( Map filesToProcess, File outputDirectory, DocumentRendererContext context ) + throws DocumentRendererException, IOException + { for ( Iterator it = filesToProcess.keySet().iterator(); it.hasNext(); ) { String key = (String) it.next(); @@ -209,7 +224,7 @@ pdfOutputFile.getParentFile().mkdirs(); } - parse( fullDoc, module, outputITextFile ); + parse( fullDoc, module, outputITextFile, context ); generatePdf( outputITextFile, pdfOutputFile ); } @@ -229,7 +244,7 @@ * @throws DocumentRendererException in case of a parsing problem. * @throws IOException if the source and/or target document cannot be opened. */ - private void parse( File fullDoc, SiteModule module, File iTextFile ) + private void parse( File fullDoc, SiteModule module, File iTextFile, DocumentRendererContext context ) throws DocumentRendererException, IOException { if ( getLogger().isDebugEnabled() ) @@ -248,7 +263,7 @@ sink.setClassLoader( new URLClassLoader( new URL[] { iTextFile.getParentFile().toURI().toURL() } ) ); - parse( fullDoc.getAbsolutePath(), module.getParserId(), sink ); + parse( fullDoc.getAbsolutePath(), module.getParserId(), sink, context ); } finally { @@ -494,7 +509,7 @@ * @throws IOException if any * @since 1.1.1 */ - private List parseAllFiles( Map filesToProcess, File outputDirectory ) + private List parseAllFiles( Map filesToProcess, File outputDirectory, DocumentRendererContext context ) throws DocumentRendererException, IOException { List iTextFiles = new LinkedList(); @@ -513,7 +528,7 @@ } iTextFiles.add( outputITextFileTmp ); - parse( fullDoc, module, outputITextFileTmp ); + parse( fullDoc, module, outputITextFileTmp, context ); } return iTextFiles; @@ -527,7 +542,7 @@ * @throws IOException if any * @since 1.1.1 */ - private List parseTOCFiles( File outputDirectory, DocumentModel documentModel ) + private List parseTOCFiles( File outputDirectory, DocumentModel documentModel, DocumentRendererContext context ) throws DocumentRendererException, IOException { List iTextFiles = new LinkedList(); @@ -559,6 +574,13 @@ String doc = href + "." + module.getExtension(); File source = new File( moduleBasedir, doc ); + // Velocity file? + if ( !source.exists() ) + { + doc = href + "." + module.getExtension() + ".vm"; + source = new File( moduleBasedir, doc ); + } + if ( source.exists() ) { String outputITextName = doc.substring( 0, doc.lastIndexOf( "." ) + 1 ) + "xml"; @@ -570,7 +592,7 @@ } iTextFiles.add( outputITextFileTmp ); - parse( source, module, outputITextFileTmp ); + parse( source, module, outputITextFileTmp, context ); } } }