michal      2004/05/18 12:39:46

  Modified:    maven-project/src/main/java/org/apache/maven/artifact/collector
                        DefaultArtifactCollector.java
                        ArtifactCollectionResult.java
               maven-project/src/main/java/org/apache/maven/project
                        MavenProjectBuilder.java
                        DefaultMavenProjectBuilder.java
               maven-project/src/test/java/org/apache/maven/artifact/collector
                        DefaultArtifactCollectorTest.java
  Removed:     maven-project/src/main/java/org/apache/maven/artifact/collector
                        ArtifactCollectionResultEntry.java
  Log:
  Reverting to simpler version of ArtifactCollector
  
  Revision  Changes    Path
  1.5       +108 -44   
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultArtifactCollector.java     17 May 2004 21:11:33 -0000      1.4
  +++ DefaultArtifactCollector.java     18 May 2004 19:39:46 -0000      1.5
  @@ -1,23 +1,25 @@
   package org.apache.maven.artifact.collector;
   
  -import java.io.File;
  +import java.util.ArrayList;
   import java.util.Iterator;
  +import java.util.LinkedList;
  +import java.util.List;
   
   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;
  -import org.codehaus.plexus.logging.AbstractLogEnabled;
  -
   
   /**
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]">Michal Maczka</a> 
    * @version $Id$
    */
  -public class DefaultArtifactCollector extends AbstractLogEnabled implements 
ArtifactCollector 
  +public class DefaultArtifactCollector implements ArtifactCollector
   {
   
       /**
  @@ -25,41 +27,107 @@
        */
       private ArtifactResolver artifactResolver;
   
  +
       /**
        * @see 
org.apache.maven.artifact.collector.ArtifactCollector#getArtifacts(org.apache.maven.project.MavenProject)
        */
  -    public ArtifactCollectionResult collect( MavenProject project, 
MavenProjectBuilder projectBuilder ) throws Exception
  +    public ArtifactCollectionResult collect( MavenProject project, 
MavenProjectBuilder projectBuilder )
  +            throws Exception
       {
   
           ArtifactCollectionResult retValue = new ArtifactCollectionResult();
   
  -        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
  -        {
  -            MavenArtifact artifact = ( MavenArtifact ) i.next();
  -
  -            Dependency dependency = artifact.getDependency();
  -
  -            String id = dependency.getId();
  -
  -            retValue.addArtifact( artifact, project );
  +        List queue = new LinkedList();
   
  -            MavenProject referencedProject = getProject( dependency, project, 
projectBuilder );
  +        queue.add( project );
  +        
  +        while ( !queue.isEmpty() )
  +        {
   
  -            if ( referencedProject != null )
  +            MavenProject currentProject = ( MavenProject ) queue.remove( 0 );
  +                      
  +                       
  +            for ( Iterator i = currentProject.getArtifacts().iterator(); 
i.hasNext(); )
               {
  -                retValue.merge( referencedProject );
  -            }
  +                MavenArtifact newArtifact = ( MavenArtifact ) i.next();
   
  -            else
  -            {
  -                getLogger().debug( "POM for " + dependency.getId() + ":"  + 
dependency.getVersion() +  " not found" );
  -                
  -                retValue.addArtifactWithoutPom( artifact.getDependency().getId() );
  -            }
  +                String id = newArtifact.getDependency().getId();
  +                                                              
  +                if ( retValue.getArtifacts().containsKey( id ) )
  +                {
  +                    MavenArtifact knownArtifact = ( MavenArtifact ) 
retValue.getArtifacts().get( id );
  +
  +                    String newVersion = newArtifact.getDependency().getVersion();
  +
  +                    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 ( retValue.getConflicts().containsKey( id ) )
  +                        {
  +                            list = ( List ) retValue.getConflicts().get( id );
  +                        }
  +                        else
  +                        {
  +                            list = new ArrayList();
  +                            
  +                            list.add( knownArtifact );
  +                            
  +                            retValue.getConflicts().put( id, list );
  +                        }
  +                        
  +                        
  +                        list.add( newArtifact );
  +                    }
  +                }
  +                else
  +                {
  +                    //It's the first time we have encountered this artifact
  +                    
  +                    // Add the dependency itself
  +                    retValue.getArtifacts().put( id, newArtifact );
  +
  +                    MavenProject referencedProject = getProject( 
newArtifact.getDependency(), currentProject, projectBuilder );
  +
  +                    
  +                    if ( referencedProject == null )
  +                    {
  +                        // the pom for this artifact is not present in local 
repository.
  +                        // we will note this fact
  +                        retValue.getArtifactsWithoutPoms().put( id, newArtifact );
  +
  +                        continue;
  +                    }
  +                    else
  +                    {
  +                       //@hack for testing I need to propagate the location of 
mavenRepoLocal
  +                       //this shows that some settings should be detached from 
project.
  +                        
  +                       referencedProject.setLocalRepository(  
currentProject.getLocalRepository()  );
  +                       
  +                       // the pom for given dependency exisit we will add it to the 
queue
  +                       queue.add( referencedProject );
  +                        
  +                    }
   
  +                }
  +            }
           }
  -
  -        project.setArtifactCollectionResult( retValue );
           
           return retValue;
   
  @@ -69,31 +137,27 @@
        * @param pomArtifact
        * @return
        */
  -    private MavenProject getProject( Dependency dependency,
  -            MavenProject project, MavenProjectBuilder projectBuilder )
  +    private MavenProject getProject( Dependency dependency, MavenProject project, 
MavenProjectBuilder projectBuilder )
               throws Exception
       {
  -
  +        
           MavenProject retValue = null;
  -
  +        
           MavenArtifact pomArtifact = artifactResolver.getPomArtifact( dependency, 
project );
  -
  +        
           if ( pomArtifact != null )
           {
  -            try
  -            {
  -                
  -                File f = pomArtifact.getFile();
  -                
  -                retValue = projectBuilder.build( f );
  -            }
  -            catch ( ProjectBuildingException e )
  -            {
  -                throw new Exception( "POM for dependency: " + dependency.getId()
  -                        + " exists in local repository but cannot be parsed", e );
  -            }
  +             try
  +             {
  +                 retValue = projectBuilder.build( pomArtifact.getFile( ), true, 
false );
  +             }
  +             catch ( ProjectBuildingException e )
  +             {
  +                 throw new Exception( "POM for dependency: " + dependency
  +                         + " exists in local repository but cannot be parsed", e );
  +             }
           }
  -
  +        
           return retValue;
   
       }
  
  
  
  1.5       +16 -133   
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ArtifactCollectionResult.java     17 May 2004 21:11:33 -0000      1.4
  +++ ArtifactCollectionResult.java     18 May 2004 19:39:46 -0000      1.5
  @@ -1,13 +1,7 @@
   package org.apache.maven.artifact.collector;
   
  -import java.util.HashSet;
  -import java.util.Iterator;
   import java.util.Map;
   import java.util.HashMap;
  -import java.util.Set;
  -
  -import org.apache.maven.artifact.MavenArtifact;
  -import org.apache.maven.project.MavenProject;
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  @@ -15,152 +9,41 @@
    */
   public class ArtifactCollectionResult
   {
  -    //We will keep artifacts in two data structures:
  -
  -    /** Set<MavenArtifact>  */
  -    private Set artifacts;
  -
  -    /** Set<String>  */
  -    private Set artifactsWithoutPoms;
  +    /** Map<String,MavenArtifact>  */
  +    private Map artifacts;
   
  +    
       /** 
  -     * Map<String,ArtifactCollectionResultEntry> 
  +     * Map<String, List<MavenArtifact>> 
        * 
        */
  -    private Map entries;
  +    private Map conflicts;
   
  -    private boolean conflict;
  +    /** Map<String,MavenArtifact>  */
  +    private Map artifactsWithoutPoms;
   
  +    
       public ArtifactCollectionResult()
       {
  -        artifacts = new HashSet();
  +        artifacts = new HashMap();
   
  -        artifactsWithoutPoms = new HashSet();
  -        
  -        entries = new HashMap();
  -        
  -        
  +        conflicts = new HashMap();
   
  +        artifactsWithoutPoms = new HashMap();
       }
   
  -    public Set getArtifacts()
  +    public Map getArtifacts()
       {
           return artifacts;
       }
   
  -    public Map getEntries()
  +    public Map getConflicts()
       {
  -        return entries;
  +        return conflicts;
       }
   
  -    public void addArtifact( MavenArtifact artifact, MavenProject project )
  -    {
  -
  -        String id = artifact.getDependency().getId();
  -
  -        ArtifactCollectionResultEntry entry;
  -
  -        if ( entries.containsKey( id ) )
  -        {
  -            entry = ( ArtifactCollectionResultEntry ) entries.get( id );
  -
  -            entry.add( artifact, project );
  -
  -        }
  -
  -        else
  -        {
  -            artifacts.add( artifact );
  -
  -            entry = new ArtifactCollectionResultEntry( artifact, project );
  -            
  -            entries.put( id , entry );
  -        }
  -
  -        conflict = conflict && entry.isConflict();
  -
  -    }
  -
  -    public void addArtifactWithoutPom( String id )
  -    {
  -        artifactsWithoutPoms.add( id );
  -    }
  -
  -    public Set getArtifactsWithoutPoms()
  +    public Map getArtifactsWithoutPoms()
       {
           return artifactsWithoutPoms;
       }
  -
  -    public boolean isConflict()
  -    {
  -        return conflict;
  -    }
  -
  -    /**
  -     * @todo this is still not opimal but I prefer simpler code at the moment 
  -     */
  -    public void merge( MavenProject project )
  -    {
  -        ArtifactCollectionResult other = project.getArtifactCollectionResult();
  -        
  -        Set artifactSet = other.getArtifacts();
  -
  -        for ( Iterator iter = artifactSet.iterator(); iter.hasNext(); )
  -        {
  -            MavenArtifact artifact = ( MavenArtifact ) iter.next();
  -            
  -
  -            String id = artifact.getDependency().getId();
  -
  -            addArtifact( artifact, project );
  -            
  -            ArtifactCollectionResultEntry entry = ( ArtifactCollectionResultEntry ) 
entries.get( id );
  -            
  -            ArtifactCollectionResultEntry otherEntry = ( 
ArtifactCollectionResultEntry ) other.entries.get( id );
  -            
  -            entry.merge( otherEntry );
  -            
  -            
  -
  -        }
  -
  -        artifactsWithoutPoms.addAll( other.getArtifactsWithoutPoms() );
  -
  -    }
  -
  -    public boolean hasArtifact( String id )
  -    {
  -        boolean retValue = false;
  -
  -        for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
  -        {
  -            MavenArtifact artifact = ( MavenArtifact ) iter.next();
  -
  -            if ( id.equals( artifact.getDependency().getId() ) )
  -            {
  -                retValue = true;
  -
  -                break;
  -            }
  -
  -        }
  -
  -        return retValue;
  -    }
  -
  -    public boolean hasArtifactWithoutPom( String id )
  -    {
  -        boolean retValue = artifactsWithoutPoms.contains( id );
  -
  -        return retValue;
  -    }
  -
  -    public ArtifactCollectionResultEntry getEntry( String id )
  -    {
  -        ArtifactCollectionResultEntry retValue = ( ArtifactCollectionResultEntry ) 
entries.get( id );
  -
  -        return retValue;
  -
  -    }
  -
  -}
  \ No newline at end of file
  +}
  
  
  
  1.5       +1 -1      
maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
  
  Index: MavenProjectBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MavenProjectBuilder.java  4 Apr 2004 17:09:03 -0000       1.4
  +++ MavenProjectBuilder.java  18 May 2004 19:39:46 -0000      1.5
  @@ -32,7 +32,7 @@
       MavenProject build( File project )
           throws ProjectBuildingException;
   
  -    MavenProject build( File project, boolean useParent )
  +    MavenProject build( File project, boolean useParentPom, boolean 
followTransitiveDeps )
           throws ProjectBuildingException;
   
       // ----------------------------------------------------------------------
  
  
  
  1.14      +7 -3      
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DefaultMavenProjectBuilder.java   17 May 2004 21:11:34 -0000      1.13
  +++ DefaultMavenProjectBuilder.java   18 May 2004 19:39:46 -0000      1.14
  @@ -80,10 +80,10 @@
       public MavenProject build( File project )
           throws ProjectBuildingException
       {
  -        return build( project, true );
  +        return build( project, true, true );
       }
   
  -    public MavenProject build( File projectDescriptor, boolean useParentPom )
  +    public MavenProject build( File projectDescriptor, boolean useParentPom, 
boolean followTransitiveDeps )
           throws ProjectBuildingException
       {
           try
  @@ -105,7 +105,11 @@
   
               setupMavenFinalName( project );
   
  -            artifactCollector.collect( project, this );
  +            
  +            if ( followTransitiveDeps )
  +            {
  +                artifactCollector.collect( project, this );
  +            }
               
               project.initialize();
   
  
  
  
  1.4       +23 -22    
maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector/DefaultArtifactCollectorTest.java
  
  Index: DefaultArtifactCollectorTest.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector/DefaultArtifactCollectorTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultArtifactCollectorTest.java 17 May 2004 21:11:34 -0000      1.3
  +++ DefaultArtifactCollectorTest.java 18 May 2004 19:39:46 -0000      1.4
  @@ -17,8 +17,10 @@
    */
   
   import java.io.File;
  -import java.util.Set;
  +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;
   import org.apache.maven.project.MavenProjectBuilder;
  @@ -35,6 +37,7 @@
   
       private ArtifactCollector artifactCollector;
       
  +    private MavenProjectBuilder projectBuilder;
       
       
       public DefaultArtifactCollectorTest( String testName )
  @@ -49,13 +52,10 @@
           
           artifactCollector = ( ArtifactCollector ) lookup( ArtifactCollector.ROLE );
           
  -        projectBuilder = ( MavenProjectBuilder ) lookup( MavenProjectBuilder.ROLE );
  -        
           assertNotNull( "Test artifactCollector can't be null!", artifactCollector );
           
  -        System.setProperty( "maven.repo.local", getLocalRepository()  );
  +        projectBuilder = ( MavenProjectBuilder ) lookup( MavenProjectBuilder.ROLE );
           
  -        System.out.println( "local repo:" + getLocalRepository() );
           
       }
   
  @@ -77,10 +77,12 @@
               project.setLocalRepository( getLocalRepository() );
               
               ArtifactCollectionResult result = artifactCollector.collect( project, 
projectBuilder );
  -                                   
  -            Set artifacts = result.getArtifacts();
               
  -            Set artifactsWithoutPoms = result.getArtifactsWithoutPoms();
  +            Map artifacts = result.getArtifacts();
  +            
  +            Map conflicts = result.getConflicts();
  +            
  +            Map artifactsWithoutPoms = result.getArtifactsWithoutPoms();
               
               //             [d 1.1]
               //              |
  @@ -88,33 +90,32 @@
               //    |               |
               //    |---------------------- > [z] (no pom)
               
  -            assertEquals( 4, artifacts.size() );
  +            assertTrue(  artifacts.containsKey( "maven-test:maven-test-b"  )  );
               
  -            assertTrue(  result.hasArtifact( "maven-test:maven-test-b"  )  );
  +            assertTrue(  artifacts.containsKey( "maven-test:maven-test-c"  )  );
               
  -            assertTrue(  result.hasArtifact( "maven-test:maven-test-c"  )  );
  +            assertTrue(  artifacts.containsKey( "maven-test:maven-test-d"  )  );
               
  -            assertTrue(  result.hasArtifact( "maven-test:maven-test-d"  )  );
  +            assertTrue(  artifacts.containsKey( "maven-test:maven-test-z"  )  );
               
  -            assertTrue(  result.hasArtifact( "maven-test:maven-test-z"  )  );
  +            assertTrue(  artifactsWithoutPoms.containsKey( 
"maven-test:maven-test-z"  )  );
                
  -            //assertTrue( result.isConflict() );
  -            
  -            //assertEquals( 1, conflicts.size() );
               
  -            ArtifactCollectionResultEntry entryD = result.getEntry( 
"maven-test:maven-test-d" );
  +            assertEquals( 1, conflicts.size() );
               
  -            assertNotNull( entryD );
  +            assertTrue(  conflicts.containsKey( "maven-test:maven-test-d"  )  );
               
  -            assertEquals( 2, entryD.getVersions().size() );
  +            List conflictsForD = ( List ) conflicts.get( "maven-test:maven-test-d" 
);
               
  -            assertTrue( entryD.isConflict() );
  +            assertEquals( 2,conflictsForD.size() );
               
  -            assertTrue(  entryD.getVersions().contains( "1.2" ) );
  +            MavenArtifact d_1_1 = ( MavenArtifact ) conflictsForD.get( 0 );
               
  -            assertTrue(  entryD.getVersions().contains( "1.1" ) );
  +            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 )
           {
  
  
  

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

Reply via email to