You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/08/22 18:39:35 UTC

svn commit: r568696 - in /maven/sandbox/trunk/doxia/doxia-book: pom.xml src/main/java/org/apache/maven/doxia/book/DefaultBookDoxia.java src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java

Author: jdcasey
Date: Wed Aug 22 09:39:32 2007
New Revision: 568696

URL: http://svn.apache.org/viewvc?rev=568696&view=rev
Log:
[MSANDBOX-32] Adding docbook book renderer implementation.

Added:
    maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java   (with props)
Modified:
    maven/sandbox/trunk/doxia/doxia-book/pom.xml
    maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/DefaultBookDoxia.java

Modified: maven/sandbox/trunk/doxia/doxia-book/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-book/pom.xml?rev=568696&r1=568695&r2=568696&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-book/pom.xml (original)
+++ maven/sandbox/trunk/doxia/doxia-book/pom.xml Wed Aug 22 09:39:32 2007
@@ -67,6 +67,11 @@
       <artifactId>doxia-module-latex</artifactId>
       <version>1.0-alpha-9-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>doxia-module-docbook-simple</artifactId>
+      <version>1.0-alpha-9-SNAPSHOT</version>
+    </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-i18n</artifactId>

Modified: maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/DefaultBookDoxia.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/DefaultBookDoxia.java?rev=568696&r1=568695&r2=568696&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/DefaultBookDoxia.java (original)
+++ maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/DefaultBookDoxia.java Wed Aug 22 09:39:32 2007
@@ -111,11 +111,13 @@
         // Render the book
         // ----------------------------------------------------------------------
 
+        System.out.println( "Book-renderers available: " + bookRenderers.keySet() );
+        
         BookRenderer bookRenderer = (BookRenderer) bookRenderers.get( bookRendererId );
 
         if ( bookRenderer == null )
         {
-            throw new BookDoxiaException( "No such book rendered '" + bookRendererId + "'." );
+            throw new BookDoxiaException( "No such book renderer '" + bookRendererId + "'." );
         }
 
         bookRenderer.renderBook( context );

Added: maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java?rev=568696&view=auto
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java (added)
+++ maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java Wed Aug 22 09:39:32 2007
@@ -0,0 +1,134 @@
+package org.apache.maven.doxia.book.services.renderer;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
+
+import org.apache.maven.doxia.Doxia;
+import org.apache.maven.doxia.book.BookDoxiaException;
+import org.apache.maven.doxia.book.context.BookContext;
+import org.apache.maven.doxia.book.model.BookModel;
+import org.apache.maven.doxia.book.model.Chapter;
+import org.apache.maven.doxia.book.model.Section;
+import org.apache.maven.doxia.module.docbook.DocBookSink;
+import org.apache.maven.doxia.parser.ParseException;
+import org.apache.maven.doxia.parser.manager.ParserNotFoundException;
+import org.apache.maven.doxia.sink.Sink;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+/**
+ * An implementation of <code>BookRenderer</code> for docbook
+ * 
+ * @plexus.component role-hint="doc-book"
+ * 
+ * @author Eric Redmond
+ */
+public class DocbookBookRenderer extends AbstractLogEnabled implements BookRenderer
+{
+    /**
+     * @plexus.requirement
+     */
+    private Doxia doxia;
+
+    // ----------------------------------------------------------------------
+    // BookRenderer Implementation
+    // ----------------------------------------------------------------------
+
+    public void renderBook( BookContext context ) throws BookDoxiaException
+    {
+        BookModel book = context.getBook();
+
+        if ( !context.getOutputDirectory().exists() )
+        {
+            if ( !context.getOutputDirectory().mkdirs() )
+            {
+                throw new BookDoxiaException( "Could not make directory: "
+                                + context.getOutputDirectory().getAbsolutePath() + "." );
+            }
+        }
+
+        File bookFile = new File( context.getOutputDirectory(), book.getId() + ".xml" );
+
+        FileWriter fileWriter;
+
+        try
+        {
+            fileWriter = new FileWriter( bookFile );
+        }
+        catch ( IOException e )
+        {
+            throw new BookDoxiaException( "Error while opening file.", e );
+        }
+
+        // ----------------------------------------------------------------------
+        // Create the Dockbook File
+        // ----------------------------------------------------------------------
+
+        // TODO: Write out TOC?
+
+        DocBookSink sink = new DocBookSink( fileWriter, true );
+
+        for ( Iterator it = book.getChapters().iterator(); it.hasNext(); )
+        {
+            Chapter chapter = (Chapter) it.next();
+
+            renderChapter( fileWriter, chapter, context, sink );
+        }
+
+        sink.book_();
+
+        try
+        {
+            fileWriter.close();
+        }
+        catch ( IOException e )
+        {
+            throw new BookDoxiaException( "Error while closing file.", e );
+        }
+    }
+
+    private void renderChapter( Writer writer, Chapter chapter, BookContext context, Sink sink )
+        throws BookDoxiaException
+    {
+        for ( Iterator it = chapter.getSections().iterator(); it.hasNext(); )
+        {
+            Section section = (Section) it.next();
+
+            renderSection( writer, section, context, sink );
+        }
+    }
+
+    private void renderSection( Writer writer, Section section, BookContext context, Sink sink )
+        throws BookDoxiaException
+    {
+        BookContext.BookFile bookFile = (BookContext.BookFile) context.getFiles().get( section.getId() );
+
+        if ( bookFile == null )
+        {
+            throw new BookDoxiaException( "No document that matches section with id=" + section.getId() + "." );
+        }
+
+        try
+        {
+            doxia.parse( new FileReader( bookFile.getFile() ), bookFile.getParserId(), sink );
+        }
+        catch ( ParserNotFoundException e )
+        {
+            throw new BookDoxiaException( "Parser not found: " + bookFile.getParserId() + ".", e );
+        }
+        catch ( ParseException e )
+        {
+            throw new BookDoxiaException(
+                                          "Error while parsing document: " + bookFile.getFile().getAbsolutePath() + ".",
+                                          e );
+        }
+        catch ( FileNotFoundException e )
+        {
+            throw new BookDoxiaException( "Could not find document: " + bookFile.getFile().getAbsolutePath() + ".", e );
+        }
+    }
+}

Propchange: maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/trunk/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/DocbookBookRenderer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"