Author: brett
Date: Wed Dec 21 18:57:50 2005
New Revision: 358451

URL: http://svn.apache.org/viewcvs?rev=358451&view=rev
Log:
- move doxia's site renderer to a model for the decoration, while retaining the 
<custom> element to allow arbitrary extension that can be used from the 
velocity template.
- simplify various parts of the API
- add inheritance of the site descriptor from a file based source

Modified:
    maven/plugins/trunk/maven-site-plugin/pom.xml
    
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java
    
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java
    
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
    
maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm

Modified: maven/plugins/trunk/maven-site-plugin/pom.xml
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/pom.xml?rev=358451&r1=358450&r2=358451&view=diff
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-site-plugin/pom.xml Wed Dec 21 18:57:50 2005
@@ -2,13 +2,16 @@
   <parent>
     <artifactId>maven-plugin-parent</artifactId>
     <groupId>org.apache.maven.plugins</groupId>
-    <version>2.0</version>
+    <version>2.0.1</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-site-plugin</artifactId>
   <packaging>maven-plugin</packaging>
   <name>Maven Site plugin</name>
   <version>2.0-beta-5-SNAPSHOT</version>
+  <prerequisites>
+    <maven>2.0.2-SNAPSHOT</maven>
+  </prerequisites>
   <developers>
     <developer>
       <id>vsiveton</id>
@@ -54,14 +57,21 @@
       <artifactId>maven-project</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.doxia</groupId>
+      <groupId>org.apache.maven.doxia</groupId>
       <artifactId>doxia-site-renderer</artifactId>
-      <version>1.0-alpha-6-SNAPSHOT</version>
+      <version>1.0-alpha-7-SNAPSHOT</version>
+      <exclusions>
+        <exclusion>
+          <!-- TODO: upgrade p-velo -->
+          <groupId>plexus</groupId>
+          <artifactId>plexus-utils</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-api</artifactId>
-      <version>2.0</version>
+      <version>2.0.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>

Modified: 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java?rev=358451&r1=358450&r2=358451&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java
 Wed Dec 21 18:57:50 2005
@@ -71,13 +71,15 @@
      * @param locale the locale
      * @return the site descriptor path
      */
-    protected File getSiteDescriptorFile( Locale locale )
+    protected File getSiteDescriptorFile( File basedir, Locale locale )
     {
-        File siteDescriptor = new File( siteDirectory, "site_" + 
locale.getLanguage() + ".xml" );
+        // TODO: get proper siteDirectory
+
+        File siteDescriptor = new File( basedir, "src/site/site_" + 
locale.getLanguage() + ".xml" );
 
         if ( !siteDescriptor.exists() )
         {
-            siteDescriptor = new File( siteDirectory, "site.xml" );
+            siteDescriptor = new File( basedir, "src/site/site.xml" );
         }
         return siteDescriptor;
     }

Modified: 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java?rev=358451&r1=358450&r2=358451&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java
 Wed Dec 21 18:57:50 2005
@@ -42,6 +42,13 @@
      */
     private Artifact artifact;
 
+    /**
+     * @parameter expression="${basedir}"
+     * @required
+     * @readonly
+     */
+    private File basedir;
+
     public void execute()
         throws MojoExecutionException
     {
@@ -51,7 +58,7 @@
         {
             Locale locale = (Locale) iterator.next();
 
-            File descriptorFile = getSiteDescriptorFile( locale );
+            File descriptorFile = getSiteDescriptorFile( basedir, locale );
 
             if ( descriptorFile.exists() )
             {

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=358451&r1=358450&r2=358451&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
 Wed Dec 21 18:57:50 2005
@@ -16,19 +16,24 @@
  * limitations under the License.
  */
 
+import org.apache.maven.doxia.module.xdoc.XdocSiteModule;
+import org.apache.maven.doxia.site.decoration.DecorationModel;
+import 
org.apache.maven.doxia.site.decoration.inheritance.DecorationModelInheritanceAssembler;
+import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.RendererException;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.MavenReport;
 import org.apache.maven.reporting.MavenReportException;
-import org.codehaus.doxia.module.xdoc.XdocSiteModule;
-import org.codehaus.plexus.siterenderer.Renderer;
-import org.codehaus.plexus.siterenderer.RendererException;
-import org.codehaus.plexus.siterenderer.sink.SiteRendererSink;
 import org.codehaus.plexus.util.DirectoryScanner;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -37,6 +42,7 @@
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.io.OutputStreamWriter;
+import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -166,6 +172,20 @@
     private List reports;
 
     /**
+     * Convenience parameter that allows you to disable report generation.
+     *
+     * @parameter expression="${generateReports}" default-value="true"
+     */
+    private boolean generateReports;
+
+    /**
+     * The component for assembling inheritance.
+     *
+     * @component
+     */
+    private DecorationModelInheritanceAssembler assembler;
+
+    /**
      * Generate the project site
      * <p/>
      * throws MojoExecutionException if any
@@ -175,10 +195,11 @@
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
+        ClassLoader templateClassLoader;
 
         if ( templateDirectory == null )
         {
-            siteRenderer.setTemplateClassLoader( 
SiteMojo.class.getClassLoader() );
+            templateClassLoader = SiteMojo.class.getClassLoader();
         }
         else
         {
@@ -190,13 +211,7 @@
                         "This templateDirectory=[" + templateDirectory + "] 
doesn't exist." );
                 }
 
-                URL templateDirectoryUrl = templateDirectory.toURL();
-
-                URL[] urls = {templateDirectoryUrl};
-
-                URLClassLoader urlClassloader = new URLClassLoader( urls );
-
-                siteRenderer.setTemplateClassLoader( urlClassloader );
+                templateClassLoader = new URLClassLoader( new 
URL[]{templateDirectory.toURL()} );
             }
             catch ( MalformedURLException e )
             {
@@ -301,25 +316,31 @@
                 // Exception if a file is duplicate
                 checkDuplicates( duplicate, locale );
 
-                String siteDescriptor = getSiteDescriptor( reports, locale, 
projectInfos, projectReports );
+                DecorationModel decoration = getDecorationModel( reports, 
locale, projectInfos, projectReports );
+
+                SiteRenderingContext context = new SiteRenderingContext();
+                context.setTemplate( template );
+                context.setTemplateProperties( attributes );
+                context.setLocale( locale );
+                context.setTemplateClassLoader( templateClassLoader );
+                context.setDecoration( decoration );
 
                 //Generate reports
                 List generatedReportsFileName = Collections.EMPTY_LIST;
                 if ( reports != null )
                 {
-                    generatedReportsFileName =
-                        generateReportsPages( reports, locale, 
outputDirectory, defaultLocale, siteDescriptor );
+                    generatedReportsFileName = generateReportsPages( reports, 
outputDirectory, defaultLocale, context );
                 }
 
                 //Generate overview pages
                 if ( projectInfos.size() > 0 )
                 {
-                    generateProjectInfoPage( siteDescriptor, locale, 
projectInfos, outputDirectory );
+                    generateProjectInfoPage( projectInfos, outputDirectory, 
context );
                 }
 
                 if ( projectReports.size() > 0 )
                 {
-                    generateProjectReportsPage( siteDescriptor, locale, 
projectReports, outputDirectory );
+                    generateProjectReportsPage( projectReports, 
outputDirectory, context );
                 }
 
                 // Try to generate the index.html
@@ -331,7 +352,7 @@
                 else
                 {
                     getLog().info( "Generate an index file for the " + 
displayLanguage + " version." );
-                    generateIndexPage( siteDescriptor, locale, outputDirectory 
);
+                    generateIndexPage( outputDirectory, context );
                 }
 
                 // TODO: Be good to generate a module's summary page thats 
referenced off the
@@ -349,7 +370,7 @@
                     }
                 }
 
-                siteRenderer.render( siteDirectoryFile, outputDirectory, 
siteDescriptor, template, attributes, locale );
+                siteRenderer.render( siteDirectoryFile, outputDirectory, 
context );
 
                 // Check if ${basedir}/xdocs is existing
                 if ( xdocDirectory.exists() )
@@ -360,9 +381,8 @@
                     {
                         XdocSiteModule xdoc = new XdocSiteModule();
 
-                        siteRenderer.render( xdocDirectoryFile, 
outputDirectory, xdoc.getSourceDirectory(), xdoc
-                            .getExtension(), xdoc.getParserId(), 
siteDescriptor, template, attributes, locale,
-                                             outputEncoding );
+                        siteRenderer.render( xdocDirectoryFile, 
outputDirectory, xdoc.getSourceDirectory(),
+                                             xdoc.getExtension(), 
xdoc.getParserId(), context, outputEncoding );
                     }
                 }
 
@@ -376,8 +396,7 @@
 
                 if ( generatedSiteDirectory.exists() )
                 {
-                    siteRenderer.render( generatedSiteDirectory, 
outputDirectory, siteDescriptor, template, attributes,
-                                         locale );
+                    siteRenderer.render( generatedSiteDirectory, 
outputDirectory, context );
                 }
             }
         }
@@ -395,28 +414,140 @@
         }
     }
 
+    private DecorationModel getDecorationModel( List reports, Locale locale, 
List projectInfos, List projectReports )
+        throws MojoExecutionException
+    {
+        Map props = new HashMap();
+
+        // TODO: can we replace these with an XML tag?
+        if ( reports != null )
+        {
+            props.put( "reports", getReportsMenu( locale, projectInfos, 
projectReports ) );
+        }
+        else
+        {
+            props.put( "reports", "" );
+        }
+
+        // we require child modules and reactors to process module menu
+
+        if ( addModules && reactorProjects.size() > 1 && 
project.getModules().size() > 0 )
+        {
+            props.put( "modules", getModulesMenu( locale ) );
+        }
+        else
+        {
+            props.put( "modules", "" );
+        }
+
+        return getDecorationModel( project, locale, props );
+    }
+
+    private DecorationModel getDecorationModel( MavenProject project, Locale 
locale, Map origProps )
+        throws MojoExecutionException
+    {
+        Map props = new HashMap( origProps );
+
+        // TODO: this isn't taking into account the pom in the repository. It 
should be resolving it in some way that
+        //  is compatible with the parent resolution and USD
+        File siteDescriptor = getSiteDescriptorFile( project.getBasedir(), 
locale );
+
+        String siteDescriptorContent;
+
+        try
+        {
+            if ( siteDescriptor.exists() )
+            {
+                siteDescriptorContent = FileUtils.fileRead( siteDescriptor );
+            }
+            else
+            {
+                siteDescriptorContent = IOUtil.toString( 
getClass().getResourceAsStream( "/default-site.xml" ) );
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "The site descriptor cannot be 
read!", e );
+        }
+
+        props.put( "outputEncoding", outputEncoding );
+
+        // TODO: interpolate ${project.*} in general
+
+        if ( project.getName() != null )
+        {
+            props.put( "project.name", project.getName() );
+        }
+        else
+        {
+            props.put( "project.name", "NO_PROJECT_NAME_SET" );
+        }
+
+        if ( project.getUrl() != null )
+        {
+            props.put( "project.url", project.getUrl() );
+        }
+        else
+        {
+            props.put( "project.url", "NO_PROJECT_URL_SET" );
+        }
+
+        siteDescriptorContent = StringUtils.interpolate( 
siteDescriptorContent, props );
+
+        DecorationModel decoration;
+        try
+        {
+            decoration = new DecorationXpp3Reader().read( new StringReader( 
siteDescriptorContent ) );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new MojoExecutionException( "Error parsing site descriptor", 
e );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error reading site descriptor", 
e );
+        }
+
+        if ( project.getParent() != null )
+        {
+            props.put( "parentProject", getProjectParentMenu( locale ) );
+
+            DecorationModel parent = getDecorationModel( project.getParent(), 
locale, props );
+
+            assembler.assembleModelInheritance( decoration, parent );
+        }
+
+        return decoration;
+    }
+
     private List filterReports( List reports )
     {
         List filteredReports = new ArrayList( reports.size() );
-        for ( Iterator i = reports.iterator(); i.hasNext(); )
+        if ( generateReports )
         {
-            MavenReport report = (MavenReport) i.next();
-            try
+            for ( Iterator i = reports.iterator(); i.hasNext(); )
             {
-                if ( report.canGenerateReport() )
+                MavenReport report = (MavenReport) i.next();
+                //noinspection ErrorNotRethrown,UnusedCatchParameter
+                try
+                {
+                    if ( report.canGenerateReport() )
+                    {
+                        filteredReports.add( report );
+                    }
+                }
+                catch ( AbstractMethodError e )
                 {
+
+                    // the canGenerateReport() has been added just before the 
2.0 release and will cause all the reporting
+                    // plugins with an earlier version to fail (most of the 
codehaus mojo now fails)
+                    // be nice with them, output a warning and don't let them 
break anything
+
+                    getLog().warn( "Error loading report " + 
report.getClass().getName() +
+                        " - AbstractMethodError: canGenerateReport()" );
                     filteredReports.add( report );
                 }
             }
-            // the canGenerateReport() has been added just before the 2.0 
release and will cause all the reporting
-            // plugins with an earlier version to fail (most of the codehaus 
mojo now fails)
-            // be nice with them, output a warning and don't let them break 
anything
-            catch ( AbstractMethodError e )
-            {
-                getLog().warn( "Error loading report " + 
report.getClass().getName() +
-                    " - AbstractMethodError: canGenerateReport()" );
-                filteredReports.add( report );
-            }
         }
         return filteredReports;
     }
@@ -609,95 +740,18 @@
     }
 
     /**
-     * @param reports a list of reports
-     * @param locale  the current locale
-     * @return the inpustream
-     * @throws org.apache.maven.plugin.MojoExecutionException
-     *          is any
-     */
-    private String getSiteDescriptor( List reports, Locale locale, List 
projectInfos, List projectReports )
-        throws MojoExecutionException
-    {
-        File siteDescriptor = getSiteDescriptorFile( locale );
-
-        String siteDescriptorContent;
-
-        try
-        {
-            if ( siteDescriptor.exists() )
-            {
-                siteDescriptorContent = FileUtils.fileRead( siteDescriptor );
-            }
-            else
-            {
-                siteDescriptorContent = IOUtil.toString( 
getClass().getResourceAsStream( "/default-site.xml" ) );
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "The site descriptor cannot be 
read!", e );
-        }
-
-        Map props = new HashMap();
-
-        props.put( "outputEncoding", outputEncoding );
-
-        if ( reports != null )
-        {
-            props.put( "reports", getReportsMenu( locale, projectInfos, 
projectReports ) );
-        }
-
-        if ( project.getParent() != null )
-        {
-            props.put( "parentProject", getProjectParentMenu( locale ) );
-        }
-
-        // we require child modules and reactors to process module menu
-
-        if ( ( addModules && reactorProjects.size() > 1 && 
project.getModules().size() > 0 ) )
-        {
-            props.put( "modules", getModulesMenu( locale ) );
-        }
-
-        // TODO: interpolate ${project.*} in general
-
-        if ( project.getName() != null )
-        {
-            props.put( "project.name", project.getName() );
-        }
-        else
-        {
-            props.put( "project.name", "NO_PROJECT_NAME_SET" );
-        }
-
-        if ( project.getUrl() != null )
-        {
-            props.put( "project.url", project.getUrl() );
-        }
-        else
-        {
-            props.put( "project.url", "NO_PROJECT_URL_SET" );
-        }
-
-        siteDescriptorContent = StringUtils.interpolate( 
siteDescriptorContent, props );
-
-        return siteDescriptorContent;
-    }
-
-    /**
      * Generate an index page.
      *
-     * @param siteDescriptor
-     * @param locale
      * @param outputDirectory
      */
-    private void generateIndexPage( String siteDescriptor, Locale locale, File 
outputDirectory )
+    private void generateIndexPage( File outputDirectory, SiteRenderingContext 
context )
         throws RendererException, IOException
     {
         String outputFileName = "index.html";
 
-        SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName, siteDescriptor );
+        SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName );
 
+        Locale locale = context.getLocale();
         String title = i18n.getString( "site-plugin", locale, 
"report.index.title" ).trim() + " " + project.getName();
 
         sink.head();
@@ -733,7 +787,7 @@
         File outputFile = new File( outputDirectory, outputFileName );
 
         siteRenderer.generateDocument( new OutputStreamWriter( new 
FileOutputStream( outputFile ), outputEncoding ),
-                                       template, attributes, sink, locale );
+                                       sink, context );
     }
 
     // Generate specific pages
@@ -742,11 +796,10 @@
      * Generate reports pages
      *
      * @param reports
-     * @param locale
      * @param localeOutputDirectory
      */
-    private List generateReportsPages( List reports, Locale locale, File 
localeOutputDirectory, Locale defaultLocale,
-                                       String siteDescriptor )
+    private List generateReportsPages( List reports, File 
localeOutputDirectory, Locale defaultLocale,
+                                       SiteRenderingContext context )
         throws RendererException, IOException, MavenReportException
     {
         List generatedReportsFileName = new ArrayList();
@@ -755,6 +808,7 @@
         {
             MavenReport report = (MavenReport) j.next();
 
+            Locale locale = context.getLocale();
             getLog().info( "Generate \"" + report.getName( locale ) + "\" 
report." );
 
             report.setReportOutputDirectory( localeOutputDirectory );
@@ -772,7 +826,7 @@
 
             String outputFileName = reportFileName + ".html";
 
-            SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName, siteDescriptor );
+            SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName );
 
             report.generate( sink, locale );
 
@@ -786,8 +840,7 @@
                 }
 
                 siteRenderer.generateDocument(
-                    new OutputStreamWriter( new FileOutputStream( outputFile 
), outputEncoding ), template, attributes,
-                    sink, locale );
+                    new OutputStreamWriter( new FileOutputStream( outputFile 
), outputEncoding ), sink, context );
             }
         }
         return generatedReportsFileName;
@@ -796,19 +849,17 @@
     /**
      * Generates Project Info Page
      *
-     * @param siteDescriptor  site.xml
-     * @param locale          the locale used
      * @param projectInfos    list of projectInfos
      * @param outputDirectory directory that will contain the generated 
project info page
      */
-    private void generateProjectInfoPage( String siteDescriptor, Locale 
locale, List projectInfos,
-                                          File outputDirectory )
+    private void generateProjectInfoPage( List projectInfos, File 
outputDirectory, SiteRenderingContext context )
         throws RendererException, IOException
     {
         String outputFileName = "project-info.html";
 
-        SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName, siteDescriptor );
+        SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName );
 
+        Locale locale = context.getLocale();
         String title = i18n.getString( "site-plugin", locale, 
"report.information.title" );
 
         sink.head();
@@ -879,25 +930,23 @@
         File outputFile = new File( outputDirectory, outputFileName );
 
         siteRenderer.generateDocument( new OutputStreamWriter( new 
FileOutputStream( outputFile ), outputEncoding ),
-                                       template, attributes, sink, locale );
+                                       sink, context );
     }
 
     /**
      * Generates the Project Report Pages
      *
-     * @param siteDescriptor  site.xml
-     * @param locale          the locale used
      * @param projectReports  list of project reports
      * @param outputDirectory directory that will contain the generated 
project report pages
      */
-    private void generateProjectReportsPage( String siteDescriptor, Locale 
locale, List projectReports,
-                                             File outputDirectory )
+    private void generateProjectReportsPage( List projectReports, File 
outputDirectory, SiteRenderingContext context )
         throws RendererException, IOException
     {
         String outputFileName = "maven-reports.html";
 
-        SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName, siteDescriptor );
+        SiteRendererSink sink = siteRenderer.createSink( siteDirectory, 
outputFileName );
 
+        Locale locale = context.getLocale();
         String title = i18n.getString( "site-plugin", locale, 
"report.project.title" );
 
         sink.head();
@@ -964,7 +1013,7 @@
         File outputFile = new File( outputDirectory, outputFileName );
 
         siteRenderer.generateDocument( new OutputStreamWriter( new 
FileOutputStream( outputFile ), outputEncoding ),
-                                       template, attributes, sink, locale );
+                                       sink, context );
     }
 
     /**
@@ -972,6 +1021,7 @@
      *
      * @param outputDir the output directory
      * @throws IOException if any
+     * @todo move to skin functionality in site renderer
      */
     private void copyResources( File outputDir )
         throws IOException
@@ -1066,12 +1116,16 @@
 
     private File getOutputDirectory( Locale locale, Locale defaultLocale )
     {
+        File file;
         if ( locale.getLanguage().equals( defaultLocale.getLanguage() ) )
         {
-            return outputDirectory;
+            file = outputDirectory;
         }
-
-        return new File( outputDirectory, locale.getLanguage() );
+        else
+        {
+            file = new File( outputDirectory, locale.getLanguage() );
+        }
+        return file;
     }
 
     /**
@@ -1091,28 +1145,29 @@
         {
             String currentFile = (String) it.next();
 
+            int endIndex = currentFile.lastIndexOf( "." );
             if ( currentFile.lastIndexOf( File.separator ) == -1 )
             {
                 // ignore files directly in the directory
-                continue;
             }
-
-            if ( currentFile.lastIndexOf( "." ) == -1 || 
currentFile.startsWith( "." ) )
+            else if ( endIndex == -1 || currentFile.startsWith( "." ) )
             {
                 // ignore files without extension
-                continue;
             }
+            else
+            {
 
-            String key = currentFile.substring( currentFile.indexOf( 
File.separator ) + 1, currentFile
-                .lastIndexOf( "." ) );
+                int beginIndex = currentFile.indexOf( File.separator ) + 1;
+                String key = currentFile.substring( beginIndex, endIndex 
).toLowerCase( Locale.getDefault() );
 
-            List tmp = (List) duplicate.get( key.toLowerCase() );
-            if ( tmp == null )
-            {
-                tmp = new ArrayList();
-                duplicate.put( key.toLowerCase(), tmp );
+                List tmp = (List) duplicate.get( key );
+                if ( tmp == null )
+                {
+                    tmp = new ArrayList();
+                    duplicate.put( key, tmp );
+                }
+                tmp.add( currentFile );
             }
-            tmp.add( currentFile );
         }
     }
 

Modified: 
maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm?rev=358451&r1=358450&r2=358451&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm
 (original)
+++ 
maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm
 Wed Dec 21 18:57:50 2005
@@ -1,30 +1,28 @@
-#macro ( banner $id )
-  #if ( $siteDescriptor.getChild( $id ) )
-    #set ( $e = $siteDescriptor.getChild( $id ) )
-    #if( $e.getChild( "href" ) )
-        #set ( $link = $e.getChild( "href" ).getValue() )
-        <a href="$link" id="$id">
+#macro ( banner $banner $id )
+  #if ( $banner )
+    #if( $banner.href )
+      <a href="$banner.href" id="$id">
     #else
         <span id="$id">
     #end
 
-    #if( $e.getChild( "src" ) )
-        #set ( $src = $e.getChild( "src" ).getValue() )
+    #if( $banner.src )
+        #set ( $src = $banner.src )
         #if ( ! ( $src.toLowerCase().startsWith("http") || 
$src.toLowerCase().startsWith("https") ) )
             #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
             #set ( $src = $src.replaceAll( "\\", "/" ) )
         #end
-        #if ( $e.getChild( "alt" ) )
-            #set ( $alt = $e.getChild( "alt" ).getValue() )
+        #if ( $banner.alt )
+            #set ( $alt = $banner.alt )
         #else
             #set ( $alt = "" )
         #end
         <img src="$src" alt="$alt" />
     #else
-        $e.getChild( "name" ).getValue()
+        $banner.name
     #end
 
-    #if( $e.getChild( "href" ) )
+    #if( $banner.href )
         </a>
     #else
         </span>
@@ -32,22 +30,21 @@
   #end
 #end
 
-#macro ( links )
+#macro ( links $links )
   #set ( $counter = 0 )
-  #set ( $links = $siteDescriptor.getChild( "body" ).getChild( "links" ) )
-  #foreach( $item in $links.getChildren() )
+  #foreach( $item in $links )
     #set ( $counter = $counter + 1 )
-    <a href="$item.getAttribute( "href" )">$item.getAttribute( "name" )</a>
-    #if ( $links.getChildCount() > $counter )
+    <a href="$item.href">$item.name</a>
+    #if ( $links.size() > $counter )
       |
     #end
   #end
 #end
 
 #macro ( displayTree $display $item )
-  #if ( $item && $item.getChildren() && $item.getChildCount() > 0 )
-    #foreach( $subitem in $item.getChildren() )
-      #set ( $subitemHref = $PathTool.calculateLink( $subitem.getAttribute( 
"href" ), $relativePath ) )
+  #if ( $item && $item.items && $item.items.size() > 0 )
+    #foreach( $subitem in $item.items )
+      #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, 
$relativePath ) )
       #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
 
       #if ( $currentFileName == $subitemHref )
@@ -61,12 +58,12 @@
 
 #macro ( menuItem $item )
   #set ( $collapse = "none" )
-  #set ( $currentItemHref = $PathTool.calculateLink( $item.getAttribute( 
"href" ), $relativePath ) )
+  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath 
) )
   #set ( $currentFileName = $currentFileName.replaceAll( "\\", "/" ) )
   #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
 
-  #if ( $item && $item.getChildCount() > 0 )
-    #if ( ( $item.getAttribute( "collapse" ) ) && ( $item.getAttribute( 
"collapse" ).equalsIgnoreCase( "false" ) ) )
+  #if ( $item && $item.items && $item.items.size() > 0 )
+    #if ( $item.collapse == false )
       #set ( $collapse = "expanded" )
     #else
       ## By default collapsed
@@ -79,18 +76,17 @@
   #end
   <li class="$collapse">
     #if ( $currentFileName == $currentItemHref )
-      <strong><a href="$currentItemHref">$item.getAttribute( "name" 
)</a></strong>
+      <strong><a href="$currentItemHref">$item.name</a></strong>
     #else
-      <a href="$currentItemHref">$item.getAttribute( "name" )</a>
+      <a href="$currentItemHref">$item.name</a>
     #end
-  #if ( $item && $item.getChildren() && $item.getChildCount() > 0 )
+  #if ( $item && $item.items && $item.items.size() > 0 )
     #set ( $display = false )
-    #set ( $itemTmp = $item )
-    #displayTree( $display $itemTmp )
+    #displayTree( $display $item )
 
     #if ( $collapse == "expanded" || $display )
       <ul>
-        #foreach( $subitem in $item.getChildren() )
+        #foreach( $subitem in $item.items )
           #menuItem( $subitem )
         #end
       </ul>
@@ -99,12 +95,11 @@
   </li>
 #end
 
-#macro ( mainMenu )
-  #set ( $menus = $siteDescriptor.getChild( "body" ).getChildren( "menu" ) )
+#macro ( mainMenu $menus )
   #foreach( $menu in $menus )
-    <h5>$menu.getAttribute( "name" )</h5>
+    <h5>$menu.name</h5>
     <ul>
-      #foreach( $item in $menu.getChildren() )
+      #foreach( $item in $menu.items )
         #menuItem( $item )
       #end
     </ul>
@@ -127,9 +122,9 @@
   #end
 #end
 
-#macro ( publishDate $position )
-  #if ( ( $siteDescriptor.getChild( "publishDate" ) ) && ( 
$siteDescriptor.getChild( "publishDate" ).getAttribute( "format" ) ) )
-    #set ( $format = $siteDescriptor.getChild( "publishDate" ).getAttribute( 
"format" ) )
+#macro ( publishDate $position $publishDate )
+  #if ( $publishDate && $publishDate.format )
+    #set ( $format = $publishDate.format )
   #else
     #set ( $format = "MM/dd/yyyy" )
   #end
@@ -138,8 +133,8 @@
 
   #set ( $dateToday = $dateFormat.format( $currentDate ) )
 
-  #if ( ( $siteDescriptor.getChild( "publishDate" ) ) && ( 
$siteDescriptor.getChild( "publishDate" ).getAttribute( "position" ) ) )
-    #set ( $datePosition = $siteDescriptor.getChild( "publishDate" 
).getAttribute( "position" ) )
+  #if ( $publishDate && $publishDate.position )
+    #set ( $datePosition = $publishDate.position )
   #else
     #set ( $datePosition = "left" )
   #end
@@ -152,44 +147,41 @@
     #elseif ( $datePosition.equalsIgnoreCase("left") )
       <div class="xleft">
         $i18n.getString( "site-plugin", $locale, "template.lastpublished" ): 
$dateToday &nbsp; | &nbsp; Doc for
-        #if ( $siteDescriptor.getChild( "version" ))
-          $siteDescriptor.getChild( "version" ).getValue()
-        #else
-          ${project.version}
-        #end
+        ${project.version}
       </div>
     #end
   #end
 #end
 
-#macro ( poweredByLogo )
-
-    #if( $siteDescriptor.getChild( "powered-by" ) )
-        #foreach ($item in $siteDescriptor.getChild( "powered-by" 
).getChildren() )
-            #if( $item.getAttribute( "href" ) )
-                #set ( $href = $item.getAttribute( "href" ) )
+#macro ( poweredByLogo $poweredBy )
+    #if( $poweredBy )
+        #foreach ($item in $poweredBy)
+            #if( $item.href )
+                #set ( $href = $item.href )
             #else
                 #set ( $href="http://maven.apache.org/"; )
             #end
 
-            #if( $item.getAttribute( "name" ) )
-                #set ( $name = $item.getAttribute( "name" ) )
+            #if( $item.name )
+                #set ( $name = $item.name )
             #else
                 #set ( $name = $i18n.getString( "site-plugin", $locale, 
"template.builtby" )  )
                 #set ( $name = "${name} Maven"  )
             #end
 
-            #if( $item.getAttribute( "img" ) )
-                #set ( $img = $item.getAttribute( "img" ) )
+            #if( $item.img )
+                #set ( $img = $item.img )
             #else
                 #set ( $img = "maven-feather.png" )
             #end
 
             <a href="$href" title="$name" id="poweredBy">
-              <img alt="$name" src="$relativePath/images/logos/$img"></img>
+              #set ( $img = $PathTool.calculateLink( $img, 
"$relativePath/images/logos" ) )
+              #set ( $img = $img.replaceAll( "\\", "/" ) )
+              <img alt="$name" src="$img" />
             </a>
         #end
-        #if( $siteDescriptor.getChild( "powered-by" ).getChildCount() == 0 )
+        #if( $poweredBy.isEmpty() )
           <a href="http://maven.apache.org/"; title="$i18n.getString( 
"site-plugin", $locale, "template.builtby" ) Maven" id="poweredBy">
             <img alt="$i18n.getString( "site-plugin", $locale, 
"template.builtby" ) Maven" 
src="$relativePath/images/logos/maven-feather.png"></img>
           </a>
@@ -216,8 +208,8 @@
       <meta name="author" content="$author" />
     #end
     <meta http-equiv="Content-Type" content="text/html; 
charset=${outputEncoding}" />
-    #if ( $siteDescriptor.getChild( "body" ).getChild( "head" ) )
-      #foreach( $item in $siteDescriptor.getChild( "body" ).getChild( "head" 
).getChildren() )
+    #if ( $decoration.body.head )
+      #foreach( $item in $decoration.body.head.getChildren() )
         #if ( $item.name == "script" )
           $item.toUnescapedString()
         #else
@@ -228,27 +220,25 @@
   </head>
   <body class="composite">
     <div id="banner">
-      #set ( $banner = "bannerLeft" )
-      #banner( $banner )
-      #set ( $banner = "bannerRight" )
-      #banner( $banner )
+      #banner( $decoration.bannerLeft "bannerLeft" )
+      #banner( $decoration.bannerRight "bannerRight" )
       <div class="clear">
         <hr/>
       </div>
     </div>
     <div id="breadcrumbs">
-      #publishDate( "left" )
-      <div class="xright">#links()#publishDate( "right" )</div>
+      #publishDate( "left" $decoration.publishDate )
+      <div class="xright">#links( $decoration.body.links )#publishDate( 
"right" $decoration.publishDate )</div>
       <div class="clear">
         <hr/>
       </div>
     </div>
     <div id="leftColumn">
       <div id="navcolumn">
-       #publishDate( "navigation-top" )
-       #mainMenu()
-       #poweredByLogo()
-       #publishDate( "navigation-bottom" )
+       #publishDate( "navigation-top" $decoration.publishDate )
+       #mainMenu( $decoration.body.menus )
+       #poweredByLogo( $decoration.poweredBy )
+       #publishDate( "navigation-bottom" $decoration.publishDate )
       </div>
     </div>
     <div id="bodyColumn">
@@ -260,7 +250,7 @@
       <hr/>
     </div>
     <div id="footer">
-      <div class="xright">&#169;#copyright()#publishDate( "bottom" )</div>
+      <div class="xright">&#169;#copyright()#publishDate( "bottom" 
$decoration.publishDate )</div>
       <div class="clear">
         <hr/>
       </div>


Reply via email to