Author: vsiveton Date: Sun Jun 7 13:32:11 2009 New Revision: 782388 URL: http://svn.apache.org/viewvc?rev=782388&view=rev Log: DOXIASITETOOLS-25: Add a way to render all sources individually in addition to an aggregated document
o add logic for documentModel, ie if null, generate all documents individually o update code to take care of null DocumentModel Modified: 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/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/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=782388&r1=782387&r2=782388&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 Sun Jun 7 13:32:11 2009 @@ -79,11 +79,11 @@ //-------------------------------------------- /** - * Render a document from the files found in a Map. + * 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 document should be generated. + * @param outputDirectory the output directory where the aggregate document should be generated. * @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 @@ -91,6 +91,19 @@ public abstract void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException; + /** + * 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. + * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any + * @throws java.io.IOException if any + * @since 1.1.1 + */ + public abstract void renderIndividual( Map filesToProcess, File outputDirectory ) + throws DocumentRendererException, IOException; + //-------------------------------------------- // //-------------------------------------------- @@ -118,11 +131,12 @@ * @param outputDirectory the output directory where the document should be generated. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any * @throws java.io.IOException if any + * @see #render(File, File, DocumentModel) */ public void render( File baseDirectory, File outputDirectory ) throws DocumentRendererException, IOException { - render( baseDirectory, outputDirectory, new DocumentModel() ); + render( baseDirectory, outputDirectory, (DocumentModel) null ); } /** @@ -135,6 +149,8 @@ * If this file does not exist or is null, some default settings will be used. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any * @throws java.io.IOException if any + * @see #render(File, File) if documentDescriptor does not exist or is null + * @see #render(Map, File, DocumentModel) otherwise */ public void render( File baseDirectory, File outputDirectory, File documentDescriptor ) throws DocumentRendererException, IOException @@ -340,6 +356,11 @@ protected void parse( String fullDocPath, String parserId, Sink sink ) throws DocumentRendererException, IOException { + if ( getLogger().isDebugEnabled() ) + { + getLogger().debug( "Parsing file " + fullDocPath ); + } + Reader reader = null; try { @@ -391,10 +412,17 @@ { File resourcesDirectory = new File( getBaseDir(), "resources" ); - if ( resourcesDirectory.isDirectory() && outputDirectory.isDirectory() ) + if ( !resourcesDirectory.isDirectory() ) { - copyDirectory( resourcesDirectory, outputDirectory ); + return; } + + if ( !outputDirectory.exists() ) + { + outputDirectory.mkdirs(); + } + + copyDirectory( resourcesDirectory, outputDirectory ); } /** @@ -435,4 +463,34 @@ } } } + + /** + * @param documentModel not null + * @return the output name defined in the documentModel without the output extension. If the output name is not + * defined, return target by default. + * @since 1.1.1 + * @see org.apache.maven.doxia.document.DocumentModel#getOutputName() + * @see #getOutputExtension() + */ + protected String getOutputName( DocumentModel documentModel ) + { + String outputName = documentModel.getOutputName(); + if ( outputName == null ) + { + getLogger().info( "No outputName is defined in the document descriptor. Using 'target'" ); + + documentModel.setOutputName( "target" ); + } + + outputName = outputName.trim(); + if ( outputName.toLowerCase( Locale.ENGLISH ).endsWith( "." + getOutputExtension() ) ) + { + outputName = + outputName.substring( 0, outputName.toLowerCase( Locale.ENGLISH ) + .lastIndexOf( "." + getOutputExtension() ) ); + } + documentModel.setOutputName( outputName ); + + return documentModel.getOutputName(); + } } 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=782388&r1=782387&r2=782388&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 Sun Jun 7 13:32:11 2009 @@ -47,6 +47,7 @@ * @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 from the Collection of files will be processed. + * If the model is null, render all files individually. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any. * @throws java.io.IOException if any. */ @@ -62,6 +63,7 @@ * @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. * @throws org.apache.maven.doxia.docrenderer.DocumentRendererException if any * @throws java.io.IOException if any */ 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=782388&r1=782387&r2=782388&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 Sun Jun 7 13:32:11 2009 @@ -35,6 +35,8 @@ import org.apache.maven.doxia.document.DocumentTOC; import org.apache.maven.doxia.document.DocumentTOCItem; import org.apache.maven.doxia.module.fo.FoAggregateSink; +import org.apache.maven.doxia.module.fo.FoSink; +import org.apache.maven.doxia.module.fo.FoSinkFactory; import org.apache.maven.doxia.module.fo.FoUtils; import org.apache.maven.doxia.module.site.SiteModule; @@ -70,41 +72,31 @@ public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException { - String outputName = documentModel.getOutputName(); + // copy resources, images, etc. + copyResources( outputDirectory ); - if ( outputName == null ) + if ( documentModel == null ) { - getLogger().info( "No outputName is defined in the document descriptor. Using 'target.pdf'" ); + getLogger().debug( "No document model, generating all documents individually." ); - documentModel.setOutputName( "target" ); - } - - outputName = outputName.trim(); - if ( outputName.toLowerCase( Locale.ENGLISH ).endsWith( ".pdf" ) ) - { - documentModel.setOutputName( outputName.substring( 0, outputName.toLowerCase( Locale.ENGLISH ) - .lastIndexOf( ".pdf" ) ) ); + renderIndividual( filesToProcess, outputDirectory ); + return; } - outputName = documentModel.getOutputName(); + String outputName = getOutputName( documentModel ); File outputFOFile = new File( outputDirectory, outputName + ".fo" ); - if ( !outputFOFile.getParentFile().exists() ) { outputFOFile.getParentFile().mkdirs(); } File pdfOutputFile = new File( outputDirectory, outputName + ".pdf" ); - if ( !pdfOutputFile.getParentFile().exists() ) { pdfOutputFile.getParentFile().mkdirs(); } - // copy resources, images, etc. - copyResources( outputDirectory ); - Writer writer = null; try { @@ -136,6 +128,8 @@ } else { + getLogger().debug( "Using TOC defined in the document descriptor." ); + mergeSourcesFromTOC( documentModel.getToc(), sink ); } @@ -149,22 +143,58 @@ generatePdf( outputFOFile, pdfOutputFile, documentModel ); } - private void mergeAllSources( Map filesToProcess, FoAggregateSink sink ) - throws DocumentRendererException, IOException + /** {...@inheritdoc} */ + public void renderIndividual( Map filesToProcess, File outputDirectory ) + throws DocumentRendererException, IOException { for ( Iterator j = filesToProcess.keySet().iterator(); j.hasNext(); ) { String key = (String) j.next(); SiteModule module = (SiteModule) filesToProcess.get( key ); - sink.setDocumentName( key ); - String fullDocPath = getBaseDir() + File.separator + module.getSourceDirectory() + File.separator + key; - if ( getLogger().isDebugEnabled() ) + File fullDoc = new File( getBaseDir(), module.getSourceDirectory() + File.separator + key ); + + String output = key; + String lowerCaseExtension = module.getExtension().toLowerCase( Locale.ENGLISH ); + if ( output.toLowerCase( Locale.ENGLISH ).indexOf( "." + lowerCaseExtension ) != -1 ) + { + output = + output.substring( 0, output.toLowerCase( Locale.ENGLISH ).indexOf( "." + lowerCaseExtension ) ); + } + + File outputFOFile = new File( outputDirectory, output + ".fo" ); + if ( !outputFOFile.getParentFile().exists() ) { - getLogger().debug( "Parsing file " + fullDocPath ); + outputFOFile.getParentFile().mkdirs(); } - parse( fullDocPath, module.getParserId(), sink ); + File pdfOutputFile = new File( outputDirectory, output + ".pdf" ); + if ( !pdfOutputFile.getParentFile().exists() ) + { + pdfOutputFile.getParentFile().mkdirs(); + } + + FoSink sink = + (FoSink) new FoSinkFactory().createSink( outputFOFile.getParentFile(), outputFOFile.getName() ); + sink.beginDocument(); + parse( fullDoc.getAbsolutePath(), module.getParserId(), sink ); + sink.endDocument(); + + generatePdf( outputFOFile, pdfOutputFile, null ); + } + } + + private void mergeAllSources( Map filesToProcess, FoAggregateSink sink ) + throws DocumentRendererException, IOException + { + for ( Iterator j = filesToProcess.keySet().iterator(); j.hasNext(); ) + { + String key = (String) j.next(); + SiteModule module = (SiteModule) filesToProcess.get( key ); + sink.setDocumentName( key ); + File fullDoc = new File( getBaseDir(), module.getSourceDirectory() + File.separator + key ); + + parse( fullDoc.getAbsolutePath(), module.getParserId(), sink ); } } @@ -192,7 +222,6 @@ } String href = StringUtils.replace( tocItem.getRef(), "\\", "/" ); - if ( href.lastIndexOf( "." ) != -1 ) { href = href.substring( 0, href.lastIndexOf( "." ) ); @@ -222,11 +251,6 @@ if ( source.exists() ) { - if ( getLogger().isDebugEnabled() ) - { - getLogger().debug( "Parsing file " + source ); - } - sink.setDocumentName( doc ); sink.setDocumentTitle( tocItem.getName() ); 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=782388&r1=782387&r2=782388&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 Sun Jun 7 13:32:11 2009 @@ -28,7 +28,9 @@ import java.net.URLClassLoader; import java.util.Date; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import javax.xml.parsers.DocumentBuilderFactory; @@ -45,12 +47,14 @@ import org.apache.maven.doxia.docrenderer.DocumentRendererException; import org.apache.maven.doxia.docrenderer.pdf.AbstractPdfRenderer; import org.apache.maven.doxia.document.DocumentModel; +import org.apache.maven.doxia.document.DocumentTOCItem; import org.apache.maven.doxia.module.itext.ITextSink; import org.apache.maven.doxia.module.itext.ITextSinkFactory; import org.apache.maven.doxia.module.itext.ITextUtil; import org.apache.maven.doxia.module.site.SiteModule; import org.apache.xml.utils.DefaultErrorHandler; import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.WriterFactory; import org.w3c.dom.DOMException; import org.w3c.dom.Document; @@ -109,71 +113,91 @@ } /** {...@inheritdoc} */ - public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) + public void render( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) throws DocumentRendererException, IOException { - String outputName = documentModel.getOutputName(); + // copy resources, images, etc. + copyResources( outputDirectory ); - if ( outputName == null ) + if ( documentModel == null ) { - if ( getLogger().isInfoEnabled() ) - { - getLogger().info( "No outputName is defined in the document descriptor. Using 'target.pdf'" ); - } + getLogger().debug( "No document model, generating all documents individually." ); - documentModel.setOutputName( "target" ); + renderIndividual( filesToProcess, outputDirectory ); + return; } - else if ( outputName.lastIndexOf( "." ) != -1 ) + + String outputName = getOutputName( documentModel ); + + File outputITextFile = new File( outputDirectory, outputName + ".xml" ); + if ( !outputITextFile.getParentFile().exists() ) { - documentModel.setOutputName( outputName.substring( 0, outputName.lastIndexOf( "." ) ) ); + outputITextFile.getParentFile().mkdirs(); } -// TODO: adjust from o.a.m.d.docrenderer.itext.AbstractITextRender -// if ( ( documentModel.getToc() == null ) || ( documentModel.getToc().getItems() == null ) ) -// { -// getLogger().info( "No TOC is defined in the document descriptor. Generating all documents." ); - - for ( Iterator j = filesToProcess.keySet().iterator(); j.hasNext(); ) - { - String key = (String) j.next(); + File pdfOutputFile = new File( outputDirectory, outputName + ".pdf" ); + if ( !pdfOutputFile.getParentFile().exists() ) + { + pdfOutputFile.getParentFile().mkdirs(); + } - SiteModule module = (SiteModule) filesToProcess.get( key ); + List iTextFiles; + if ( ( documentModel.getToc() == null ) || ( documentModel.getToc().getItems() == null ) ) + { + getLogger().info( "No TOC is defined in the document descriptor. Merging all documents." ); + iTextFiles = parseAllFiles( filesToProcess, outputDirectory ); + } + else + { + getLogger().debug( "Using TOC defined in the document descriptor." ); - String fullDocPath = getBaseDir() + File.separator - + module.getSourceDirectory() + File.separator + key; + iTextFiles = parseTOCFiles( filesToProcess, outputDirectory, documentModel ); + } - String iTextFileName = key.substring( 0, key.indexOf( "." ) + 1 ) + "xml"; + File iTextFile = new File( outputDirectory, outputName + ".xml" ); + File iTextOutput = new File( outputDirectory, outputName + "." + getOutputExtension() ); + Document document = generateDocument( iTextFiles ); + transform( documentModel, document, iTextFile ); + generatePdf( iTextFile, iTextOutput ); + } - File iTextFile = new File( outputDirectory, iTextFileName ); - if ( !iTextFile.getParentFile().exists() ) - { - iTextFile.getParentFile().mkdirs(); - } + /** {...@inheritdoc} */ + public void renderIndividual( Map filesToProcess, File outputDirectory ) + throws DocumentRendererException, IOException + { + for ( Iterator it = filesToProcess.keySet().iterator(); it.hasNext(); ) + { + String key = (String) it.next(); + SiteModule module = (SiteModule) filesToProcess.get( key ); + File fullDoc = new File( getBaseDir(), module.getSourceDirectory() + File.separator + key ); + + String output = key; + String lowerCaseExtension = module.getExtension().toLowerCase( Locale.ENGLISH ); + if ( output.toLowerCase( Locale.ENGLISH ).indexOf( "." + lowerCaseExtension ) != -1 ) + { + output = + output.substring( 0, output.toLowerCase( Locale.ENGLISH ).indexOf( "." + lowerCaseExtension ) ); + } - String pdfFileName = key.substring( 0, key.indexOf( "." ) + 1 ) + getOutputExtension(); + File outputITextFile = new File( outputDirectory, output + ".xml" ); + if ( !outputITextFile.getParentFile().exists() ) + { + outputITextFile.getParentFile().mkdirs(); + } - File pdfFile = new File( outputDirectory, pdfFileName ); - if ( !pdfFile.getParentFile().exists() ) - { - pdfFile.getParentFile().mkdirs(); - } + File pdfOutputFile = new File( outputDirectory, output + ".pdf" ); + if ( !pdfOutputFile.getParentFile().exists() ) + { + pdfOutputFile.getParentFile().mkdirs(); + } - parse( fullDocPath, module, iTextFile ); + parse( fullDoc, module, outputITextFile ); - generatePdf( iTextFile, pdfFile ); - } -/* + generatePdf( outputITextFile, pdfOutputFile ); } - else - { - // TODO: adjust from o.a.m.d.docrenderer.itext.AbstractITextRender - } -*/ - } - //-------------------------------------------- // //-------------------------------------------- @@ -182,15 +206,20 @@ /** * Parse a source document and emit results into a sink. * - * @param fullDocPath absolute path to the source document. + * @param fullDocPath file to the source document. * @param module the site module associated with the source document (determines the parser to use). * @param iTextFile the resulting iText xml file. * @throws DocumentRendererException in case of a parsing problem. * @throws IOException if the source and/or target document cannot be opened. */ - private void parse( String fullDocPath, SiteModule module, File iTextFile ) + private void parse( File fullDoc, SiteModule module, File iTextFile ) throws DocumentRendererException, IOException { + if ( getLogger().isDebugEnabled() ) + { + getLogger().debug( "Parsing file " + fullDoc.getAbsolutePath() ); + } + System.setProperty( "itext.basedir", iTextFile.getParentFile().getAbsolutePath() ); Writer writer = null; @@ -202,7 +231,7 @@ sink.setClassLoader( new URLClassLoader( new URL[] { iTextFile.getParentFile().toURI().toURL() } ) ); - parse( fullDocPath, module.getParserId(), sink ); + parse( fullDoc.getAbsolutePath(), module.getParserId(), sink ); } finally { @@ -318,10 +347,15 @@ * Add transformer parameters from a DocumentModel. * * @param transformer the Transformer to set the parameters. - * @param documentModel the DocumentModel to take the parameters from. + * @param documentModel the DocumentModel to take the parameters from, could be null. */ private void addTransformerParameters( Transformer transformer, DocumentModel documentModel ) { + if ( documentModel == null ) + { + return; + } + if ( documentModel.getMeta().getTitle() != null ) { transformer.setParameter( "title", documentModel.getMeta().getTitle() ); @@ -368,7 +402,7 @@ /** * Transform a document to an iTextFile. * - * @param documentModel the DocumentModel to take the parameters from. + * @param documentModel the DocumentModel to take the parameters from, could be null. * @param document the Document to transform. * @param iTextFile the resulting iText xml file. * @throws DocumentRendererException in case of a transformation error. @@ -389,4 +423,95 @@ throw new DocumentRendererException( "Error transforming Document " + document + ": " + e.getMessage() ); } } + + /** + * @param filesToProcess not null + * @param outputDirectory not null + * @return a list of all parsed files. + * @throws DocumentRendererException if any + * @throws IOException if any + * @since 1.1.1 + */ + private List parseAllFiles( Map filesToProcess, File outputDirectory ) + throws DocumentRendererException, IOException + { + List iTextFiles = new LinkedList(); + for ( Iterator it = filesToProcess.keySet().iterator(); it.hasNext(); ) + { + String key = (String) it.next(); + SiteModule module = (SiteModule) filesToProcess.get( key ); + File fullDoc = new File( getBaseDir(), module.getSourceDirectory() + File.separator + key ); + + String outputITextName = key.substring( 0, key.lastIndexOf( "." ) + 1 ) + "xml"; + File outputITextFileTmp = new File( outputDirectory, outputITextName ); + if ( !outputITextFileTmp.getParentFile().exists() ) + { + outputITextFileTmp.getParentFile().mkdirs(); + } + + iTextFiles.add( outputITextFileTmp ); + parse( fullDoc, module, outputITextFileTmp ); + } + + return iTextFiles; + } + + /** + * @param filesToProcess not null + * @param outputDirectory not null + * @return a list of all parsed files. + * @throws DocumentRendererException if any + * @throws IOException if any + * @since 1.1.1 + */ + private List parseTOCFiles( Map filesToProcess, File outputDirectory, DocumentModel documentModel ) + throws DocumentRendererException, IOException + { + List iTextFiles = new LinkedList(); + for ( Iterator it = documentModel.getToc().getItems().iterator(); it.hasNext(); ) + { + DocumentTOCItem tocItem = (DocumentTOCItem) it.next(); + + if ( tocItem.getRef() == null ) + { + getLogger().debug( + "No ref defined for the tocItem '" + tocItem.getName() + + "' in the document descriptor. IGNORING" ); + continue; + } + + String href = StringUtils.replace( tocItem.getRef(), "\\", "/" ); + if ( href.lastIndexOf( "." ) != -1 ) + { + href = href.substring( 0, href.lastIndexOf( "." ) ); + } + + for ( Iterator i = siteModuleManager.getSiteModules().iterator(); i.hasNext(); ) + { + SiteModule module = (SiteModule) i.next(); + File moduleBasedir = new File( getBaseDir(), module.getSourceDirectory() ); + + if ( moduleBasedir.exists() ) + { + String doc = href + "." + module.getExtension(); + File source = new File( moduleBasedir, doc ); + + if ( source.exists() ) + { + String outputITextName = doc.substring( 0, doc.lastIndexOf( "." ) + 1 ) + "xml"; + File outputITextFileTmp = new File( outputDirectory, outputITextName ); + if ( !outputITextFileTmp.getParentFile().exists() ) + { + outputITextFileTmp.getParentFile().mkdirs(); + } + + iTextFiles.add( outputITextFileTmp ); + parse( source, module, outputITextFileTmp ); + } + } + } + } + + return iTextFiles; + } }