You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by mi...@apache.org on 2004/05/08 14:19:23 UTC

cvs commit: maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector DefaultArtifactCollectorTest.java

michal      2004/05/08 05:19:23

  Modified:    maven-project/src/main/resources/META-INF/plexus
                        components.xml
               maven-project/src/main/java/org/apache/maven/artifact
                        MavenArtifact.java AbstractMavenArtifact.java
               maven-project/src/test/java/org/apache/maven/project
                        RecursiveProjectInheritanceTest.java
                        ProjectReactorTest.java
                        AbstractProjectTestCase.java
                        DefaultProjectBuilderTest.java
                        ProjectBaseDirectoryAlignmentTest.java
               maven-project/src/main/java/org/apache/maven/project
                        MavenProject.java DefaultMavenProjectBuilder.java
               maven-project/src/main/java/org/apache/maven/artifact/satisfier
                        DefaultArtifactSatisfier.java
               maven-project/src/main/java/org/apache/maven/artifact/collector
                        DefaultArtifactCollector.java
                        ArtifactCollector.java
                        ArtifactCollectionResult.java
               maven-project/src/main/java/org/apache/maven/artifact/factory
                        DefaultMavenArtifactFactory.java
  Added:       maven-project/src/test/resources/maven-repo-local/maven-test/poms
                        maven-test-c-1.0.pom maven-test-a-1.0.pom
                        maven-test-b-1.0.pom maven-test-d-1.2.pom
                        maven-test-d-1.1.pom
               maven-project/src/test/resources/maven-repo-local/maven-test/jars
                        maven-test-c-1.0.jar maven-test-a-1.0.jar
                        maven-test-b-1.0.jar maven-test-d-1.0.jar
               maven-project/src/main/java/org/apache/maven/artifact/resolver
                        DefaultArtifactResolver.java ArtifactResolver.java
               maven-project/src/test/java/org/apache/maven/artifact/resolver
                        DefaultArtifactResolverTest.java
               maven-project/src/test/java/org/apache/maven/artifact/collector
                        DefaultArtifactCollectorTest.java
  Log:
  First usable version of ArtifactCollector (transitive dependencies).
  I left some comments in the code...
  
  Revision  Changes    Path
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-c-1.0.pom
  
  Index: maven-test-c-1.0.pom
  ===================================================================
  <project>
    <groupId>maven-test</groupId>
    <artifactId>maven-test-c</artifactId>
    <version>1.0</version>
    <dependencies>
      <dependency>
        <groupId>maven-test</groupId>
        <artifactId>maven-test-d</artifactId>
        <version>1.2</version>
      </dependency>
  
      <dependency>
        <groupId>maven-test</groupId>
        <artifactId>maven-test-z</artifactId>
        <version>1.0</version>
      </dependency>
      
      
    </dependencies>
  </project>
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-a-1.0.pom
  
  Index: maven-test-a-1.0.pom
  ===================================================================
  <project>
    <groupId>maven-test</groupId>
    <artifactId>maven-test-a</artifactId>
    <currentVersion>1.0</currentVersion>
    <dependencies>
      <dependency>
        <groupId>maven-test</groupId>
        <artifactId>maven-test-b</artifactId>
        <version>1.0</version>
      </dependency>
      
      <!-- pom for this dependency is missing -->
      <dependency>
        <groupId>maven-test</groupId>
        <artifactId>maven-test-z</artifactId>
        <version>1.0</version>
      </dependency>
    </dependencies>
  </project>
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-b-1.0.pom
  
  Index: maven-test-b-1.0.pom
  ===================================================================
  <project>
    <groupId>maven-test</groupId>
    <artifactId>maven-test-b</artifactId>
    <version>1.0</version>
    <dependencies>
      <dependency>
        <groupId>maven-test</groupId>
        <artifactId>maven-test-c</artifactId>
        <version>1.0</version>
      </dependency>
      <dependency>
        <groupId>maven-test</groupId>
        <artifactId>maven-test-d</artifactId>
        <version>1.1</version>
      </dependency>
    </dependencies>
  </project>
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-d-1.2.pom
  
  Index: maven-test-d-1.2.pom
  ===================================================================
  <project>
    <groupId>maven-test</groupId>
    <artifactId>maven-test-d/artifactId>
    <version>1.1</version>
  </project>
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-d-1.1.pom
  
  Index: maven-test-d-1.1.pom
  ===================================================================
  <project>
    <groupId>maven-test</groupId>
    <artifactId>maven-test-d</artifactId>
    <version>1.1</version>
  </project>
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-c-1.0.jar
  
  Index: maven-test-c-1.0.jar
  ===================================================================
  foo
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-a-1.0.jar
  
  Index: maven-test-a-1.0.jar
  ===================================================================
  foo
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-b-1.0.jar
  
  Index: maven-test-b-1.0.jar
  ===================================================================
  foo
  
  
  
  1.1                  maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-d-1.0.jar
  
  Index: maven-test-d-1.0.jar
  ===================================================================
  foo
  
  
  
  1.7       +20 -0     maven-components/maven-project/src/main/resources/META-INF/plexus/components.xml
  
  Index: components.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/resources/META-INF/plexus/components.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- components.xml	12 Apr 2004 14:41:30 -0000	1.6
  +++ components.xml	8 May 2004 12:19:22 -0000	1.7
  @@ -7,9 +7,12 @@
           <requirement>
             <role>org.apache.maven.project.ModelInheritanceAssembler</role>
           </requirement>
  +        
  +        <!-- This introduces circ. dep.  builder ==> collector ==> builder
           <requirement>
             <role>org.apache.maven.artifact.collector.ArtifactCollector</role>
           </requirement>
  +        -->
           <requirement>
             <role>org.apache.maven.artifact.factory.MavenArtifactFactory</role>
           </requirement>
  @@ -25,7 +28,24 @@
       <component>
         <role>org.apache.maven.artifact.collector.ArtifactCollector</role>
         <implementation>org.apache.maven.artifact.collector.DefaultArtifactCollector</implementation>
  +      <requirements>
  +        <requirement>
  +          <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
  +        </requirement>
  +        <requirement>
  +          <role>org.apache.maven.project.MavenProjectBuilder</role>
  +        </requirement>        
  +      </requirements>
       </component>
  +    <component>
  +      <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
  +      <implementation>org.apache.maven.artifact.resolver.DefaultArtifactResolver</implementation>
  +      <requirements>
  +        <requirement>
  +          <role>org.apache.maven.artifact.factory.MavenArtifactFactory</role>
  +        </requirement>
  +      </requirements>
  +    </component>    
       <component>
         <role>org.apache.maven.project.ModelInheritanceAssembler</role>
         <implementation>org.apache.maven.project.DefaultModelInheritanceAssembler</implementation>
  
  
  
  1.3       +2 -0      maven-components/maven-project/src/main/java/org/apache/maven/artifact/MavenArtifact.java
  
  Index: MavenArtifact.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/MavenArtifact.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MavenArtifact.java	22 Mar 2004 00:11:14 -0000	1.2
  +++ MavenArtifact.java	8 May 2004 12:19:22 -0000	1.3
  @@ -43,6 +43,8 @@
       boolean exists();
   
       File getFile();
  +    
  +    File getFile( String localRepository );
   
       String getExtension();
   }
  
  
  
  1.4       +15 -2     maven-components/maven-project/src/main/java/org/apache/maven/artifact/AbstractMavenArtifact.java
  
  Index: AbstractMavenArtifact.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/AbstractMavenArtifact.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractMavenArtifact.java	12 Apr 2004 14:41:30 -0000	1.3
  +++ AbstractMavenArtifact.java	8 May 2004 12:19:22 -0000	1.4
  @@ -19,8 +19,7 @@
   import org.apache.maven.model.Dependency;
   
   import java.io.File;
  -import java.io.IOException;
  -import java.io.FileInputStream;
  +
   
   public abstract class AbstractMavenArtifact
       implements MavenArtifact
  @@ -119,6 +118,10 @@
           return getDependency().getArtifact();
       }
   
  +    /**
  +     * @todo see comments added to getFile() method
  +     * @see org.apache.maven.artifact.MavenArtifact#exists()
  +     */
       public boolean exists()
       {
           return getFile().exists();
  @@ -129,11 +132,21 @@
           return getDependency().getArtifact().indexOf( "SNAPSHOT" ) > 0;
       }
   
  +    /**
  +     * @todo What for this method exits? getPath() returns realative path. 
  +     *       We need somehow append a path to local repository 
  +     * @see org.apache.maven.artifact.MavenArtifact#getFile()
  +     */
       public File getFile()
       {
           return new File( getPath() );
       }
   
  +    public File getFile( String localRepository )
  +    {
  +        return new File( localRepository, getPath() );
  +    }
  +    
       public String getExtension()
       {
           return dependency.getType();
  
  
  
  1.1                  maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
  
  Index: DefaultArtifactResolver.java
  ===================================================================
  package org.apache.maven.artifact.resolver;
  
  import org.apache.maven.artifact.MavenArtifact;
  import org.apache.maven.artifact.factory.MavenArtifactFactory;
  import org.apache.maven.model.Dependency;
  import org.apache.maven.project.MavenProject;
  
  /**
   * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a> 
   * @version $Id: DefaultArtifactResolver.java,v 1.1 2004/05/08 12:19:22 michal Exp $ 
   */
  public class DefaultArtifactResolver implements ArtifactResolver
  {
  
      /**
       * @requirement
       */
      MavenArtifactFactory artifactFactory;
      
      
      public MavenArtifact getArtifact( Dependency dependency, MavenProject project )
      {
         MavenArtifact retValue =  artifactFactory.createArtifact( dependency );
         
         String localRepository = project.getLocalRepository();
         
         if ( !retValue.getFile( localRepository ).exists() )
         {
             //here we can try to fetch artifact using wagon
             retValue = null;
         }
         
         return retValue;
          
      }
  
      public MavenArtifact getArtifact( Dependency dependency, String type, MavenProject project )
      {
          
          Dependency d = new Dependency();
          
          d.setGroupId( dependency.getGroupId( ) );
          
          d.setArtifactId( dependency.getArtifactId( ) );
          
          d.setVersion( dependency.getVersion() );
          
          d.setType( type );
          
          return getArtifact( d, project );
          
          
      }
      
  }
  
  
  
  1.1                  maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
  
  Index: ArtifactResolver.java
  ===================================================================
  package org.apache.maven.artifact.resolver;
  
  import org.apache.maven.artifact.MavenArtifact;
  import org.apache.maven.model.Dependency;
  import org.apache.maven.project.MavenProject;
  
  /**
   * 
   * I want to use it for hidding the fact that sometime artifact must
   * be downloaded. I am just asking LocalRepository for given artifact
   * and I don't care if it is alredy there or how it will get there.
   * 
   *  
   * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a> 
   * @version $Id: ArtifactResolver.java,v 1.1 2004/05/08 12:19:22 michal Exp $ 
   */
  public interface ArtifactResolver
  {
      String ROLE = ArtifactResolver.class.getName();
      
      MavenArtifact getArtifact( Dependency dependency, MavenProject project );
      
      MavenArtifact getArtifact( Dependency dependency, String type, MavenProject project );
  }
  
  
  
  1.3       +7 -0      maven-components/maven-project/src/test/java/org/apache/maven/project/RecursiveProjectInheritanceTest.java
  
  Index: RecursiveProjectInheritanceTest.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/RecursiveProjectInheritanceTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RecursiveProjectInheritanceTest.java	16 Apr 2004 18:05:06 -0000	1.2
  +++ RecursiveProjectInheritanceTest.java	8 May 2004 12:19:22 -0000	1.3
  @@ -7,6 +7,13 @@
   public class RecursiveProjectInheritanceTest
       extends AbstractProjectTestCase
   {
  +    
  +    
  +    public RecursiveProjectInheritanceTest( String testName )
  +    {
  +        super( testName );    
  +    }
  +
       // ------------------------------------------------------------------------
       // Recursive Property Inheritance
       // ------------------------------------------------------------------------
  
  
  
  1.3       +6 -0      maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectReactorTest.java
  
  Index: ProjectReactorTest.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectReactorTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProjectReactorTest.java	19 Apr 2004 13:04:40 -0000	1.2
  +++ ProjectReactorTest.java	8 May 2004 12:19:22 -0000	1.3
  @@ -9,6 +9,12 @@
   public class ProjectReactorTest
       extends AbstractProjectTestCase
   {
  +    
  +    public ProjectReactorTest( String testName )
  +    {
  +        super( testName );    
  +    }
  +
       public void testProjectReactor()
           throws Exception
       {
  
  
  
  1.3       +14 -0     maven-components/maven-project/src/test/java/org/apache/maven/project/AbstractProjectTestCase.java
  
  Index: AbstractProjectTestCase.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/AbstractProjectTestCase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractProjectTestCase.java	19 Apr 2004 13:04:40 -0000	1.2
  +++ AbstractProjectTestCase.java	8 May 2004 12:19:22 -0000	1.3
  @@ -7,6 +7,13 @@
   {
       protected MavenProjectBuilder projectBuilder;
   
  +    private String localRepository =  System.getProperty( "basedir" ) + "/src/test/resources/maven-repo-local";
  +    
  +    public AbstractProjectTestCase( String testName )
  +    {
  +       super( testName );    
  +    }
  +    
       public void setUp()
           throws Exception
       {
  @@ -16,4 +23,11 @@
   
           assertNotNull( "Test projectBuilder can't be null!", projectBuilder );
       }
  +    
  +    public String getLocalRepository()
  +    {
  +        return localRepository;    
  +    }
  +    
  +    
   }
  
  
  
  1.9       +7 -0      maven-components/maven-project/src/test/java/org/apache/maven/project/DefaultProjectBuilderTest.java
  
  Index: DefaultProjectBuilderTest.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/DefaultProjectBuilderTest.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DefaultProjectBuilderTest.java	19 Apr 2004 13:04:40 -0000	1.8
  +++ DefaultProjectBuilderTest.java	8 May 2004 12:19:22 -0000	1.9
  @@ -10,7 +10,14 @@
   
   public class DefaultProjectBuilderTest
       extends AbstractProjectTestCase
  +        
   {
  + 
  +    public DefaultProjectBuilderTest( String testName )
  +    {
  +        super( testName ); 
  +    }
  +
       private String dir = "src/test/resources/projects/";
   
       public void testDefaultsPropertiesExtraction()
  
  
  
  1.3       +9 -1      maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectBaseDirectoryAlignmentTest.java
  
  Index: ProjectBaseDirectoryAlignmentTest.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectBaseDirectoryAlignmentTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProjectBaseDirectoryAlignmentTest.java	16 Apr 2004 17:56:37 -0000	1.2
  +++ ProjectBaseDirectoryAlignmentTest.java	8 May 2004 12:19:22 -0000	1.3
  @@ -8,8 +8,16 @@
   public class ProjectBaseDirectoryAlignmentTest
       extends AbstractProjectTestCase
   {
  -    private String dir = "src/test/resources/projects/base-directory-alignment/";
  +    
  +    
   
  +    private String dir = "src/test/resources/projects/base-directory-alignment/";
  +    
  +    public ProjectBaseDirectoryAlignmentTest( String testName )
  +    {
  +        super( testName );    
  +    }
  +    
       public void testProjectDirectoryBaseDirectoryAlignment()
           throws Exception
       {
  
  
  
  1.5       +27 -2     maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
  
  Index: MavenProject.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MavenProject.java	17 Apr 2004 15:14:17 -0000	1.4
  +++ MavenProject.java	8 May 2004 12:19:22 -0000	1.5
  @@ -140,7 +140,7 @@
       }
   
       /**
  -     * Returnn base dir for this project
  +     * Returns base dir for this project
        */
       public File getBasedir()
       {
  @@ -685,6 +685,8 @@
        *
        * @param id
        * @return
  +     * 
  +     * @todo (michal)do we still need this?
        */
       public static String legacyToStandardId( String id )
       {
  @@ -860,6 +862,29 @@
           }
   
           return false;
  +    }
  +
  +    /**
  +     * @todo create something like MavenContants class and put "maven.repo.local"
  +     *  
  +     * @todo In fact I am not sure if this object should be used for accessing the information
  +     *  where maven local repository is. There should be only one local repository and it
  +     *  should be shared between all projects. Probably we can have a component like 
  +     *  MavenEnvinromnent which will contain all behavioral settings shared between projects.
  +     *  This component can read on the startup ${user.home}/build.properties file
  +     *     
  +     *  
  +     * there                 
  +     * @return
  +     */
  +    public String getLocalRepository()
  +    {
  +        return getProperty( "maven.repo.local" );
  +    }
  +    
  +    public void setLocalRepository( String path )
  +    {
  +         properties.put( "maven.repo.local", path );
       }
   }
   
  
  
  
  1.12      +0 -1      maven-components/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
  
  Index: DefaultMavenProjectBuilder.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DefaultMavenProjectBuilder.java	12 Apr 2004 14:41:30 -0000	1.11
  +++ DefaultMavenProjectBuilder.java	8 May 2004 12:19:22 -0000	1.12
  @@ -37,7 +37,6 @@
   import org.apache.maven.model.Parent;
   import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
   import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
  -import org.apache.maven.wagon.Wagon;
   import org.apache.maven.wagon.manager.WagonManager;
   
   import org.codehaus.plexus.logging.AbstractLogEnabled;
  
  
  
  1.2       +3 -0      maven-components/maven-project/src/main/java/org/apache/maven/artifact/satisfier/DefaultArtifactSatisfier.java
  
  Index: DefaultArtifactSatisfier.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/satisfier/DefaultArtifactSatisfier.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultArtifactSatisfier.java	5 Apr 2004 17:23:56 -0000	1.1
  +++ DefaultArtifactSatisfier.java	8 May 2004 12:19:23 -0000	1.2
  @@ -144,8 +144,11 @@
           for ( Iterator i = failedDependencies.iterator(); i.hasNext(); )
           {
               MavenArtifact artifact = (MavenArtifact) i.next();
  +            
               message.append( artifact.getName() );
  +            
               String url = artifact.getDependency().getUrl();
  +            
               if ( StringUtils.isNotEmpty( url ) )
               {
                   // FIXME: internationalize
  
  
  
  1.1                  maven-components/maven-project/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java
  
  Index: DefaultArtifactResolverTest.java
  ===================================================================
  package org.apache.maven.artifact.resolver;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed 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.
   */
  
  import java.io.File;
  
  import org.apache.maven.artifact.MavenArtifact;
  import org.apache.maven.model.Dependency;
  import org.apache.maven.project.AbstractProjectTestCase;
  import org.apache.maven.project.MavenProject;
  
  /**
   * 
   * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a> 
   * @version $Id: DefaultArtifactResolverTest.java,v 1.1 2004/05/08 12:19:23 michal Exp $
   */
  public class DefaultArtifactResolverTest
      extends AbstractProjectTestCase
  {
      
     
      public DefaultArtifactResolverTest( String testName )
      {
          super( testName );
      }
      
      
     
  
      private ArtifactResolver artifactResolver;
      
      public void setUp() throws Exception
      {
          super.setUp();
          
          artifactResolver = ( ArtifactResolver ) lookup( ArtifactResolver.ROLE );
          
          assertNotNull( "Test artifactResolver can't be null!", artifactResolver );
          
      }
  
    
      
      public void testArtifactResolving( )       
      {
                  
          File f = new File( getLocalRepository(),  "/maven-test/poms/maven-test-a-1.0.pom" );
  
          assertTrue( "Test file: '" + f.getAbsolutePath() + "' doesn't exist!", f.exists() );
  
          try
          {
              MavenProject project = projectBuilder.build( f );
                                                
              assertNotNull( "Project is null", project );
              
              project.setLocalRepository( getLocalRepository() );
              
              Dependency dependency = new Dependency();
              
              dependency.setGroupId( "maven-test" );
              
              dependency.setArtifactId( "maven-test-a" );
              
              dependency.setVersion( "1.0" );
              
              dependency.setType( "jar" );
              
              MavenArtifact a_1 = artifactResolver.getArtifact( dependency, project );
              
              assertNotNull( "Artifact " + dependency.toString() + "  should exists" , a_1 );
              
              dependency.setType( "foo" );
              
              MavenArtifact a_2 = artifactResolver.getArtifact( dependency, project );
              
              assertNull( a_2 );
  
              
          }
          catch ( Exception e )
          {
               e.printStackTrace();
               
               fail( e.getMessage() );
          }
      }
  }
  
  
  
  1.2       +150 -86   maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/DefaultArtifactCollector.java
  
  Index: DefaultArtifactCollector.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/DefaultArtifactCollector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultArtifactCollector.java	4 Apr 2004 17:20:14 -0000	1.1
  +++ DefaultArtifactCollector.java	8 May 2004 12:19:23 -0000	1.2
  @@ -1,130 +1,194 @@
   package org.apache.maven.artifact.collector;
   
  -import org.apache.maven.artifact.MavenArtifact;
  -import org.apache.maven.artifact.WagonArtifactAdapter;
  -import org.apache.maven.artifact.factory.MavenArtifactFactory;
  -import org.apache.maven.project.MavenProject;
  -import org.apache.maven.project.MavenProjectBuilder;
  -import org.apache.maven.wagon.manager.WagonManager;
  -import org.codehaus.plexus.logging.AbstractLogEnabled;
  -
   import java.util.ArrayList;
   import java.util.Iterator;
  +import java.util.LinkedList;
   import java.util.List;
   
  -public class DefaultArtifactCollector
  -    extends AbstractLogEnabled
  -    implements ArtifactCollector
  +import org.apache.maven.artifact.MavenArtifact;
  +import org.apache.maven.artifact.collector.ArtifactCollectionResult;
  +import org.apache.maven.artifact.collector.ArtifactCollector;
  +import org.apache.maven.artifact.resolver.ArtifactResolver;
  +import org.apache.maven.model.Dependency;
  +import org.apache.maven.project.MavenProject;
  +import org.apache.maven.project.MavenProjectBuilder;
  +import org.apache.maven.project.ProjectBuildingException;
  +
  +/**
  + * 
  + * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a> 
  + * @version $Id$
  + */
  +public class DefaultArtifactCollector implements ArtifactCollector
   {
  -    private MavenArtifactFactory artifactFactory;
   
  -    private MavenProjectBuilder builder;
  +    /**
  +     * @requirement     
  +     */
  +    private ArtifactResolver artifactResolver;
  +
  +    /**
  +     * 
  +     * @requirement
  +     */
  +    private MavenProjectBuilder projectBuilder;
  +
  +    /**
  +     * @see org.apache.maven.artifact.collector.ArtifactCollector#getArtifacts(org.apache.maven.project.MavenProject)
  +     */
  +    public ArtifactCollectionResult getArtifacts( MavenProject project )
  +            throws Exception
  +    {
   
  -    private WagonManager wagonManager;
  +        ArtifactCollectionResult retValue = new ArtifactCollectionResult();
   
  -    public ArtifactCollectionResult getArtifacts( MavenProject project ) throws Exception
  -    {
  -        ArtifactCollectionResult cr = new ArtifactCollectionResult();
  +        resolveDependencies( project, retValue );
   
  -        resolveDependencies( project, cr );
  +        return retValue;
   
  -        return cr;
       }
   
  -    void resolveDependencies( MavenProject project, ArtifactCollectionResult cr )
  -        throws Exception
  +    void resolveDependencies( MavenProject project,
  +            ArtifactCollectionResult result ) throws Exception
       {
  -        if ( project == null )
  -        {
  -            return;
  -        }
   
  -        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
  +        // I want to use BSF not DFS 
  +        //so the artifact of top level project are always processed in first place
  +        
  +      
  +        // linked list - we will have a lot add/remove operation
  +        List queue = new LinkedList();
  +
  +        queue.add( project );
  +
  +        System.out.println( "size: " + queue.size() );
  +        
  +        while ( !queue.isEmpty() )
           {
  -            MavenArtifact artifact = (MavenArtifact) i.next();
  -
  -            String key = artifact.getDependency().getId();
   
  -            if ( cr.getArtifacts().containsKey( key ) )
  +            MavenProject currentProject = ( MavenProject ) queue.remove( 0 );
  +                      
  +                       
  +            for ( Iterator i = currentProject.getArtifacts().iterator(); i.hasNext(); )
               {
  -                MavenArtifact a = (MavenArtifact) cr.getArtifacts().get( key );
  +                MavenArtifact newArtifact = ( MavenArtifact ) i.next();
   
  -                String newVersion = artifact.getDependency().getVersion();
  +                String id = newArtifact.getDependency().getId();
  +                              
  +                
  +                
  +                if ( result.getArtifacts().containsKey( id ) )
  +                {
  +                    MavenArtifact knownArtifact = ( MavenArtifact ) result
  +                            .getArtifacts().get( id );
   
  -                String knownVersion = a.getDependency().getVersion();
  +                    String newVersion = newArtifact.getDependency()
  +                            .getVersion();
   
  -                if ( newVersion.equals( knownVersion ) )
  -                {
  -                    continue;
  +                    String knownVersion = knownArtifact.getDependency()
  +                            .getVersion();
  +                    
  +                    if ( newVersion.equals( knownVersion ) )
  +                    {
  +                        continue;
  +                    }
  +                    else
  +                    {
  +                        // WE HAVE A VERSION CONFLICT!!
  +                        
  +                        // will check if this artifact is in the top level project
  +                        // if it is - version at the top level project wins
  +                        //if ( project.getDependency( key ) != null )
  +                        //{
  +                        //    continue;
  +                        //}
  +
  +                        List list;
  +
  +                        if ( result.getConflicts().containsKey( id ) )
  +                        {
  +                            list = ( List ) result.getConflicts().get( id );
  +                        }
  +                        else
  +                        {
  +                            list = new ArrayList();
  +                            
  +                            list.add( knownArtifact );
  +                            
  +                            result.getConflicts().put( id, list );
  +                        }
  +                        
  +                        
  +                        list.add( newArtifact );
  +                    }
                   }
                   else
                   {
  -                    // will check if this artifact is in the top level project
  -                    // if it is - version at the top level project wins
  -                    //if ( project.getDependency( key ) != null )
  -                    //{
  -                    //    continue;
  -                    //}
  +                    //It's the first time we have encountered this artifact
  +                    
  +                    // Add the dependency itself
  +                    result.getArtifacts().put( id, newArtifact );
   
  -                    List list;
  +                    MavenProject childProject = getProject( newArtifact.getDependency(),
  +                            currentProject );
   
  -                    if ( cr.getConflicts().containsKey( key ) )
  +                    
  +                    if ( childProject == null )
                       {
  -                        list = (List) cr.getConflicts().get( key );
  +                        // the pom for this artifact is not present in local repository.
  +                        // we will note this fact
  +                        result.getArtifactsWithoutPoms().put( id, newArtifact );
  +
  +                        continue;
                       }
                       else
                       {
  -                        list = new ArrayList();
  +                       //@hack for testing I need to propagate the location of mavenRepoLocal
  +                       //this shows that some settings should be detached from project.
  +                        
  +                       childProject.setLocalRepository(  currentProject.getLocalRepository()  ); 
  +                       
  +                        
  +                        
                       }
  +                    
   
  -                    list.add( newVersion );
  -                }
  -            }
  -            else
  -            {
  -
  -                // Add the dependency itself
  -                cr.getArtifacts().put( key, artifact );
  -            }
  -
  -            // Now find the artifacts for each of the artifacts.
  -            MavenProject p = findPom( artifact );
  +                    // the pom for given dependency exisit we will enqueue it
  +                    queue.add( childProject );
   
  -            if ( p == null )
  -            {
  -                cr.getArtifactsWithoutPoms().put( artifact.getDependency().getId(), artifact );
  +                }
   
  -                continue;
               }
  -
  -            resolveDependencies( findPom( artifact ), cr );
           }
  +
       }
   
  -    MavenProject findPom( MavenArtifact artifact ) throws Exception
  +    /**
  +     * @param pomArtifact
  +     * @return
  +     */
  +    private MavenProject getProject( Dependency dependency, MavenProject project )
  +            throws Exception
       {
  -        //!!! Need to create a POM artifact
  -        MavenArtifact pomArtifact = artifactFactory.createArtifact( artifact.getDependency() );
  -
  -        if ( !pomArtifact.exists() )
  -        {
  -            try
  -            {
  -                wagonManager.getWagon( "http" ).get( new WagonArtifactAdapter( pomArtifact ), null );
  -            }
  -            catch ( Exception e )
  -            {
  -                return null;
  -            }
  -        }
  -
  -        MavenProject project = null;
  -
  -        if ( pomArtifact.exists() )
  +        
  +        MavenProject retValue = null;
  +        
  +        MavenArtifact pomArtifact = artifactResolver.getArtifact( dependency, "pom", project );
  +        
  +        if ( pomArtifact != null )
           {
  -            project = builder.build( pomArtifact.getFile() );
  +	        try
  +	        {
  +	            retValue = projectBuilder.build( pomArtifact.getFile( project.getLocalRepository() ) );
  +	        }
  +	        catch ( ProjectBuildingException e )
  +	        {
  +	            throw new Exception( "POM for dependency: " + dependency
  +	                    + " exists in local repository but cannot be parsed", e );
  +	        }
           }
  +        
  +        return retValue;
   
  -        return project;
       }
  -}
  +}
  \ No newline at end of file
  
  
  
  1.2       +5 -1      maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollector.java
  
  Index: ArtifactCollector.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ArtifactCollector.java	4 Apr 2004 17:20:14 -0000	1.1
  +++ ArtifactCollector.java	8 May 2004 12:19:23 -0000	1.2
  @@ -1,9 +1,13 @@
   package org.apache.maven.artifact.collector;
   
  -import java.util.Map;
   
   import org.apache.maven.project.MavenProject;
   
  +/**
  + * @author <a href="mailto:jvanzyl@maven.org">Jason van Zyl</a>
  + * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a> 
  + * @version $Id$
  + */
   public interface ArtifactCollector
   {
       String ROLE = ArtifactCollector.class.getName();
  
  
  
  1.2       +9 -1      maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollectionResult.java
  
  Index: ArtifactCollectionResult.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollectionResult.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ArtifactCollectionResult.java	4 Apr 2004 17:20:14 -0000	1.1
  +++ ArtifactCollectionResult.java	8 May 2004 12:19:23 -0000	1.2
  @@ -9,12 +9,20 @@
    */
   public class ArtifactCollectionResult
   {
  +    /** Map<String,MavenArtifact>  */
       private Map artifacts;
   
  +    
  +    /** 
  +     * Map<String,List<String>> 
  +     * 
  +     */
       private Map conflicts;
   
  +    /** Map<String,MavenArtifact>  */
       private Map artifactsWithoutPoms;
   
  +    
       public ArtifactCollectionResult()
       {
           artifacts = new HashMap();
  
  
  
  1.2       +1 -1      maven-components/maven-project/src/main/java/org/apache/maven/artifact/factory/DefaultMavenArtifactFactory.java
  
  Index: DefaultMavenArtifactFactory.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/factory/DefaultMavenArtifactFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultMavenArtifactFactory.java	4 Apr 2004 17:20:14 -0000	1.1
  +++ DefaultMavenArtifactFactory.java	8 May 2004 12:19:23 -0000	1.2
  @@ -34,7 +34,7 @@
       {
           List projectArtifacts = new ArrayList();
   
  -        String mavenRepoLocal = project.getProperty( "maven.repo.local" );
  +        String mavenRepoLocal = project.getLocalRepository();
   
           boolean mavenJarOverride = project.getBooleanProperty( "maven.jar.override" );
   
  
  
  
  1.1                  maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector/DefaultArtifactCollectorTest.java
  
  Index: DefaultArtifactCollectorTest.java
  ===================================================================
  package org.apache.maven.artifact.collector;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed 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.
   */
  
  import java.io.File;
  import java.util.List;
  import java.util.Map;
  
  import org.apache.maven.artifact.MavenArtifact;
  import org.apache.maven.project.AbstractProjectTestCase;
  import org.apache.maven.project.MavenProject;
  
  /**
   * 
   * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a> 
   * @version $Id: DefaultArtifactCollectorTest.java,v 1.1 2004/05/08 12:19:23 michal Exp $
   */
  public class DefaultArtifactCollectorTest
      extends AbstractProjectTestCase
  {
      
   
      
  
      private ArtifactCollector artifactCollector;
      
      
      
      public DefaultArtifactCollectorTest( String testName )
      {
          super( testName );
      }
      
      
      public void setUp() throws Exception
      {
          super.setUp();
          
          artifactCollector = ( ArtifactCollector ) lookup( ArtifactCollector.ROLE );
          
          assertNotNull( "Test artifactCollector can't be null!", artifactCollector );
          
          System.out.println( "local repo:" + getLocalRepository() );
          
      }
  
    
      
      public void testArtifactCollecting( )       
      {
                  
          File f = new File( getLocalRepository(), "/maven-test/poms/maven-test-a-1.0.pom" );
  
          assertTrue( "Test file: '" + f.getAbsolutePath() + "' doesn't exist!", f.exists() );
  
          try
          {
              MavenProject project = projectBuilder.build( f );
                          
              assertNotNull( "Project is null", project );
              
              project.setLocalRepository( getLocalRepository() );
              
              ArtifactCollectionResult result = artifactCollector.getArtifacts( project );
              
              Map artifacts = result.getArtifacts();
              
              Map conflicts = result.getConflicts();
              
              Map artifactsWithoutPoms = result.getArtifactsWithoutPoms();
              
              //             [d 1.1]
              //              |
              //   [a]  -- > [b] --[c]   -- [d 1.2]
              //    |               |
              //    |---------------------- > [z] (no pom)
              
              assertTrue(  artifacts.containsKey( "maven-test:maven-test-b"  )  );
              
              assertTrue(  artifacts.containsKey( "maven-test:maven-test-c"  )  );
              
              assertTrue(  artifacts.containsKey( "maven-test:maven-test-d"  )  );
              
              assertTrue(  artifacts.containsKey( "maven-test:maven-test-z"  )  );
              
              assertTrue(  artifactsWithoutPoms.containsKey( "maven-test:maven-test-z"  )  );
               
              
              assertEquals( 1, conflicts.size() );
              
              assertTrue(  conflicts.containsKey( "maven-test:maven-test-d"  )  );
              
              List conflictsForD = ( List ) conflicts.get( "maven-test:maven-test-d" );
              
              assertEquals( 2,conflictsForD.size() );
              
              MavenArtifact d_1_1 = ( MavenArtifact ) conflictsForD.get( 0 );
              
              MavenArtifact d_1_2 = ( MavenArtifact ) conflictsForD.get( 1 );
              
              assertEquals( "1.1", d_1_1.getDependency().getVersion() );
              
              assertEquals( "1.2", d_1_2.getDependency().getVersion() );
          }
          catch ( Exception e )
          {
               e.printStackTrace();
               
               fail( e.getMessage() );
          }
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org