Author: kenney
Date: Thu Sep 15 03:14:32 2005
New Revision: 289188

URL: http://svn.apache.org/viewcvs?rev=289188&view=rev
Log:
o Did some refactoring: moving utility methods to EclipseUtils so there's no
  confusion as to which project is used.

o Use executedProject everywhere except for acquiring the artifact list; the 
  executedProject misses that list (that's because no deps are resolved in
  the forked lifecycle execution; it's delayed until the plugin is encountered
  and it's requiresDependencyResolution is seen.)

o Added flag -Declipse.downloadSources=true|false to skip source downloading

Modified:
    
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
    
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java
    
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java
    
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java

Modified: 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
 (original)
+++ 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
 Thu Sep 15 03:14:32 2005
@@ -57,7 +57,7 @@
     protected void write( File projectBaseDir, File basedir, MavenProject 
project, List referencedReactorArtifacts,
                          EclipseSourceDir[] sourceDirs, List 
classpathContainers, ArtifactRepository localRepository,
                          ArtifactResolver artifactResolver, ArtifactFactory 
artifactFactory,
-                         List remoteArtifactRepositories )
+                         List remoteArtifactRepositories, boolean 
downloadSources )
         throws EclipsePluginException
     {
 
@@ -128,7 +128,7 @@
         {
             Artifact artifact = (Artifact) it.next();
             addDependency( writer, artifact, referencedReactorArtifacts, 
localRepository, artifactResolver,
-                           artifactFactory, remoteArtifactRepositories );
+                           artifactFactory, remoteArtifactRepositories, 
downloadSources );
         }
 
         // 
----------------------------------------------------------------------
@@ -150,7 +150,8 @@
 
     private void addDependency( XMLWriter writer, Artifact artifact, List 
referencedReactorArtifacts,
                                ArtifactRepository localRepository, 
ArtifactResolver artifactResolver,
-                               ArtifactFactory artifactFactory, List 
remoteArtifactRepositories )
+                               ArtifactFactory artifactFactory, List 
remoteArtifactRepositories,
+                               boolean downloadSources )
     {
 
         String path;
@@ -173,51 +174,33 @@
             }
 
             String fullPath = artifactPath.getPath();
+
             File localRepositoryFile = new File( localRepository.getBasedir() 
);
 
             path = "M2_REPO/" //$NON-NLS-1$
                 + EclipseUtils.toRelativeAndFixSeparator( localRepositoryFile, 
fullPath, false );
 
-            // source artifact: use the "sources" classifier added by the 
source plugin
-            Artifact sourceArtifact = 
artifactFactory.createArtifactWithClassifier( artifact.getGroupId(), artifact
-                .getArtifactId(), artifact.getVersion(), "java-source", 
"sources" ); //$NON-NLS-1$ //$NON-NLS-2$
-
-            try
+            if ( downloadSources )
             {
-                if ( log.isDebugEnabled() )
+               Artifact sourceArtifact = retrieveSourceArtifact( artifact, 
remoteArtifactRepositories,
+                                                                  
localRepository, artifactResolver, artifactFactory );
+               
+                if ( !sourceArtifact.isResolved() )
                 {
-                    log.debug( Messages.getString( 
"EclipseClasspathWriter.lookingforsources", //$NON-NLS-1$
-                                                   
sourceArtifact.getArtifactId() ) );
+                    log.info( Messages.getString( 
"EclipseClasspathWriter.sourcesnotavailable", //$NON-NLS-1$
+                                                  
sourceArtifact.getArtifactId() ) );
                 }
-                artifactResolver.resolve( sourceArtifact, 
remoteArtifactRepositories, localRepository );
-            }
-            catch ( ArtifactResolutionException e )
-            {
-                // ignore, the jar has not been found
-                if ( log.isDebugEnabled() )
-                {
-                    log.debug( e.getMessage(), e );
-                }
-            }
-
-            File sourceArtifactFile = sourceArtifact.getFile();
-
-            if ( !sourceArtifact.isResolved() )
-            {
-                log.info( Messages.getString( 
"EclipseClasspathWriter.sourcesnotavailable", //$NON-NLS-1$
-                                              sourceArtifact.getArtifactId() ) 
);
-            }
-            else
-            {
-                if ( log.isDebugEnabled() )
+                else
                 {
                     log.debug( Messages.getString( 
"EclipseClasspathWriter.sourcesavailable", //$NON-NLS-1$
                                                    new Object[] {
                                                        
sourceArtifact.getArtifactId(),
-                                                       
sourceArtifactFile.getPath() } ) );
+                                                       
sourceArtifact.getFile().getAbsolutePath() } ) );
+
+                    sourcepath = "M2_REPO/" //$NON-NLS-1$
+                        + EclipseUtils.toRelativeAndFixSeparator( 
localRepositoryFile, sourceArtifact.getFile().getAbsolutePath(), false );
                 }
-                sourcepath = "M2_REPO/" //$NON-NLS-1$
-                    + EclipseUtils.toRelativeAndFixSeparator( 
localRepositoryFile, sourceArtifactFile.getPath(), false );
+
             }
 
             kind = "var"; //$NON-NLS-1$
@@ -236,5 +219,31 @@
 
     }
 
+    
+    private Artifact retrieveSourceArtifact( Artifact artifact, List 
remoteArtifactRepositories, ArtifactRepository localRepository, 
ArtifactResolver artifactResolver,
+                                       ArtifactFactory artifactFactory )
+    {
+        // source artifact: use the "sources" classifier added by the source 
plugin
+        Artifact sourceArtifact = 
artifactFactory.createArtifactWithClassifier( artifact.getGroupId(), artifact
+            .getArtifactId(), artifact.getVersion(), "java-source", "sources" 
); //$NON-NLS-1$ //$NON-NLS-2$
+
+        try
+        {
+            log.debug( Messages.getString( 
"EclipseClasspathWriter.lookingforsources", //$NON-NLS-1$
+                                               sourceArtifact.getArtifactId() 
) );
+
+            artifactResolver.resolve( sourceArtifact, 
remoteArtifactRepositories, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // ignore, the jar has not been found
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Cannot resolve source artifact", e );
+            }
+        }
+        
+        return sourceArtifact;
+    }
 }
 

Modified: 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java
 (original)
+++ 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java
 Thu Sep 15 03:14:32 2005
@@ -16,22 +16,16 @@
  * limitations under the License.
  */
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * A Maven2 plugin which integrates the use of Maven2 with Eclipse.
@@ -46,12 +40,6 @@
 public class EclipsePlugin
     extends AbstractMojo
 {
-
-    /**
-     * Separator used for natures, builders, etc. (can't use space since 
conclasspath entries can contain spaces).
-     */
-    private static final String LIST_SEPARATOR = ","; //$NON-NLS-1$
-
     /**
      * The project whose project files to create.
      * @parameter expression="${project}"
@@ -151,6 +139,13 @@
     private List classpathContainers;
 
     /**
+     * Disables the downloading of source attachments.
+     * 
+     * @parameter expression="${eclipse.downloadSources}"
+     */
+    private boolean downloadSources = true;
+
+    /**
      * Eclipse workspace directory.
      * @parameter expression="${eclipse.workspace}"
      */
@@ -243,9 +238,14 @@
     public void execute()
         throws MojoExecutionException
     {
-
-        assertNotEmpty( project.getGroupId(), "groupId" ); //$NON-NLS-1$
-        assertNotEmpty( project.getArtifactId(), "artifactId" ); //$NON-NLS-1$
+        if ( executedProject == null )
+        {
+            // backwards compat with alpha-2 only
+            executedProject = project;
+        }
+       
+        assertNotEmpty( executedProject.getGroupId(), "groupId" ); 
//$NON-NLS-1$
+        assertNotEmpty( executedProject.getArtifactId(), "artifactId" ); 
//$NON-NLS-1$
 
         // defaults
         // @todo how set List values in @default-value??
@@ -254,23 +254,25 @@
             projectnatures = new ArrayList();
             projectnatures.add( "org.eclipse.jdt.core.javanature" );
         }
+
         if ( buildcommands == null )
         {
             buildcommands = new ArrayList();
             buildcommands.add( "org.eclipse.jdt.core.javabuilder" );
         }
+
         if ( classpathContainers == null )
         {
             classpathContainers = new ArrayList();
         }
         // end defaults
 
-        if ( project.getFile() == null || !project.getFile().exists() )
+        if ( executedProject.getFile() == null || 
!executedProject.getFile().exists() )
         {
             throw new MojoExecutionException( Messages.getString( 
"EclipsePlugin.missingpom" ) ); //$NON-NLS-1$
         }
 
-        if ( "pom".equals( project.getPackaging() ) ) //$NON-NLS-1$
+        if ( "pom".equals( executedProject.getPackaging() ) && outputDir == 
null ) //$NON-NLS-1$
         {
             getLog().info( Messages.getString( "EclipsePlugin.pompackaging" ) 
); //$NON-NLS-1$
             return;
@@ -278,16 +280,16 @@
 
         if ( outputDir == null )
         {
-            outputDir = project.getFile().getParentFile();
+            outputDir = executedProject.getFile().getParentFile();
         }
-        else if ( !outputDir.equals( project.getFile().getParentFile() ) )
+        else if ( !outputDir.equals( executedProject.getFile().getParentFile() 
) )
         {
             if ( !outputDir.isDirectory() )
             {
                 throw new MojoExecutionException( Messages.getString( 
"EclipsePlugin.notadir", outputDir ) ); //$NON-NLS-1$
             }
 
-            outputDir = new File( outputDir, project.getArtifactId() );
+            outputDir = new File( outputDir, executedProject.getArtifactId() );
 
             if ( !outputDir.isDirectory() && !outputDir.mkdir() )
             {
@@ -295,12 +297,6 @@
             }
         }
 
-        if ( executedProject == null )
-        {
-            // backwards compat with alpha-2 only
-            executedProject = project;
-        }
-
         // ready to start
         write();
 
@@ -309,25 +305,25 @@
     public void write()
         throws EclipsePluginException
     {
-
-        File projectBaseDir = project.getFile().getParentFile();
+        File projectBaseDir = executedProject.getFile().getParentFile();
 
         // build the list of referenced ARTIFACTS produced by reactor projects
-        List reactorArtifacts = resolveReactorArtifacts();
+        List reactorArtifacts = EclipseUtils.resolveReactorArtifacts( project, 
reactorProjects );
 
         // build a list of UNIQUE source dirs (both src and resources) to be 
used in classpath and wtpmodules
-        EclipseSourceDir[] sourceDirs = buildDirectoryList( project, outputDir 
);
+        EclipseSourceDir[] sourceDirs = EclipseUtils.buildDirectoryList( 
executedProject, outputDir, getLog() );
 
+        // use project since that one has all artifacts resolved.
         new EclipseClasspathWriter( getLog() ).write( projectBaseDir, 
outputDir, project, reactorArtifacts, sourceDirs,
                                                       classpathContainers, 
localRepository, artifactResolver,
-                                                      artifactFactory, 
remoteArtifactRepositories );
+                                                      artifactFactory, 
remoteArtifactRepositories, downloadSources );
 
         new EclipseProjectWriter( getLog() ).write( projectBaseDir, outputDir, 
project, executedProject,
                                                     reactorArtifacts, 
projectnatures, buildcommands );
 
-        new EclipseSettingsWriter( getLog() ).write( projectBaseDir, 
outputDir, project, executedProject );
+        new EclipseSettingsWriter( getLog() ).write( projectBaseDir, 
outputDir, executedProject );
 
-        new EclipseWtpmodulesWriter( getLog() ).write( outputDir, project, 
reactorArtifacts, sourceDirs,
+        new EclipseWtpmodulesWriter( getLog() ).write( outputDir, 
executedProject, reactorArtifacts, sourceDirs,
                                                        localRepository );
 
         getLog().info( Messages.getString( "EclipsePlugin.wrote", //$NON-NLS-1$
@@ -342,166 +338,4 @@
             throw new EclipsePluginException( Messages.getString( 
"EclipsePlugin.missingelement", elementName ) ); //$NON-NLS-1$
         }
     }
-
-    private EclipseSourceDir[] buildDirectoryList( MavenProject project, File 
basedir )
-    {
-        File projectBaseDir = project.getFile().getParentFile();
-
-        // avoid duplicated entries
-        Set directories = new TreeSet();
-
-        extractSourceDirs( directories, 
executedProject.getCompileSourceRoots(), basedir, projectBaseDir, false, null );
-
-        extractResourceDirs( directories, project.getBuild().getResources(), 
project, basedir, projectBaseDir, false,
-                             null );
-
-        extractSourceDirs( directories, 
executedProject.getTestCompileSourceRoots(), basedir, projectBaseDir, true,
-                           EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, project.getBuild()
-                               .getTestOutputDirectory(), false ) );
-
-        extractResourceDirs( directories, 
project.getBuild().getTestResources(), project, basedir, projectBaseDir,
-                             true, EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, project.getBuild()
-                                 .getTestOutputDirectory(), false ) );
-
-        return (EclipseSourceDir[]) directories.toArray( new 
EclipseSourceDir[directories.size()] );
-    }
-
-    private void extractSourceDirs( Set directories, List sourceRoots, File 
basedir, File projectBaseDir, boolean test,
-                                   String output )
-    {
-        for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
-        {
-            String sourceRoot = (String) it.next();
-
-            if ( new File( sourceRoot ).isDirectory() )
-            {
-                sourceRoot = EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, sourceRoot, !projectBaseDir
-                    .equals( basedir ) );
-
-                directories.add( new EclipseSourceDir( sourceRoot, output, 
test, null, null ) );
-            }
-        }
-    }
-
-    private void extractResourceDirs( Set directories, List resources, 
MavenProject project, File basedir,
-                                     File projectBaseDir, boolean test, String 
output )
-    {
-        for ( Iterator it = resources.iterator(); it.hasNext(); )
-        {
-
-            Resource resource = (Resource) it.next();
-            String includePattern = null;
-            String excludePattern = null;
-
-            if ( resource.getIncludes().size() != 0 )
-            {
-                // @todo includePattern = ?
-                getLog().warn( Messages.getString( 
"EclipsePlugin.includenotsupported" ) ); //$NON-NLS-1$
-            }
-
-            if ( resource.getExcludes().size() != 0 )
-            {
-                // @todo excludePattern = ?
-                getLog().warn( Messages.getString( 
"EclipsePlugin.excludenotsupported" ) ); //$NON-NLS-1$
-            }
-
-            //          Example of setting include/exclude patterns for future 
reference.
-            //
-            //          TODO: figure out how to merge if the same dir is 
specified twice
-            //          with different in/exclude patterns. We can't write 
them now,
-            //                      since only the the first one would be 
included.
-            //
-            //          if ( resource.getIncludes().size() != 0 )
-            //          {
-            //              writer.addAttribute(
-            //                      "including", StringUtils.join( 
resource.getIncludes().iterator(), "|" )
-            //                      );
-            //          }
-            //
-            //          if ( resource.getExcludes().size() != 0 )
-            //          {
-            //              writer.addAttribute(
-            //                      "excluding", StringUtils.join( 
resource.getExcludes().iterator(), "|" )
-            //              );
-            //          }
-
-            if ( !StringUtils.isEmpty( resource.getTargetPath() ) )
-            {
-                output = resource.getTargetPath();
-            }
-
-            File resourceDirectory = new File( resource.getDirectory() );
-
-            if ( !resourceDirectory.exists() || 
!resourceDirectory.isDirectory() )
-            {
-                continue;
-            }
-
-            String resourceDir = resource.getDirectory();
-            resourceDir = EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, resourceDir, !projectBaseDir
-                .equals( basedir ) );
-
-            if ( output != null )
-            {
-                output = EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, output, false );
-            }
-
-            directories.add( new EclipseSourceDir( resourceDir, output, test, 
includePattern, excludePattern ) );
-        }
-    }
-
-    /**
-     * Returns the list of referenced artifacts produced by reactor projects.
-     * @return List of Artifacts
-     */
-    private List resolveReactorArtifacts()
-    {
-        List referencedProjects = new ArrayList();
-
-        Set artifacts = project.getArtifacts();
-
-        for ( Iterator it = artifacts.iterator(); it.hasNext(); )
-        {
-            Artifact artifact = (Artifact) it.next();
-
-            MavenProject refProject = findReactorProject( reactorProjects, 
artifact );
-
-            if ( refProject != null )
-            {
-                referencedProjects.add( artifact );
-            }
-        }
-
-        return referencedProjects;
-    }
-
-    /**
-     * Utility method that locates a project producing the given artifact.
-     *
-     * @param reactorProjects a list of projects to search.
-     * @param artifact the artifact a project should produce.
-     * @return null or the first project found producing the artifact.
-     */
-    private static MavenProject findReactorProject( List reactorProjects, 
Artifact artifact )
-    {
-        if ( reactorProjects == null )
-        {
-            return null; // we're a single project
-        }
-
-        for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
-        {
-            MavenProject project = (MavenProject) it.next();
-
-            if ( project.getGroupId().equals( artifact.getGroupId() )
-                && project.getArtifactId().equals( artifact.getArtifactId() )
-                && project.getVersion().equals( artifact.getVersion() ) )
-            {
-                return project;
-            }
-        }
-
-        return null;
-    }
-
 }

Modified: 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java
 (original)
+++ 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java
 Thu Sep 15 03:14:32 2005
@@ -41,7 +41,7 @@
         this.log = log;
     }
 
-    protected void write( File projectBaseDir, File outputDir, MavenProject 
project, MavenProject executedProject )
+    protected void write( File projectBaseDir, File outputDir, MavenProject 
project )
         throws EclipsePluginException
     {
 

Modified: 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java
 (original)
+++ 
maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java
 Thu Sep 15 03:14:32 2005
@@ -17,9 +17,16 @@
  */
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Resource;
+import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -87,4 +94,173 @@
 
         return defaultValue;
     }
+    
+    
+
+    public static EclipseSourceDir[] buildDirectoryList( MavenProject project, 
File basedir, Log log )
+    {
+        File projectBaseDir = project.getFile().getParentFile();
+
+        // avoid duplicated entries
+        Set directories = new TreeSet();
+
+        EclipseUtils.extractSourceDirs( directories, 
project.getCompileSourceRoots(), basedir, projectBaseDir, false, null );
+
+        EclipseUtils.extractResourceDirs( directories, 
project.getBuild().getResources(), project, basedir, projectBaseDir, false,
+                             null, log );
+
+        EclipseUtils.extractSourceDirs( directories, 
project.getTestCompileSourceRoots(), basedir, projectBaseDir, true,
+                           EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, project.getBuild()
+                               .getTestOutputDirectory(), false ) );
+
+        EclipseUtils.extractResourceDirs( directories, 
project.getBuild().getTestResources(), project, basedir, projectBaseDir,
+                             true, EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, project.getBuild()
+                                 .getTestOutputDirectory(), false ), log );
+
+        return (EclipseSourceDir[]) directories.toArray( new 
EclipseSourceDir[directories.size()] );
+    }
+
+
+
+    private static void extractSourceDirs( Set directories, List sourceRoots, 
File basedir, File projectBaseDir, boolean test,
+                                   String output )
+    {
+        for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
+        {
+            String sourceRoot = (String) it.next();
+
+            if ( new File( sourceRoot ).isDirectory() )
+            {
+                sourceRoot = EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, sourceRoot, !projectBaseDir
+                    .equals( basedir ) );
+
+                directories.add( new EclipseSourceDir( sourceRoot, output, 
test, null, null ) );
+            }
+        }
+    }
+
+    private static void extractResourceDirs( Set directories, List resources, 
MavenProject project, File basedir,
+                                     File projectBaseDir, boolean test, String 
output, Log log )
+    {
+        for ( Iterator it = resources.iterator(); it.hasNext(); )
+        {
+
+            Resource resource = (Resource) it.next();
+            String includePattern = null;
+            String excludePattern = null;
+
+            if ( resource.getIncludes().size() != 0 )
+            {
+                // @todo includePattern = ?
+                log.warn( Messages.getString( 
"EclipsePlugin.includenotsupported" ) ); //$NON-NLS-1$
+            }
+
+            if ( resource.getExcludes().size() != 0 )
+            {
+                // @todo excludePattern = ?
+                log.warn( Messages.getString( 
"EclipsePlugin.excludenotsupported" ) ); //$NON-NLS-1$
+            }
+
+            //          Example of setting include/exclude patterns for future 
reference.
+            //
+            //          TODO: figure out how to merge if the same dir is 
specified twice
+            //          with different in/exclude patterns. We can't write 
them now,
+            //                      since only the the first one would be 
included.
+            //
+            //          if ( resource.getIncludes().size() != 0 )
+            //          {
+            //              writer.addAttribute(
+            //                      "including", StringUtils.join( 
resource.getIncludes().iterator(), "|" )
+            //                      );
+            //          }
+            //
+            //          if ( resource.getExcludes().size() != 0 )
+            //          {
+            //              writer.addAttribute(
+            //                      "excluding", StringUtils.join( 
resource.getExcludes().iterator(), "|" )
+            //              );
+            //          }
+
+            if ( !StringUtils.isEmpty( resource.getTargetPath() ) )
+            {
+                output = resource.getTargetPath();
+            }
+
+            File resourceDirectory = new File( resource.getDirectory() );
+
+            if ( !resourceDirectory.exists() || 
!resourceDirectory.isDirectory() )
+            {
+                continue;
+            }
+
+            String resourceDir = resource.getDirectory();
+            resourceDir = EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, resourceDir, !projectBaseDir
+                .equals( basedir ) );
+
+            if ( output != null )
+            {
+                output = EclipseUtils.toRelativeAndFixSeparator( 
projectBaseDir, output, false );
+            }
+
+            directories.add( new EclipseSourceDir( resourceDir, output, test, 
includePattern, excludePattern ) );
+        }
+    }
+
+    
+    /**
+     * Utility method that locates a project producing the given artifact.
+     *
+     * @param reactorProjects a list of projects to search.
+     * @param artifact the artifact a project should produce.
+     * @return null or the first project found producing the artifact.
+     */
+    public static MavenProject findReactorProject( List reactorProjects, 
Artifact artifact )
+    {
+        if ( reactorProjects == null )
+        {
+            return null; // we're a single project
+        }
+
+        for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
+        {
+            MavenProject project = (MavenProject) it.next();
+
+            if ( project.getGroupId().equals( artifact.getGroupId() )
+                && project.getArtifactId().equals( artifact.getArtifactId() )
+                && project.getVersion().equals( artifact.getVersion() ) )
+            {
+                return project;
+            }
+        }
+
+        return null;
+    }
+    
+
+    
+    /**
+     * Returns the list of referenced artifacts produced by reactor projects.
+     * @return List of Artifacts
+     */
+    public static List resolveReactorArtifacts( MavenProject project, List 
reactorProjects )
+    {
+        List referencedProjects = new ArrayList();
+
+        Set artifacts = project.getArtifacts();
+
+        for ( Iterator it = artifacts.iterator(); it.hasNext(); )
+        {
+            Artifact artifact = (Artifact) it.next();
+
+            MavenProject refProject = EclipseUtils.findReactorProject( 
reactorProjects, artifact );
+
+            if ( refProject != null )
+            {
+                referencedProjects.add( artifact );
+            }
+        }
+
+        return referencedProjects;
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to