You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vs...@apache.org on 2009/08/09 15:02:32 UTC

svn commit: r802537 - /maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java

Author: vsiveton
Date: Sun Aug  9 13:02:31 2009
New Revision: 802537

URL: http://svn.apache.org/viewvc?rev=802537&view=rev
Log:
MPDF-27: Support Doxia files generated by Maven plugins

o added generateSiteDir param
o used a tmpSite dir which includes site and generated-sites files instead of using site dir

Modified:
    maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java

Modified: maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java?rev=802537&r1=802536&r2=802537&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java (original)
+++ maven/plugins/trunk/maven-pdf-plugin/src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java Sun Aug  9 13:02:31 2009
@@ -148,6 +148,15 @@
     private File siteDirectory;
 
     /**
+     * Directory containing generating sources for apt, fml and xdoc docs.
+     *
+     * @parameter default-value="${project.build.directory}/generated-site"
+     * @required
+     * @since 1.1
+     */
+    private File generatedSiteDirectory;
+
+    /**
      * Output directory where PDF files should be created.
      *
      * @parameter default-value="${project.build.directory}/pdf"
@@ -208,20 +217,30 @@
     // ----------------------------------------------------------------------
 
     /**
-     * Document Renderer.
+     * Lazy instantiation for document Renderer.
      */
     private DocumentRenderer docRenderer;
 
     /**
-     * Default locale
+     * Lazy instantiation for default locale.
      */
     private Locale defaultLocale;
 
     /**
-     * Default decoration model
+     * Lazy instantiation for available locales list.
+     */
+    private List localesList;
+
+    /**
+     * Lazy instantiation for decoration model.
      */
     private DecorationModel defaultDecorationModel;
 
+    /**
+     * Lazy instantiation for tmpSite dir to have all site and generated-site files.
+     */
+    private File tmpSiteDirectory;
+
     // ----------------------------------------------------------------------
     // Public methods
     // ----------------------------------------------------------------------
@@ -271,6 +290,13 @@
         {
             throw new MojoExecutionException( "Error copying generated PDF: " + e.getMessage(), e );
         }
+
+        // safety release instance fields
+        docRenderer = null;
+        defaultLocale = null;
+        localesList = null;
+        defaultDecorationModel = null;
+        tmpSiteDirectory = null;
     }
 
     // ----------------------------------------------------------------------
@@ -287,20 +313,18 @@
     private void generatedPdf()
         throws MojoExecutionException, IOException
     {
-        final List localesList = siteTool.getAvailableLocales( locales );
-
         Locale.setDefault( getDefaultLocale() );
 
-        for ( final Iterator iterator = localesList.iterator(); iterator.hasNext(); )
+        for ( final Iterator iterator = getAvailableLocales().iterator(); iterator.hasNext(); )
         {
             final Locale locale = (Locale) iterator.next();
 
             final File workingDir = getWorkingDirectory( locale );
 
-            File siteDirectoryFile = siteDirectory;
+            File siteDirectoryFile = getTmpSiteDirectory();
             if ( !locale.getLanguage().equals( getDefaultLocale().getLanguage() ) )
             {
-                siteDirectoryFile = new File( siteDirectory, locale.getLanguage() );
+                siteDirectoryFile = new File( getTmpSiteDirectory(), locale.getLanguage() );
             }
 
             // Copy extra-resources
@@ -336,6 +360,117 @@
     }
 
     /**
+     * @return the default tmpSiteDirectory.
+     * @throws IOException if any
+     */
+    private File getTmpSiteDirectory()
+        throws IOException
+    {
+        if ( this.tmpSiteDirectory == null )
+        {
+            final File tmpSiteDir = new File( workingDirectory, "tmpsite" );
+            prepareTempSiteDirectory( tmpSiteDir );
+
+            this.tmpSiteDirectory = tmpSiteDir;
+        }
+
+        return this.tmpSiteDirectory;
+    }
+
+    /**
+     * Copy all site and generated-site files in the tmpSiteDirectory.
+     * <br/>
+     * <b>Note</b>: ignore copying of <code>generated-site</code> files if they already exist in the
+     * <code>site</code> dir.
+     *
+     * @param tmpSiteDir not null
+     * @throws IOException if any
+     */
+    private void prepareTempSiteDirectory( final File tmpSiteDir )
+        throws IOException
+    {
+        // safety
+        tmpSiteDir.mkdirs();
+
+        // copy site
+        FileUtils.copyDirectoryStructure( siteDirectory, tmpSiteDir );
+        // Remove SCM files
+        List files =
+            FileUtils.getFileAndDirectoryNames( tmpSiteDir, FileUtils.getDefaultExcludesAsString(), null, true,
+                                                true, true, true );
+        for ( Iterator it = files.iterator(); it.hasNext(); )
+        {
+            File file = new File( it.next().toString() );
+
+            if ( file.isDirectory() )
+            {
+                FileUtils.deleteDirectory( file );
+            }
+            else
+            {
+                file.delete();
+            }
+        }
+
+        // copy generated-site
+        if ( generatedSiteDirectory != null && generatedSiteDirectory.exists() )
+        {
+            for ( final Iterator iterator = getAvailableLocales().iterator(); iterator.hasNext(); )
+            {
+                final Locale locale = (Locale) iterator.next();
+
+                List siteFiles =
+                    FileUtils.getFileNames( siteDirectory, "**/*", FileUtils.getDefaultExcludesAsString(), false );
+                if ( !locale.getLanguage().equals( getDefaultLocale().getLanguage() ) )
+                {
+                    siteFiles =
+                        FileUtils.getFileNames( new File( siteDirectory, locale.getLanguage() ), "**/*",
+                                                FileUtils.getDefaultExcludesAsString(), false );
+                }
+
+                List generatedSiteFiles =
+                    FileUtils.getFileNames( generatedSiteDirectory, "**/*",
+                                            FileUtils.getDefaultExcludesAsString(), false );
+                if ( !locale.getLanguage().equals( getDefaultLocale().getLanguage() ) )
+                {
+                    generatedSiteFiles =
+                        FileUtils.getFileNames( new File( generatedSiteDirectory, locale.getLanguage() ), "**/*",
+                                                FileUtils.getDefaultExcludesAsString(), false );
+                }
+
+                for ( final Iterator it = generatedSiteFiles.iterator(); it.hasNext(); )
+                {
+                    String generatedSiteFile = it.next().toString();
+
+                    if ( siteFiles.contains( generatedSiteFile ) )
+                    {
+                        getLog().warn(
+                                       "Generated-site already contains a file in site: " + generatedSiteFile
+                                           + ". Ignoring copying it!" );
+                        continue;
+                    }
+
+                    if ( !locale.getLanguage().equals( getDefaultLocale().getLanguage() ) )
+                    {
+                        File in =
+                            new File( new File( generatedSiteDirectory, locale.getLanguage() ), generatedSiteFile );
+                        File out = new File( new File( tmpSiteDir, locale.getLanguage() ), generatedSiteFile );
+                        out.getParentFile().mkdirs();
+                        FileUtils.copyFile( in, out );
+                    }
+                    else
+                    {
+                        File in = new File( generatedSiteDirectory, generatedSiteFile );
+                        File out = new File( tmpSiteDir, generatedSiteFile );
+                        out.getParentFile().mkdirs();
+                        FileUtils.copyFile( in, out );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
      * Constructs a DocumentModel for the current project. The model is either read from
      * a descriptor file, if it exists, or constructed from information in the pom and site.xml.
      *
@@ -424,19 +559,33 @@
 
     /**
      * @return the default locale from <code>siteTool</code>.
+     * @see #getAvailableLocales()
      */
     private Locale getDefaultLocale()
     {
         if ( this.defaultLocale == null )
         {
-            final List localesList = siteTool.getAvailableLocales( locales );
-            this.defaultLocale = (Locale) localesList.get( 0 );
+            this.defaultLocale = (Locale) getAvailableLocales().get( 0 );
         }
 
         return this.defaultLocale;
     }
 
     /**
+     * @return the available locales from <code>siteTool</code>.
+     * @see SiteTool#getAvailableLocales(String)
+     */
+    private List getAvailableLocales()
+    {
+        if ( this.localesList == null )
+        {
+            this.localesList = siteTool.getAvailableLocales( locales );
+        }
+
+        return this.localesList;
+    }
+
+    /**
      * @return the DecorationModel instance from <code>site.xml</code>
      * @throws MojoExecutionException if any
      */