[MPDF-47] use localized doc descriptor when available
authorHerve Boutemy <hboutemy@apache.org>
Sun, 5 Nov 2017 17:38:22 +0000 (17:38 +0000)
committerHerve Boutemy <hboutemy@apache.org>
Sun, 5 Nov 2017 17:38:22 +0000 (17:38 +0000)
Submitted by: Tim Rademacher
Applied with some modification and an additional IT

git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@1814364 13f79535-47bb-0310-9956-ffa450edef68

src/it/descriptor/pom.xml [new file with mode: 0644]
src/it/descriptor/src/site/fr/xdoc/foo.xml [new file with mode: 0644]
src/it/descriptor/src/site/fr/xdoc/help.xml [new file with mode: 0644]
src/it/descriptor/src/site/pdf.xml [new file with mode: 0644]
src/it/descriptor/src/site/pdf_fr.xml [new file with mode: 0644]
src/it/descriptor/src/site/xdoc/foo.xml [new file with mode: 0644]
src/it/descriptor/src/site/xdoc/help.xml [new file with mode: 0644]
src/it/descriptor/verify.groovy [new file with mode: 0644]
src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java
src/main/java/org/apache/maven/plugins/pdf/PdfMojo.java

diff --git a/src/it/descriptor/pom.xml b/src/it/descriptor/pom.xml
new file mode 100644 (file)
index 0000000..92c879a
--- /dev/null
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.pdf</groupId>
+  <artifactId>descriptor</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>PDF with Descriptor Test</name>
+  <description>
+    Tests a multi-locales PDF generation with descriptors.
+  </description>
+
+  <organization>
+    <name>The Apache Software Foundation</name>
+    <url>http://www.apache.org/</url>
+  </organization>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-clean-plugin</artifactId>
+        <version>2.4.1</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pdf-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <locales>en,fr</locales>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <reporting>
+    <plugins>
+      <plugin>
+        <artifactId>maven-project-info-reports-plugin</artifactId>
+        <version>2.9</version>
+        <reportSets>
+          <reportSet>
+            <reports>
+              <report>license</report>
+              <report>summary</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+    </plugins>
+  </reporting>  
+  
+</project>
diff --git a/src/it/descriptor/src/site/fr/xdoc/foo.xml b/src/it/descriptor/src/site/fr/xdoc/foo.xml
new file mode 100644 (file)
index 0000000..287a63a
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+  <properties>
+    <title>Xdoc Truc en Français</title>
+    <author>Hervé Boutemy</author>
+  </properties>
+  <body>
+    <section name="Xdoc Truc en Français">
+      <p>Ce fichier a été écrit en Xdoc Doxia Markup.</p>
+    </section>
+  </body>
+</document>
diff --git a/src/it/descriptor/src/site/fr/xdoc/help.xml b/src/it/descriptor/src/site/fr/xdoc/help.xml
new file mode 100644 (file)
index 0000000..64d75db
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+  <properties>
+    <title>Xdoc Aide en Français</title>
+    <author>Hervé Boutemy</author>
+  </properties>
+  <body>
+    <section name="Xdoc Aide en Français">
+      <p>Ce fichier a été écrit en Xdoc Doxia Markup.</p>
+    </section>
+  </body>
+</document>
diff --git a/src/it/descriptor/src/site/pdf.xml b/src/it/descriptor/src/site/pdf.xml
new file mode 100644 (file)
index 0000000..a2d873c
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!--\r
+Licensed to the Apache Software Foundation (ASF) under one\r
+or more contributor license agreements.  See the NOTICE file\r
+distributed with this work for additional information\r
+regarding copyright ownership.  The ASF licenses this file\r
+to you under the Apache License, Version 2.0 (the\r
+"License"); you may not use this file except in compliance\r
+with the License.  You may obtain a copy of the License at\r
+\r
+  http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+Unless required by applicable law or agreed to in writing,\r
+software distributed under the License is distributed on an\r
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
+KIND, either express or implied.  See the License for the\r
+specific language governing permissions and limitations\r
+under the License.\r
+-->\r
+\r
+<document xmlns="http://maven.apache.org/DOCUMENT/1.0.1"\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+  xsi:schemaLocation="http://maven.apache.org/DOCUMENT/1.0.1 http://maven.apache.org/xsd/document-1.0.1.xsd"\r
+  outputName="maven-pdf-plugin">\r
+\r
+       <meta>\r
+               <title>AnyTitle</title>\r
+       </meta>\r
+\r
+       <toc name="Table of Contents">\r
+               <item name="Help" ref="help.xml" />\r
+               <item name="Foo" ref="foo.xml" />\r
+       </toc>\r
+\r
+       <cover>\r
+               <coverTitle>${project.name}</coverTitle>\r
+               <coverSubTitle>v. ${project.version}</coverSubTitle>\r
+               <coverType>User Guide</coverType>\r
+               <projectName>${project.name}</projectName>\r
+               <!--<projectLogo>some project logo</projectLogo>-->\r
+               <companyName>Apache</companyName>\r
+               <!--<companyLogo>some company logo</companyLogo>-->\r
+       </cover>\r
+</document>\r
diff --git a/src/it/descriptor/src/site/pdf_fr.xml b/src/it/descriptor/src/site/pdf_fr.xml
new file mode 100644 (file)
index 0000000..e8f2853
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!--\r
+Licensed to the Apache Software Foundation (ASF) under one\r
+or more contributor license agreements.  See the NOTICE file\r
+distributed with this work for additional information\r
+regarding copyright ownership.  The ASF licenses this file\r
+to you under the Apache License, Version 2.0 (the\r
+"License"); you may not use this file except in compliance\r
+with the License.  You may obtain a copy of the License at\r
+\r
+  http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+Unless required by applicable law or agreed to in writing,\r
+software distributed under the License is distributed on an\r
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
+KIND, either express or implied.  See the License for the\r
+specific language governing permissions and limitations\r
+under the License.\r
+-->\r
+\r
+<document xmlns="http://maven.apache.org/DOCUMENT/1.0.1"\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+  xsi:schemaLocation="http://maven.apache.org/DOCUMENT/1.0.1 http://maven.apache.org/xsd/document-1.0.1.xsd"\r
+  outputName="maven-pdf-plugin">\r
+\r
+       <meta>\r
+               <title>N'importe quel Titre</title>\r
+       </meta>\r
+\r
+       <toc name="Table des matieres"><!-- using 'è' generates content too complex to test in pdf... -->\r
+               <item name="Aide" ref="help.xml" />\r
+               <item name="Truc" ref="foo.xml" />\r
+       </toc>\r
+\r
+       <cover>\r
+               <coverTitle>${project.name}</coverTitle>\r
+               <coverSubTitle>v. ${project.version}</coverSubTitle>\r
+               <coverType>Documentation Utilisateur</coverType>\r
+               <projectName>${project.name}</projectName>\r
+               <!--<projectLogo>some project logo</projectLogo>-->\r
+               <companyName>Apache</companyName>\r
+               <!--<companyLogo>some company logo</companyLogo>-->\r
+       </cover>\r
+</document>\r
diff --git a/src/it/descriptor/src/site/xdoc/foo.xml b/src/it/descriptor/src/site/xdoc/foo.xml
new file mode 100644 (file)
index 0000000..3ad42dd
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+  <properties>
+    <title>Xdoc Foo in Default Locale</title>
+    <author>Hervé Boutemy</author>
+  </properties>
+  <body>
+    <section name="Xdoc Foo in in Default Locale">
+      <p>This file was written in Xdoc Doxia Markup.</p>
+    </section>
+  </body>
+</document>
diff --git a/src/it/descriptor/src/site/xdoc/help.xml b/src/it/descriptor/src/site/xdoc/help.xml
new file mode 100644 (file)
index 0000000..c8bed62
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+  <properties>
+    <title>Xdoc Help in Default Locale</title>
+    <author>Hervé Boutemy</author>
+  </properties>
+  <body>
+    <section name="Xdoc Help in in Default Locale">
+      <p>This file was written in Xdoc Doxia Markup.</p>
+    </section>
+  </body>
+</document>
diff --git a/src/it/descriptor/verify.groovy b/src/it/descriptor/verify.groovy
new file mode 100644 (file)
index 0000000..55ed8a8
--- /dev/null
@@ -0,0 +1,24 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+pdfFile = new File( basedir, "target/pdf/fr/maven-pdf-plugin.pdf" )
+
+assert !pdfFile.text.contains( "Table of Content" )
+assert pdfFile.text.contains( "Table des matieres" )
index 4492c74..bb778ed 100644 (file)
@@ -31,7 +31,7 @@ import org.apache.maven.doxia.document.io.xpp3.DocumentXpp3Reader;
 
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
-
+import org.apache.maven.shared.utils.io.FileUtils;
 import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
 import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.interpolation.Interpolator;
@@ -42,6 +42,7 @@ import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import java.util.Locale;
 
 /**
  * Read and filter a DocumentModel from a document descriptor file.
@@ -57,12 +58,14 @@ public class DocumentDescriptorReader
     /** Used to log the interpolated document descriptor. */
     private final Log log;
 
+    private final Locale locale;
+
     /**
      * Constructor.
      */
     public DocumentDescriptorReader()
     {
-        this( null, null );
+        this( null, null, null );
     }
 
     /**
@@ -72,7 +75,7 @@ public class DocumentDescriptorReader
      */
     public DocumentDescriptorReader( final MavenProject project )
     {
-        this( project, null );
+        this( project, null, null );
     }
 
     /**
@@ -81,23 +84,37 @@ public class DocumentDescriptorReader
      * @param project may be null.
      * @param log may be null.
      */
-    public DocumentDescriptorReader( final MavenProject project, final Log log )
+    public DocumentDescriptorReader( final MavenProject project, final Log log, final Locale locale )
     {
         this.project = project;
         this.log = log;
+        this.locale = locale;
     }
 
     /**
      * Read and filter the <code>docDescriptor</code> file.
      *
-     * @param docDescriptor not null.
+     * @param docDescriptor not null, corresponding to non-localized descriptor file.
      * @return a DocumentModel instance.
      * @throws XmlPullParserException if an error occurs during parsing.
      * @throws IOException if an error occurs during reading.
      */
-    public DocumentModel readAndFilterDocumentDescriptor( final File docDescriptor )
+    public DocumentModel readAndFilterDocumentDescriptor( File docDescriptor )
         throws XmlPullParserException, IOException
     {
+        if ( locale != null )
+        {
+            String descriptorFilename = docDescriptor.getName();
+            String localized = FileUtils.removeExtension( descriptorFilename ) + '_' + locale.getLanguage() + '.'
+                + FileUtils.getExtension( descriptorFilename );
+            File localizedDocDescriptor = new File( docDescriptor.getParentFile(), localized );
+
+            if ( localizedDocDescriptor.exists() )
+            {
+                docDescriptor = localizedDocDescriptor;
+            }
+        }
+
         Reader reader = null;
         try
         {
index cef16fe..06106db 100644 (file)
@@ -719,8 +719,8 @@ public class PdfMojo
 
         try
         {
-            model =
-                new DocumentDescriptorReader( project, getLog() ).readAndFilterDocumentDescriptor( docDescriptor );
+            model = new DocumentDescriptorReader( project, getLog(),
+                                                  locale ).readAndFilterDocumentDescriptor( docDescriptor );
         }
         catch ( XmlPullParserException ex )
         {