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 2007/02/09 19:36:42 UTC

svn commit: r505412 - /maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java

Author: jvanzyl
Date: Fri Feb  9 10:36:42 2007
New Revision: 505412

URL: http://svn.apache.org/viewvc?view=rev&rev=505412
Log:
o merging in Dan Kulp's changes

Modified:
    maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java

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?view=diff&rev=505412&r1=505411&r2=505412
==============================================================================
--- 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 Fri Feb  9 10:36:42 2007
@@ -21,12 +21,15 @@
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.resources.remote.io.xpp3.RemoteResourcesBundleXpp3Reader;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectUtils;
 import org.apache.maven.shared.downloader.DownloadException;
 import org.apache.maven.shared.downloader.DownloadNotFoundException;
@@ -39,10 +42,14 @@
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.codehaus.plexus.velocity.VelocityComponent;
 
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.PrintWriter;
 import java.io.Writer;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -52,12 +59,14 @@
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.List;
 
 /**
  * Pull down resourceBundles containing remote resources and process the resources contained
  * inside the artifact.
  *
  * @goal process
+ * @requiresDependencyResolution runtime
  * @phase generate-resources
  */
 public class ProcessRemoteResourcesMojo
@@ -90,14 +99,31 @@
      * @parameter expression="${project.build.directory}/maven-shared-archive-resources"
      */
     private File outputDirectory;
+    
+    /**
+     * The directory containing extra information appended to the generated resources.
+     *
+     * @parameter expression="${basedir}/src/main/appended-resources"
+     */
+    private File appendedResourcesDirectory;
 
     /**
      * The resource bundles that will be retrieved and processed.
      *
      * @parameter
+     * @required
      */
     private ArrayList resourceBundles;
-
+    
+    /**
+     * The list of resources defined for the project.
+     *
+     * @parameter expression="${project.resources}"
+     * @required
+     */
+    private List resources;
+    
+    
     /**
      * Artifact downloader.
      *
@@ -130,6 +156,17 @@
      * @parameter expression="${session}"
      */
     private MavenSession mavenSession;
+    
+    
+   /**
+    * Artifact factory, needed to create projects from the artifacts.
+    *
+    * @component role="org.apache.maven.project.MavenProjectBuilder"
+    * @required
+    * @readonly
+    */
+   protected MavenProjectBuilder mavenProjectBuilder;
+
 
     public void execute()
         throws MojoExecutionException
@@ -141,8 +178,6 @@
 
         RemoteResourcesClassLoader classLoader = new RemoteResourcesClassLoader();
 
-        File standardResourcesDirectory = new File( project.getBasedir(), "src/main/resources" );
-
         int bundleCount = 1;
 
         for ( Iterator i = resourceBundles.iterator(); i.hasNext(); )
@@ -216,7 +251,8 @@
         VelocityContext context = new VelocityContext();
 
         context.put( "project", project );
-
+        context.put( "projects", getProjects() );
+        
         String year = new SimpleDateFormat( "yyyy" ).format( new Date() );
 
         context.put( "presentYear", year );
@@ -251,26 +287,41 @@
                 {
                     String bundleResource = (String) i.next();
 
-                    String projectResource = StringUtils.replaceOnce( bundleResource, ".vm", ".txt" );
+                    String projectResource = bundleResource;
 
-                    // Don't overwrite resource that are already being provided.
 
-                    File projectResourceFile = new File( standardResourcesDirectory, projectResource );
+                    if ( projectResource.endsWith(".vm") )
+                    {
+                        projectResource = projectResource.substring( 0, projectResource.length() - 3 );
+                    }
+
+                    // Don't overwrite resource that are already being provided.
 
                     File f = new File( outputDirectory, projectResource );
 
                     FileUtils.mkdir( f.getParentFile().getAbsolutePath() );
 
-                    if ( projectResourceFile.exists() )
+                    if ( !copyResourceIfExists(f, projectResource) )
                     {
-                        FileUtils.copyFile( projectResourceFile, f );
-                    }
-                    else
-                    {
-                        Writer writer = new FileWriter( f );
+                        PrintWriter writer = new PrintWriter( new FileWriter( f ) );
 
                         velocity.getEngine().mergeTemplate( bundleResource, context, writer );
 
+                        File appendedResourceFile = new File( appendedResourcesDirectory, projectResource);
+                        if ( appendedResourceFile.exists() ) 
+                        {
+                            FileReader freader = new FileReader( appendedResourceFile );
+                            BufferedReader breader = new BufferedReader( freader );
+                            
+                            String line = breader.readLine();
+                   
+                            while ( line != null )
+                            {
+                                writer.println( line );
+                                line = breader.readLine();
+                            }
+                        }
+                        
                         writer.close();
                     }
                 }
@@ -321,5 +372,54 @@
         {
             throw new MojoExecutionException( "Error creating dot file for archiving instructions.", e );
         }
+    }
+    
+    protected List getProjects()
+        throws MojoExecutionException
+    {
+        List projects = new ArrayList();
+        for ( Iterator it = project.getArtifacts().iterator() ; it.hasNext() ; ) 
+        {
+            Artifact artifact = (Artifact) it.next();
+            try {
+                MavenProject p = mavenProjectBuilder.buildFromRepository(artifact,
+                                                        remoteRepositories,
+                                                        localRepository,
+                                                        true);
+                projects.add(p);
+            } catch (ProjectBuildingException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            
+        }
+        return projects;
+    }
+    
+    protected boolean copyResourceIfExists(File file, String relFileName)
+        throws IOException 
+    {
+        for ( Iterator i = resources.iterator(); i.hasNext(); )
+        {
+            Resource resource = (Resource) i.next();
+            File resourceDirectory = new File( resource.getDirectory() );
+
+            if ( !resourceDirectory.exists() )
+            {
+                continue;
+            }
+            //TODO - really should use the resource includes/excludes and name mapping
+            File source = new File(resourceDirectory, relFileName);
+            
+            if ( source.exists() )
+            {
+                //TODO - should use filters here
+                FileUtils.copyFile(source, file);
+                
+                return true;
+            }
+            
+        }
+        return false;
     }
 }