You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2005/12/30 00:32:54 UTC

svn commit: r359926 - /maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java

Author: brett
Date: Thu Dec 29 15:32:49 2005
New Revision: 359926

URL: http://svn.apache.org/viewcvs?rev=359926&view=rev
Log:
PR: MSITE-48
exclude META-INF from generated site, and use template if present in the skin

Modified:
    maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java

Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java?rev=359926&r1=359925&r2=359926&view=diff
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java (original)
+++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java Thu Dec 29 15:32:49 2005
@@ -39,7 +39,6 @@
 import org.apache.maven.reporting.MavenReport;
 import org.apache.maven.reporting.MavenReportException;
 import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.Expand;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
@@ -53,7 +52,6 @@
 import java.io.LineNumberReader;
 import java.io.OutputStreamWriter;
 import java.io.StringReader;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
@@ -61,12 +59,15 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 
 /**
  * Generates the project site.
@@ -128,7 +129,7 @@
      *
      * @parameter expression="${template}"
      */
-    private String template = DEFAULT_TEMPLATE;
+    private String template;
 
     /**
      * @parameter expression="${attributes}"
@@ -218,6 +219,8 @@
      */
     private ArtifactFactory artifactFactory;
 
+    private static final String SKIN_TEMPLATE_LOCATION = "META-INF/maven/site.vm";
+
     /**
      * Generate the project site
      * <p/>
@@ -228,30 +231,6 @@
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
-        ClassLoader templateClassLoader;
-
-        if ( templateDirectory == null )
-        {
-            templateClassLoader = SiteMojo.class.getClassLoader();
-        }
-        else
-        {
-            try
-            {
-                if ( !templateDirectory.exists() )
-                {
-                    throw new MojoExecutionException(
-                        "This templateDirectory=[" + templateDirectory + "] doesn't exist." );
-                }
-
-                templateClassLoader = new URLClassLoader( new URL[]{templateDirectory.toURL()} );
-            }
-            catch ( MalformedURLException e )
-            {
-                throw new MojoExecutionException( templateDirectory + " isn't a valid URL.", e );
-            }
-        }
-
         if ( attributes == null )
         {
             attributes = new HashMap();
@@ -351,6 +330,55 @@
 
                 DecorationModel decoration = getDecorationModel( reports, locale, projectInfos, projectReports );
 
+                File skinArtifactFile = getSkinArtifactFile( decoration );
+
+                boolean hasSiteTemplate = false;
+                if ( template == null )
+                {
+                    if ( skinArtifactFile != null && skinArtifactFile.exists() )
+                    {
+                        ZipFile zipFile = new ZipFile( skinArtifactFile );
+                        try
+                        {
+                            if ( zipFile.getEntry( SKIN_TEMPLATE_LOCATION ) != null )
+                            {
+                                hasSiteTemplate = true;
+                                template = SKIN_TEMPLATE_LOCATION;
+                            }
+                        }
+                        finally
+                        {
+                            zipFile.close();
+                        }
+                    }
+                }
+
+                if ( template == null )
+                {
+                    template = DEFAULT_TEMPLATE;
+                }
+
+                ClassLoader templateClassLoader;
+
+                if ( hasSiteTemplate )
+                {
+                    templateClassLoader = new URLClassLoader( new URL[]{skinArtifactFile.toURL()} );
+                }
+                else if ( templateDirectory == null )
+                {
+                    templateClassLoader = SiteMojo.class.getClassLoader();
+                }
+                else
+                {
+                    if ( !templateDirectory.exists() )
+                    {
+                        throw new MojoExecutionException(
+                            "This templateDirectory=[" + templateDirectory + "] doesn't exist." );
+                    }
+
+                    templateClassLoader = new URLClassLoader( new URL[]{templateDirectory.toURL()} );
+                }
+
                 SiteRenderingContext context = new SiteRenderingContext();
                 context.setTemplate( template );
                 context.setTemplateProperties( attributes );
@@ -419,7 +447,7 @@
                     }
                 }
 
-                copyResources( outputDirectory, decoration );
+                copyResources( outputDirectory, skinArtifactFile );
 
                 // Copy site resources
                 if ( resourcesDirectory != null && resourcesDirectory.exists() )
@@ -1115,12 +1143,12 @@
      * Copy Resources
      *
      * @param outputDir the output directory
-     * @param decoration
+     * @param skinFile
      * @throws IOException if any
      * @todo move to skin functionality in site renderer
      */
-    private void copyResources( File outputDir, DecorationModel decoration )
-        throws IOException, MojoFailureException, MojoExecutionException
+    private void copyResources( File outputDir, File skinFile )
+        throws IOException
     {
         InputStream resourceList = getStream( RESOURCE_DIR + "/resources.txt" );
 
@@ -1136,8 +1164,7 @@
 
                 if ( is == null )
                 {
-                    throw new IOException(
-                        "The resource " + line + " doesn't exists in " + DEFAULT_TEMPLATE + " template." );
+                    throw new IOException( "The resource " + line + " doesn't exist." );
                 }
 
                 File outputFile = new File( outputDir, line );
@@ -1159,6 +1186,48 @@
             }
         }
 
+        // TODO: plexus-archiver, if it could do the excludes
+        ZipFile file = new ZipFile( skinFile );
+        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();
+        }
+    }
+
+    private File getSkinArtifactFile( DecorationModel decoration )
+        throws MojoFailureException, MojoExecutionException
+    {
         Skin skin = decoration.getSkin();
 
         if ( skin == null )
@@ -1193,18 +1262,7 @@
             throw new MojoFailureException( "The skin does not exist: " + e.getMessage() );
         }
 
-        try
-        {
-            Expand expand = new Expand();
-            expand.setSrc( artifact.getFile() );
-            expand.setDest( outputDir );
-            expand.setOverwrite( true );
-            expand.execute();
-        }
-        catch ( Exception e )
-        {
-            throw new MojoExecutionException( "Error expanding skin", e );
-        }
+        return artifact.getFile();
     }
 
     /**