You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2009/04/06 16:49:44 UTC

svn commit: r762367 - in /maven/plugins/trunk/maven-remote-resources-plugin: ./ src/main/java/org/apache/maven/plugin/resources/remote/ src/main/mdo/ src/test/java/org/apache/maven/plugin/resources/remote/ src/test/resources/

Author: jvanzyl
Date: Mon Apr  6 14:49:43 2009
New Revision: 762367

URL: http://svn.apache.org/viewvc?rev=762367&view=rev
Log:
MRRESOURCES-36: ${project.build.sourceEncoding} not honoured
Submitted by: Christian Schulte

Added:
    maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm   (with props)
    maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm   (with props)
Modified:
    maven/plugins/trunk/maven-remote-resources-plugin/pom.xml
    maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
    maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
    maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo
    maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java

Modified: maven/plugins/trunk/maven-remote-resources-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/pom.xml?rev=762367&r1=762366&r2=762367&view=diff
==============================================================================
--- maven/plugins/trunk/maven-remote-resources-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-remote-resources-plugin/pom.xml Mon Apr  6 14:49:43 2009
@@ -29,7 +29,7 @@
   </parent>
 
   <artifactId>maven-remote-resources-plugin</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.1-SNAPSHOT</version>
   <packaging>maven-plugin</packaging>
 
   <name>Maven Remote Resources Plugin</name>
@@ -169,7 +169,7 @@
               <goal>xsd</goal>
             </goals>
             <configuration>
-              <version>1.0.0</version>
+              <version>1.1.0</version>
               <models>
                 <model>src/main/mdo/remote-resources.mdo</model>
               </models>
@@ -183,7 +183,7 @@
               <goal>xpp3-reader</goal>
             </goals>
             <configuration>
-              <version>1.0.0</version>
+              <version>1.1.0</version>
               <models>
                 <model>src/main/mdo/remote-resources.mdo</model>
               </models>

Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java?rev=762367&r1=762366&r2=762367&view=diff
==============================================================================
--- maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java (original)
+++ maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java Mon Apr  6 14:49:43 2009
@@ -83,6 +83,15 @@
      */
     private String[] excludes;
 
+    /**
+     * Encoding of the bundle.
+     *
+     * @since 1.1
+     * @optional
+     * @parameter expression="${project.build.sourceEncoding}"
+     */
+    private String sourceEncoding;
+
     public void execute()
         throws MojoExecutionException
     {
@@ -95,6 +104,7 @@
         // so that velocity can easily process any resources inside the JAR that need to be processed.
 
         RemoteResourcesBundle remoteResourcesBundle = new RemoteResourcesBundle();
+        remoteResourcesBundle.setSourceEncoding( sourceEncoding );
 
         DirectoryScanner scanner = new DirectoryScanner();
 

Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java?rev=762367&r1=762366&r2=762367&view=diff
==============================================================================
--- maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java (original)
+++ maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java Mon Apr  6 14:49:43 2009
@@ -19,12 +19,16 @@
  * under the License.
  */
 
-import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.StringReader;
 import java.net.MalformedURLException;
@@ -298,11 +302,11 @@
      * @readonly
      */
     private ResourceManager locator;
-    
-    
+
+
     /**
      * Scope to include. An Empty string indicates all scopes (default).
-     * 
+     *
      * @since 1.0
      * @parameter expression="${includeScope}" default-value="runtime"
      * @optional
@@ -311,16 +315,16 @@
 
     /**
      * Scope to exclude. An Empty string indicates no scopes (default).
-     * 
+     *
      * @since 1.0
      * @parameter expression="${excludeScope}" default-value=""
      * @optional
      */
     protected String excludeScope;
-    
+
     /**
      * Comma separated list of Artifact names too exclude.
-     * 
+     *
      * @since 1.0
      * @optional
      * @parameter expression="${excludeArtifactIds}" default-value=""
@@ -329,7 +333,7 @@
 
     /**
      * Comma separated list of Artifact names to include.
-     * 
+     *
      * @since 1.0
      * @optional
      * @parameter expression="${includeArtifactIds}" default-value=""
@@ -338,7 +342,7 @@
 
     /**
      * Comma separated list of GroupId Names to exclude.
-     * 
+     *
      * @since 1.0
      * @optional
      * @parameter expression="${excludeGroupIds}" default-value=""
@@ -347,7 +351,7 @@
 
     /**
      * Comma separated list of GroupIds to include.
-     * 
+     *
      * @since 1.0
      * @optional
      * @parameter expression="${includeGroupIds}" default-value=""
@@ -356,7 +360,7 @@
 
     /**
      * If we should exclude transitive dependencies
-     * 
+     *
      * @since 1.0
      * @optional
      * @parameter expression="${excludeTransitive}" default-value="false"
@@ -455,7 +459,7 @@
         throws MojoExecutionException
     {
         List projects = new ArrayList();
-        
+
         // add filters in well known order, least specific to most specific
         FilterArtifacts filter = new FilterArtifacts();
 
@@ -776,10 +780,30 @@
                         {
                             if ( doVelocity )
                             {
-                                PrintWriter writer = new PrintWriter( new FileWriter( f ) );
+                                PrintWriter writer;
+                                if ( bundle.getSourceEncoding() == null )
+                                {
+                                    writer = new PrintWriter( new FileWriter( f ) );
+                                }
+                                else
+                                {
+                                    writer = new PrintWriter( new OutputStreamWriter( new FileOutputStream( f ),
+                                                                                      bundle.getSourceEncoding() ) );
+
+                                }
+
                                 try
                                 {
-                                    velocity.getEngine().mergeTemplate( bundleResource, context, writer );
+                                    if ( bundle.getSourceEncoding() == null )
+                                    {
+                                        velocity.getEngine().mergeTemplate( bundleResource, context, writer );
+                                    }
+                                    else
+                                    {
+                                        velocity.getEngine().mergeTemplate( bundleResource, bundle.getSourceEncoding(),
+                                                                            context, writer );
+
+                                    }
                                 }
                                 finally
                                 {
@@ -799,31 +823,36 @@
                                                                     projectResource + ".vm" );
                             if ( appendedResourceFile.exists() )
                             {
-                                PrintWriter writer = new PrintWriter( new FileWriter( f, true ) );
-                                FileReader freader = new FileReader( appendedResourceFile );
-                                BufferedReader breader = new BufferedReader( freader );
+                                final InputStream in = new FileInputStream( appendedResourceFile );
+                                final OutputStream append = new FileOutputStream( f, true );
 
                                 try
                                 {
-                                    String line = breader.readLine();
-    
-                                    while ( line != null )
-                                    {
-                                        writer.println( line );
-                                        line = breader.readLine();
-                                    }
+                                    IOUtil.copy( in, append );
                                 }
                                 finally
                                 {
-                                    IOUtil.close(writer);
-                                    IOUtil.close(breader);
+                                    IOUtil.close( in );
+                                    IOUtil.close( append );
                                 }
-                            } 
-                            else if ( appendedVmResourceFile.exists() ) 
+                            }
+                            else if ( appendedVmResourceFile.exists() )
                             {
-                                PrintWriter writer = new PrintWriter( new FileWriter( f, true ) );
+                                PrintWriter writer;
                                 FileReader freader = new FileReader( appendedVmResourceFile );
-                                try 
+
+                                if ( bundle.getSourceEncoding() == null )
+                                {
+                                    writer = new PrintWriter( new FileWriter( f, true ) );
+                                }
+                                else
+                                {
+                                    writer = new PrintWriter( new OutputStreamWriter( new FileOutputStream( f, true ),
+                                                                                      bundle.getSourceEncoding() ) );
+
+                                }
+
+                                try
                                 {
                                     Velocity.init();
                                     Velocity.evaluate( context, writer, "remote-resources", freader );
@@ -834,7 +863,7 @@
                                     IOUtil.close(freader);
                                 }
                             }
-                            
+
                         }
                     }
                 }

Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo?rev=762367&r1=762366&r2=762367&view=diff
==============================================================================
--- maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo (original)
+++ maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo Mon Apr  6 14:49:43 2009
@@ -33,12 +33,12 @@
   <classes>
     <class rootElement="true" xml.tagName="remoteResourcesBundle">
       <name>RemoteResourcesBundle</name>
-      <version>1.0.0</version>
+      <version>1.1.0</version>
       <description>Root element of the remote-resources.xml file.</description>
       <fields>
         <field>
           <name>remoteResources</name>
-          <version>1.0.0</version>
+          <version>1.1.0</version>
           <description><![CDATA[
             Remote resources that are contained in a remote resources bundle.
           ]]></description>
@@ -47,6 +47,14 @@
             <multiplicity>*</multiplicity>
           </association>
         </field>
+        <field>
+          <name>sourceEncoding</name>
+          <version>1.1.0</version>
+          <description><![CDATA[
+            Source encoding of the remote resources contained in the bundle.
+          ]]></description>
+          <type>String</type>
+        </field>
       </fields>
     </class>
   </classes>

Modified: maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java?rev=762367&r1=762366&r2=762367&view=diff
==============================================================================
--- maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java (original)
+++ maven/plugins/trunk/maven-remote-resources-plugin/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java Mon Apr  6 14:49:43 2009
@@ -30,7 +30,9 @@
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -38,6 +40,7 @@
 import java.util.Properties;
 import java.util.jar.JarOutputStream;
 import java.util.zip.ZipEntry;
+import org.codehaus.plexus.util.IOUtil;
 
 
 /**
@@ -90,6 +93,7 @@
         throws Exception
     {
         buildResourceBundle( "default-createbundle",
+                            null,
                             new String[] { "SIMPLE.txt" },
                             null );
     }
@@ -117,6 +121,7 @@
         File file = new File( repo.getBasedir() + "/" + path + ".jar" );
         file.getParentFile().mkdirs();
         buildResourceBundle( "default-simplebundles-create",
+                             null,
                              new String[] { "SIMPLE.txt" },
                              file );
 
@@ -128,6 +133,88 @@
         assertTrue( file.exists() );
     }
 
+    public void testVelocityUTF8()
+        throws Exception
+    {
+        final MavenProjectResourcesStub project = createTestProject( "default-utf8" );
+        final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings( project ,
+                                                                        new String[] {
+                                                                            "test:test:1.2"
+                                                                        } );
+
+        setupDefaultProject( project );
+
+        ArtifactRepository repo = (ArtifactRepository) getVariableValueFromObject( mojo, "localRepository" );
+        String path = repo.pathOf( new DefaultArtifact( "test",
+                                                        "test",
+                                                        VersionRange.createFromVersion( "1.2" ),
+                                                        null,
+                                                        "jar",
+                                                        "",
+                                                        new DefaultArtifactHandler() ) );
+
+        File file = new File( repo.getBasedir() + "/" + path + ".jar" );
+        file.getParentFile().mkdirs();
+        buildResourceBundle( "default-utf8-create",
+                             "UTF-8",
+                             new String[] { "UTF-8.bin.vm" },
+                             file );
+
+        mojo.execute();
+
+        file = (File) getVariableValueFromObject( mojo, "outputDirectory" );
+        file = new File( file, "UTF-8.bin" );
+        assertTrue( file.exists() );
+
+        InputStream in = new FileInputStream( file );
+        byte[] data = IOUtil.toByteArray( in );
+        IOUtil.close( in );
+
+        byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( "UTF-8" );
+        assertTrue( Arrays.equals( expected, data ) );
+    }
+
+    public void testVelocityISO88591()
+        throws Exception
+    {
+        final MavenProjectResourcesStub project = createTestProject( "default-iso88591" );
+        final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings( project ,
+                                                                        new String[] {
+                                                                            "test:test:1.3"
+                                                                        } );
+
+        setupDefaultProject( project );
+
+        ArtifactRepository repo = (ArtifactRepository) getVariableValueFromObject( mojo, "localRepository" );
+        String path = repo.pathOf( new DefaultArtifact( "test",
+                                                        "test",
+                                                        VersionRange.createFromVersion( "1.3" ),
+                                                        null,
+                                                        "jar",
+                                                        "",
+                                                        new DefaultArtifactHandler() ) );
+
+        File file = new File( repo.getBasedir() + "/" + path + ".jar" );
+        file.getParentFile().mkdirs();
+        buildResourceBundle( "default-iso88591-create",
+                             "ISO-8859-1",
+                             new String[] { "ISO-8859-1.bin.vm" },
+                             file );
+
+        mojo.execute();
+
+        file = (File) getVariableValueFromObject( mojo, "outputDirectory" );
+        file = new File( file, "ISO-8859-1.bin" );
+        assertTrue( file.exists() );
+
+        InputStream in = new FileInputStream( file );
+        byte[] data = IOUtil.toByteArray( in );
+        IOUtil.close( in );
+
+        byte[] expected = "\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF".getBytes( "ISO-8859-1" );
+        assertTrue( Arrays.equals( expected, data ) );
+    }
+
     public void testFilteredBundles()
         throws Exception
     {
@@ -151,6 +238,7 @@
         File file = new File( repo.getBasedir() + "/" + path + ".jar" );
         file.getParentFile().mkdirs();
         buildResourceBundle( "default-filterbundles-create",
+                             null,
                              new String[] { "FILTER.txt.vm" },
                              file );
 
@@ -169,6 +257,7 @@
     }
 
     protected void buildResourceBundle( String id,
+                                       String sourceEncoding,
                                        String resourceNames[],
                                        File jarName )
     throws Exception
@@ -176,7 +265,7 @@
         final MavenProjectResourcesStub project = createTestProject( id );
 
         final File resourceDir = new File( project.getBasedir() + "/src/main/resources" );
-        final BundleRemoteResourcesMojo mojo = lookupBundleMojoWithSettings( project , resourceDir );
+        final BundleRemoteResourcesMojo mojo = lookupBundleMojoWithSettings( project , resourceDir, sourceEncoding );
 
         setupDefaultProject( project );
 
@@ -209,9 +298,10 @@
             for ( int x = 0; x < resourceNames.length; x++ )
             {
                 File resource = new File( resourceDir, resourceNames[x] );
-                data = FileUtils.fileRead( resource );
+                InputStream in = new FileInputStream( resource );
                 jar.putNextEntry( new ZipEntry( resourceNames[x] ) );
-                jar.write( data.getBytes() );
+                IOUtil.copy( in, jar );
+                IOUtil.close( in );
                 jar.closeEntry();
             }
             jar.close();
@@ -252,16 +342,17 @@
         throws Exception
     {
         File resourceDir = new File( project.getBasedir() + "/src/main/resources" );
-        return lookupBundleMojoWithSettings( project, resourceDir );
+        return lookupBundleMojoWithSettings( project, resourceDir, null );
     }
     protected BundleRemoteResourcesMojo lookupBundleMojoWithSettings( final MavenProject project,
-                                                                      File resourceDir )
+                                                                      File resourceDir, String sourceEncoding )
     throws Exception
     {
         final BundleRemoteResourcesMojo mojo = lookupBundleMojo();
 
         setVariableValueToObject( mojo, "resourcesDirectory", resourceDir );
         setVariableValueToObject( mojo, "outputDirectory", new File( project.getBuild().getOutputDirectory() ) );
+        setVariableValueToObject( mojo, "sourceEncoding", sourceEncoding );
         return mojo;
     }
 

Added: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm?rev=762367&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/ISO-8859-1.bin.vm
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm?rev=762367&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/plugins/trunk/maven-remote-resources-plugin/src/test/resources/UTF-8.bin.vm
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream