maven-doxia-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From br...@apache.org
Subject svn commit: r385427 - in /maven/doxia/trunk/doxia-site-renderer/src: main/java/org/apache/maven/doxia/siterenderer/ test/java/org/apache/maven/doxia/siterenderer/
Date Mon, 13 Mar 2006 05:16:59 GMT
Author: brett
Date: Sun Mar 12 21:16:54 2006
New Revision: 385427

URL: http://svn.apache.org/viewcvs?rev=385427&view=rev
Log:
[MSITE-80] clean up site and push features into Doxia site renderer

Modified:
    maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
    maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
    maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
    maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java

Modified: maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java?rev=385427&r1=385426&r2=385427&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
(original)
+++ maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
Sun Mar 12 21:16:54 2006
@@ -20,6 +20,7 @@
 import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
 import org.apache.maven.doxia.parser.ParseException;
 import org.apache.maven.doxia.parser.manager.ParserNotFoundException;
+import org.apache.maven.doxia.site.decoration.DecorationModel;
 import org.apache.maven.doxia.site.module.SiteModule;
 import org.apache.maven.doxia.site.module.manager.SiteModuleManager;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
@@ -28,6 +29,7 @@
 import org.apache.velocity.context.Context;
 import org.codehaus.plexus.i18n.I18N;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.DirectoryScanner;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.PathTool;
@@ -38,13 +40,24 @@
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
-import java.text.SimpleDateFormat;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.text.DateFormat;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 
 /**
  * @author <a href="mailto:evenisse@codehaus.org">Emmanuel Venisse</a>
@@ -82,6 +95,12 @@
      */
     private I18N i18n;
 
+    private static final String RESOURCE_DIR = "org/apache/maven/plugins/site";
+
+    private static final String DEFAULT_TEMPLATE = RESOURCE_DIR + "/default-site.vm";
+
+    private static final String SKIN_TEMPLATE_LOCATION = "META-INF/maven/site.vm";
+
     // ----------------------------------------------------------------------
     // Renderer implementation
     // ----------------------------------------------------------------------
@@ -103,60 +122,19 @@
 
             if ( moduleBasedir.exists() )
             {
-                List docs = FileUtils.getFileNames( moduleBasedir, "**/*." + module.getExtension(),
null, false );
-
-                for ( Iterator j = docs.iterator(); j.hasNext(); )
-                {
-                    String doc = (String) j.next();
-
-                    String outputName = doc.substring( 0, doc.indexOf( "." ) + 1 ) + "html";
-
-                    String fullPathDoc = new File( moduleBasedir, doc ).getPath();
-
-                    SiteRendererSink sink = createSink( moduleBasedir, outputName );
-
-                    try
-                    {
-                        FileReader reader = new FileReader( fullPathDoc );
-
-                        doxia.parse( reader, module.getParserId(), sink );
-
-                        File outputFile = new File( outputDirectory, outputName );
-
-                        if ( !outputFile.getParentFile().exists() )
-                        {
-                            outputFile.getParentFile().mkdirs();
-                        }
-
-                        generateDocument( new OutputStreamWriter( new FileOutputStream( outputFile
), outputEncoding ),
-                                          sink, context );
-                    }
-                    catch ( ParserNotFoundException e )
-                    {
-                        throw new RendererException(
-                            "Error getting a parser for " + fullPathDoc + ": " + e.getMessage()
);
-                    }
-                    catch ( ParseException e )
-                    {
-                        getLogger().error( "Error parsing " + fullPathDoc + ": " + e.getMessage(),
e );
-                    }
-                    finally
-                    {
-                        sink.flush();
-
-                        sink.close();
-                    }
-                }
+                renderModule( moduleBasedir, module.getExtension(), module.getParserId(),
outputDirectory,
+                              outputEncoding, context );
             }
         }
+
+        copyResources( outputDirectory, context );
     }
 
-    // per module renderer
-    public void render( File siteDirectory, File outputDirectory, String module, String moduleExtension,
-                        String moduleParserId, SiteRenderingContext context, String outputEncoding
)
-        throws RendererException, IOException
+    private void renderModule( File moduleBasedir, String moduleExtension, String moduleParserId,
File outputDirectory,
+                               String outputEncoding, SiteRenderingContext context )
+        throws IOException, RendererException
     {
-        List docs = FileUtils.getFileNames( siteDirectory, "**/*." + moduleExtension, null,
false );
+        List docs = FileUtils.getFileNames( moduleBasedir, "**/*." + moduleExtension, null,
false );
 
         for ( Iterator j = docs.iterator(); j.hasNext(); )
         {
@@ -164,9 +142,9 @@
 
             String outputName = doc.substring( 0, doc.indexOf( "." ) + 1 ) + "html";
 
-            String fullPathDoc = new File( siteDirectory, doc ).getPath();
+            String fullPathDoc = new File( moduleBasedir, doc ).getPath();
 
-            SiteRendererSink sink = createSink( siteDirectory, outputName );
+            SiteRendererSink sink = createSink( moduleBasedir, outputName );
 
             try
             {
@@ -180,6 +158,7 @@
                 {
                     outputFile.getParentFile().mkdirs();
                 }
+
                 generateDocument( new OutputStreamWriter( new FileOutputStream( outputFile
), outputEncoding ), sink,
                                   context );
             }
@@ -200,6 +179,15 @@
         }
     }
 
+    public void render( File moduleBasedir, File outputDirectory, String module, String moduleExtension,
+                        String moduleParserId, SiteRenderingContext context, String outputEncoding
)
+        throws RendererException, IOException
+    {
+        renderModule( moduleBasedir, moduleExtension, moduleParserId, outputDirectory, outputEncoding,
context );
+
+        copyResources( outputDirectory, context );
+    }
+
     public void generateDocument( Writer writer, SiteRendererSink sink, SiteRenderingContext
siteContext )
         throws RendererException
     {
@@ -240,7 +228,7 @@
 
         context.put( "currentDate", new Date() );
 
-        context.put( "dateFormat", new SimpleDateFormat() );
+        context.put( "dateFormat", DateFormat.getDateInstance( DateFormat.DEFAULT, siteContext.getLocale()
) );
 
         String currentFileName = PathTool.calculateLink( renderingContext.getOutputName(),
relativePath );
         currentFileName = currentFileName.replace( '\\', '/' );
@@ -277,15 +265,15 @@
         //
         // ----------------------------------------------------------------------
 
-        writeTemplate( siteContext.getTemplate(), writer, context, siteContext.getTemplateClassLoader()
);
+        writeTemplate( writer, context, siteContext );
     }
 
-    private void writeTemplate( String templateName, Writer writer, Context context, ClassLoader
templateClassLoader )
+    private void writeTemplate( Writer writer, Context context, SiteRenderingContext siteContext
)
         throws RendererException
     {
         ClassLoader old = null;
 
-        if ( templateClassLoader != null )
+        if ( siteContext.getTemplateClassLoader() != null )
         {
             // -------------------------------------------------------------------------
             // If no template classloader was set we'll just use the context classloader
@@ -293,12 +281,12 @@
 
             old = Thread.currentThread().getContextClassLoader();
 
-            Thread.currentThread().setContextClassLoader( templateClassLoader );
+            Thread.currentThread().setContextClassLoader( siteContext.getTemplateClassLoader()
);
         }
 
         try
         {
-            processTemplate( templateName, context, writer );
+            processTemplate( siteContext.getTemplateName(), context, writer );
         }
         finally
         {
@@ -341,6 +329,215 @@
     public SiteRendererSink createSink( File moduleBaseDir, String document )
     {
         return new SiteRendererSink( new RenderingContext( moduleBaseDir, document ) );
+    }
+
+    public SiteRenderingContext createContextForSkin( File skinFile, Map attributes, DecorationModel
decoration,
+                                                      Locale locale, String defaultWindowTitle,
+                                                      File resourcesDirectory )
+        throws IOException
+    {
+        SiteRenderingContext context = new SiteRenderingContext();
+
+        // TODO: plexus-archiver, if it could do the excludes
+        ZipFile zipFile = new ZipFile( skinFile );
+        try
+        {
+            if ( zipFile.getEntry( SKIN_TEMPLATE_LOCATION ) != null )
+            {
+                context.setTemplateName( SKIN_TEMPLATE_LOCATION );
+                context.setTemplateClassLoader( new URLClassLoader( new URL[]{skinFile.toURL()}
) );
+            }
+            else
+            {
+                context.setTemplateName( DEFAULT_TEMPLATE );
+                context.setTemplateClassLoader( getClass().getClassLoader() );
+                context.setUsingDefaultTemplate( true );
+            }
+        }
+        finally
+        {
+            closeZipFile( zipFile );
+        }
+
+        context.setTemplateProperties( attributes );
+        context.setLocale( locale );
+        context.setDecoration( decoration );
+        context.setDefaultWindowTitle( defaultWindowTitle );
+        context.setSkinJarFile( skinFile );
+        context.setResourcesDirectory( resourcesDirectory );
+
+        return context;
+    }
+
+    public SiteRenderingContext createContextForTemplate( File templateFile, Map attributes,
DecorationModel decoration,
+                                                          Locale locale, String defaultWindowTitle,
File skinFile,
+                                                          File resourcesDirectory )
+        throws MalformedURLException
+    {
+        SiteRenderingContext context = new SiteRenderingContext();
+
+        context.setTemplateName( templateFile.getName() );
+        context.setTemplateClassLoader( new URLClassLoader( new URL[]{templateFile.getParentFile().toURL()}
) );
+
+        context.setTemplateProperties( attributes );
+        context.setLocale( locale );
+        context.setDecoration( decoration );
+        context.setDefaultWindowTitle( defaultWindowTitle );
+        context.setSkinJarFile( skinFile );
+        context.setResourcesDirectory( resourcesDirectory );
+
+        return context;
+    }
+
+    private void closeZipFile( ZipFile zipFile )
+    {
+        // TODO: move to plexus utils
+        try
+        {
+            zipFile.close();
+        }
+        catch ( IOException e )
+        {
+            // ignore
+        }
+    }
+
+    /**
+     * Copy Resources
+     *
+     * @param outputDir the output directory
+     * @throws java.io.IOException if any
+     */
+    public void copyResources( File outputDir, SiteRenderingContext siteContext )
+        throws IOException
+    {
+        // TODO: plexus-archiver, if it could do the excludes
+        ZipFile file = new ZipFile( siteContext.getSkinJarFile() );
+        try
+        {
+            for ( Enumeration e = file.entries(); e.hasMoreElements(); )
+            {
+                ZipEntry entry = (ZipEntry) e.nextElement();
+
+                if ( !entry.getName().startsWith( "META-INF/" ) )
+                {
+                    File destFile = new File( outputDir, entry.getName() );
+                    if ( !entry.isDirectory() )
+                    {
+                        destFile.getParentFile().mkdirs();
+
+                        FileOutputStream fos = new FileOutputStream( destFile );
+
+                        try
+                        {
+                            IOUtil.copy( file.getInputStream( entry ), fos );
+                        }
+                        finally
+                        {
+                            IOUtil.close( fos );
+                        }
+                    }
+                    else
+                    {
+                        destFile.mkdirs();
+                    }
+                }
+            }
+        }
+        finally
+        {
+            file.close();
+        }
+
+        if ( siteContext.isUsingDefaultTemplate() )
+        {
+            InputStream resourceList =
+                getClass().getClassLoader().getResourceAsStream( RESOURCE_DIR + "/resources.txt"
);
+
+            if ( resourceList != null )
+            {
+                LineNumberReader reader = new LineNumberReader( new InputStreamReader( resourceList
) );
+
+                String line = reader.readLine();
+
+                while ( line != null )
+                {
+                    InputStream is = getClass().getClassLoader().getResourceAsStream( RESOURCE_DIR
+ "/" + line );
+
+                    if ( is == null )
+                    {
+                        throw new IOException( "The resource " + line + " doesn't exist."
);
+                    }
+
+                    File outputFile = new File( outputDir, line );
+
+                    if ( !outputFile.getParentFile().exists() )
+                    {
+                        outputFile.getParentFile().mkdirs();
+                    }
+
+                    FileOutputStream w = new FileOutputStream( outputFile );
+
+                    IOUtil.copy( is, w );
+
+                    IOUtil.close( is );
+
+                    IOUtil.close( w );
+
+                    line = reader.readLine();
+                }
+            }
+        }
+
+        File resourcesDirectory = siteContext.getResourcesDirectory();
+
+        // Copy extra site resources
+        // TODO: this should be accommodating locale
+        // TODO: this should be automatically looking into ${siteDirectory}/resources
+        if ( resourcesDirectory != null && resourcesDirectory.exists() )
+        {
+            copyDirectory( resourcesDirectory, outputDir );
+        }
+
+    }
+
+    /**
+     * Copy the directory
+     *
+     * @param source      source file to be copied
+     * @param destination destination file
+     * @throws java.io.IOException if any
+     */
+    protected void copyDirectory( File source, File destination )
+        throws IOException
+    {
+        if ( source.exists() )
+        {
+            DirectoryScanner scanner = new DirectoryScanner();
+
+            String[] includedResources = {"**/**"};
+
+            scanner.setIncludes( includedResources );
+
+            scanner.addDefaultExcludes();
+
+            scanner.setBasedir( source );
+
+            scanner.scan();
+
+            List includedFiles = Arrays.asList( scanner.getIncludedFiles() );
+
+            for ( Iterator j = includedFiles.iterator(); j.hasNext(); )
+            {
+                String name = (String) j.next();
+
+                File sourceFile = new File( source, name );
+
+                File destinationFile = new File( destination, name );
+
+                FileUtils.copyFile( sourceFile, destinationFile );
+            }
+        }
     }
 
 }

Modified: maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java?rev=385427&r1=385426&r2=385427&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
(original)
+++ maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
Sun Mar 12 21:16:54 2006
@@ -16,11 +16,15 @@
  * limitations under the License.
  */
 
+import org.apache.maven.doxia.site.decoration.DecorationModel;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.Writer;
+import java.net.MalformedURLException;
+import java.util.Locale;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:evenisse@codehaus.org>Emmanuel Venisse</a>
@@ -36,7 +40,7 @@
     void render( File siteDirectory, File outputDirectory, SiteRenderingContext context,
String outputEncoding )
         throws RendererException, IOException;
 
-    void render( File siteDirectory, File outputDirectory, String module, String moduleExtension,
String moduleParserId,
+    void render( File moduleBasedir, File outputDirectory, String module, String moduleExtension,
String moduleParserId,
                  SiteRenderingContext context, String outputEncoding )
         throws RendererException, IOException;
 
@@ -46,4 +50,15 @@
     SiteRendererSink createSink( File moduleBaseDir, String document )
         throws RendererException, IOException;
 
+    SiteRenderingContext createContextForSkin( File skinFile, Map attributes, DecorationModel
decoration, Locale locale,
+                                               String defaultWindowTitle, File resourcesDirectory
)
+        throws IOException;
+
+    SiteRenderingContext createContextForTemplate( File templateFile, Map attributes, DecorationModel
decoration,
+                                                   Locale locale, String defaultWindowTitle,
File skinFile,
+                                                   File resourcesDirectory )
+        throws MalformedURLException;
+
+    void copyResources( File outputDirectory, SiteRenderingContext siteContext )
+        throws IOException;
 }

Modified: maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java?rev=385427&r1=385426&r2=385427&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
(original)
+++ maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
Sun Mar 12 21:16:54 2006
@@ -18,6 +18,7 @@
 
 import org.apache.maven.doxia.site.decoration.DecorationModel;
 
+import java.io.File;
 import java.util.Locale;
 import java.util.Map;
 
@@ -27,36 +28,27 @@
  */
 public class SiteRenderingContext
 {
-    private String template;
-
-    private Map templateProperties;
+    private String templateName;
 
     private ClassLoader templateClassLoader;
 
+    private Map templateProperties;
+
     private Locale locale = Locale.getDefault();
 
     private DecorationModel decoration;
 
     private String defaultWindowTitle;
 
-    public String getTemplate()
-    {
-        return template;
-    }
+    private File skinJarFile;
 
-    public void setTemplate( String template )
-    {
-        this.template = template;
-    }
+    private boolean usingDefaultTemplate;
 
-    public Map getTemplateProperties()
-    {
-        return templateProperties;
-    }
+    private File resourcesDirectory;
 
-    public void setTemplateProperties( Map templateProperties )
+    public String getTemplateName()
     {
-        this.templateProperties = templateProperties;
+        return templateName;
     }
 
     public ClassLoader getTemplateClassLoader()
@@ -69,6 +61,16 @@
         this.templateClassLoader = templateClassLoader;
     }
 
+    public Map getTemplateProperties()
+    {
+        return templateProperties;
+    }
+
+    public void setTemplateProperties( Map templateProperties )
+    {
+        this.templateProperties = templateProperties;
+    }
+
     public Locale getLocale()
     {
         return locale;
@@ -97,5 +99,40 @@
     public String getDefaultWindowTitle()
     {
         return defaultWindowTitle;
+    }
+
+    public File getSkinJarFile()
+    {
+        return skinJarFile;
+    }
+
+    public void setSkinJarFile( File skinJarFile )
+    {
+        this.skinJarFile = skinJarFile;
+    }
+
+    public void setTemplateName( String templateName )
+    {
+        this.templateName = templateName;
+    }
+
+    public void setUsingDefaultTemplate( boolean usingDefaultTemplate )
+    {
+        this.usingDefaultTemplate = usingDefaultTemplate;
+    }
+
+    public boolean isUsingDefaultTemplate()
+    {
+        return usingDefaultTemplate;
+    }
+
+    public void setResourcesDirectory( File resourcesDirectory )
+    {
+        this.resourcesDirectory = resourcesDirectory;
+    }
+
+    public File getResourcesDirectory()
+    {
+        return resourcesDirectory;
     }
 }

Modified: maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java?rev=385427&r1=385426&r2=385427&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
(original)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
Sun Mar 12 21:16:54 2006
@@ -59,7 +59,7 @@
         DecorationModel decoration =
             new DecorationXpp3Reader().read( new FileReader( getTestFile( "src/test/site/site.xml"
) ) );
         SiteRenderingContext context = new SiteRenderingContext();
-        context.setTemplate( "default-site.vm" );
+        context.setTemplateName( "default-site.vm" );
         context.setTemplateClassLoader( getClassLoader() );
         context.setDecoration( decoration );
         renderer.render( getTestFile( "src/test/site" ), getTestFile( "target/output" ),
context );



Mime
View raw message