Author: jvanzyl
Date: Sat Mar 10 17:03:06 2007
New Revision: 516822

URL: http://svn.apache.org/viewvc?view=rev&rev=516822
Log:
MNG-1577 dependencyManagement element is king! woo hoo! Thanks to Patrick, Mike 
and Ralph for helping with all the hard work.


Modified:
    
maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
    
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
    
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java
    
maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
    
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
    
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
    
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java

Modified: 
maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
 Sat Mar 10 17:03:06 2007
@@ -30,7 +30,7 @@
  * @version $Id$
  */
 public class DebugResolutionListener
-    implements ResolutionListener
+    implements ResolutionListener, ResolutionListenerForDepMgmt
 {
     private Logger logger;
 
@@ -93,6 +93,12 @@
             replacement.getVersionRange() + " to: " + newRange + " )" );
     }
 
+    /**
+     * The logic used here used to be a copy of the logic used in the 
DefaultArtifactCollector, and this method was
+     * called right before the actual version/scope changes were done. 
However, a different set of conditionals (and
+     * more information) is needed to be able to determine when and if the 
version and/or scope changes. See the two
+     * added methods, manageArtifactVersion and manageArtifactScope.
+     */
     public void manageArtifact( Artifact artifact, Artifact replacement )
     {
         String msg = indent + artifact;
@@ -108,4 +114,25 @@
         msg += ")";
         logger.debug( msg );
     }
-}
+
+    public void manageArtifactVersion( Artifact artifact, Artifact replacement 
)
+    {
+        // only show msg if a change is actually taking place
+        if ( !replacement.getVersion().equals( artifact.getVersion() ) )
+        {
+            String msg = indent + artifact + " (applying version: " + 
replacement.getVersion() + ")";
+            logger.debug( msg );
+        }
+    }
+
+    public void manageArtifactScope( Artifact artifact, Artifact replacement )
+    {
+        // only show msg if a change is actually taking place
+        if ( !replacement.getScope().equals( artifact.getScope() ) )
+        {
+            String msg = indent + artifact + " (applying scope: " + 
replacement.getScope() + ")";
+            logger.debug( msg );
+        }
+    }
+
+}
\ No newline at end of file

Modified: 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 Sat Mar 10 17:03:06 2007
@@ -25,9 +25,11 @@
 import org.apache.maven.artifact.metadata.ResolutionGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.artifact.versioning.ManagedVersionMap;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -67,7 +69,10 @@
 
         root.addDependencies( artifacts, remoteRepositories, filter );
 
-        recurse( root, resolvedArtifacts, managedVersions, localRepository, 
remoteRepositories, source, filter,
+        ManagedVersionMap versionMap = (managedVersions != null && 
managedVersions instanceof ManagedVersionMap) ?
+            (ManagedVersionMap)managedVersions : new 
ManagedVersionMap(managedVersions);
+
+        recurse( root, resolvedArtifacts, versionMap, localRepository, 
remoteRepositories, source, filter,
                  listeners );
 
         Set set = new HashSet();
@@ -102,29 +107,20 @@
         return result;
     }
 
-    private void recurse( ResolutionNode node, Map resolvedArtifacts, Map 
managedVersions,
+    private void recurse( ResolutionNode node, Map resolvedArtifacts, 
ManagedVersionMap managedVersions,
                           ArtifactRepository localRepository, List 
remoteRepositories, ArtifactMetadataSource source,
                           ArtifactFilter filter, List listeners )
         throws CyclicDependencyException, ArtifactResolutionException, 
OverConstrainedVersionException
     {
         fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node );
 
-        // TODO: use as a conflict resolver
         Object key = node.getKey();
-        if ( managedVersions.containsKey( key ) )
+        
+        // TODO: Does this check need to happen here?  Had to add the same call
+        // below when we iterate on child nodes -- will that suffice?
+        if ( managedVersions.containsKey( key ))
         {
-            Artifact artifact = (Artifact) managedVersions.get( key );
-
-            fireEvent( ResolutionListener.MANAGE_ARTIFACT, listeners, node, 
artifact );
-
-            if ( artifact.getVersion() != null )
-            {
-                node.getArtifact().setVersion( artifact.getVersion() );
-            }
-            if ( artifact.getScope() != null )
-            {
-                node.getArtifact().setScope( artifact.getScope() );
-            }
+            manageArtifact( node, managedVersions, listeners );
         }
 
         List previousNodes = (List) resolvedArtifacts.get( key );
@@ -274,6 +270,38 @@
                             fireEvent( 
ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, child );
                         }
 
+                        Object childKey = child.getKey();
+                        if ( managedVersions.containsKey( childKey ) )
+                        {
+                            // If this child node is a managed dependency, 
ensure
+                            // we are using the dependency management version
+                            // of this child if applicable b/c we want to use 
the
+                            // managed version's POM, *not* any other 
version's POM.
+                            // We retrieve the POM below in the retrieval step.
+                            manageArtifact( child, managedVersions, listeners 
);
+                            
+                            // Also, we need to ensure that any exclusions it 
presents are
+                            // added to the artifact before we retrive the 
metadata
+                            // for the artifact; otherwise we may end up with 
unwanted
+                            // dependencies.
+                            Artifact ma = (Artifact) managedVersions.get( 
childKey );
+                            ArtifactFilter managedExclusionFilter = 
ma.getDependencyFilter();
+                            if ( null != managedExclusionFilter )
+                            {
+                                if ( null != artifact.getDependencyFilter() )
+                                {
+                                    AndArtifactFilter aaf = new 
AndArtifactFilter();
+                                    aaf.add( artifact.getDependencyFilter() );
+                                    aaf.add( managedExclusionFilter );
+                                    artifact.setDependencyFilter( aaf );
+                                }
+                                else
+                                {
+                                    artifact.setDependencyFilter( 
managedExclusionFilter );
+                                }
+                            }
+                        }
+
                         artifact.setDependencyTrail( node.getDependencyTrail() 
);
                         ResolutionGroup rGroup = source.retrieve( artifact, 
localRepository, remoteRepositories );
 
@@ -286,6 +314,7 @@
                         }
 
                         child.addDependencies( rGroup.getArtifacts(), 
rGroup.getResolutionRepositories(), filter );
+
                     }
                     catch ( CyclicDependencyException e )
                     {
@@ -311,6 +340,32 @@
         }
     }
 
+    private void manageArtifact( ResolutionNode node, ManagedVersionMap 
managedVersions, List listeners )
+    {
+        Artifact artifact = (Artifact) managedVersions.get( node.getKey() );
+
+        // Before we update the version of the artifact, we need to know
+        // whether we are working on a transitive dependency or not.  This
+        // allows depMgmt to always override transitive dependencies, while
+        // explicit child override depMgmt (viz. depMgmt should only
+        // provide defaults to children, but should override transitives).
+        // We can do this by calling isChildOfRootNode on the current node.
+
+        if ( artifact.getVersion() != null
+                        && ( node.isChildOfRootNode() ? 
node.getArtifact().getVersion() == null : true ) )
+        {
+            fireEvent( ResolutionListener.MANAGE_ARTIFACT_VERSION, listeners, 
node, artifact );
+            node.getArtifact().setVersion( artifact.getVersion() );
+        }
+
+        if ( artifact.getScope() != null
+                        && ( node.isChildOfRootNode() ? 
node.getArtifact().getScope() == null : true ) )
+        {
+            fireEvent( ResolutionListener.MANAGE_ARTIFACT_SCOPE, listeners, 
node, artifact );
+            node.getArtifact().setScope( artifact.getScope() );
+        }
+    }
+
     /**
      * Check if the scope needs to be updated.
      * <a 
href="http://docs.codehaus.org/x/IGU#DependencyMediationandConflictResolution-Scoperesolution";>More
 info</a>.
@@ -407,8 +462,21 @@
                 case ResolutionListener.UPDATE_SCOPE_CURRENT_POM:
                     listener.updateScopeCurrentPom( node.getArtifact(), 
replacement.getScope() );
                     break;
-                case ResolutionListener.MANAGE_ARTIFACT:
-                    listener.manageArtifact( node.getArtifact(), replacement );
+                case ResolutionListener.MANAGE_ARTIFACT_VERSION:
+                    if (listener instanceof ResolutionListenerForDepMgmt) {
+                        ResolutionListenerForDepMgmt asImpl = 
(ResolutionListenerForDepMgmt) listener;
+                        asImpl.manageArtifactVersion( node.getArtifact(), 
replacement );
+                    } else {
+                        listener.manageArtifact( node.getArtifact(), 
replacement );
+                    }
+                    break;
+                case ResolutionListener.MANAGE_ARTIFACT_SCOPE:
+                    if (listener instanceof ResolutionListenerForDepMgmt) {
+                        ResolutionListenerForDepMgmt asImpl = 
(ResolutionListenerForDepMgmt) listener;
+                        asImpl.manageArtifactScope( node.getArtifact(), 
replacement );
+                    } else {
+                        listener.manageArtifact( node.getArtifact(), 
replacement );
+                    }
                     break;
                 case ResolutionListener.SELECT_VERSION_FROM_RANGE:
                     listener.selectVersionFromRange( node.getArtifact() );

Modified: 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java
 Sat Mar 10 17:03:06 2007
@@ -44,6 +44,9 @@
 
     int UPDATE_SCOPE = 6;
 
+    /**
+     * @deprecated
+     */
     int MANAGE_ARTIFACT = 7;
 
     int OMIT_FOR_CYCLE = 8;
@@ -53,6 +56,10 @@
     int SELECT_VERSION_FROM_RANGE = 10;
 
     int RESTRICT_RANGE = 11;
+    
+    int MANAGE_ARTIFACT_VERSION = 12;
+    
+    int MANAGE_ARTIFACT_SCOPE = 13;
 
     void testArtifact( Artifact node );
 
@@ -66,7 +73,17 @@
 
     void updateScope( Artifact artifact, String scope );
 
+    /**
+     * @deprecated
+     */
     void manageArtifact( Artifact artifact, Artifact replacement );
+    
+    // TODO Use the following two instead of manageArtifact
+    // TODO Remove ResolutionListenerDM interface
+
+    //void manageArtifactVersion( Artifact artifact, Artifact replacement );
+    
+    //void manageArtifactScope( Artifact artifact, Artifact replacement );
 
     void omitForCycle( Artifact artifact );
 

Modified: 
maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
 Sat Mar 10 17:03:06 2007
@@ -31,6 +31,7 @@
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.artifact.versioning.ManagedVersionMap;
 import org.codehaus.plexus.PlexusTestCase;
 
 import java.util.ArrayList;
@@ -809,7 +810,8 @@
 
         private String getKey( Artifact artifact )
         {
-            return artifact.getDependencyConflictId() + ":" + 
artifact.getVersionRange();
+            //return artifact.getDependencyConflictId() + ":" + 
artifact.getVersionRange();
+            return artifact.getDependencyConflictId();
         }
 
         private Set createArtifacts( ArtifactFactory artifactFactory, Set 
dependencies, String inheritedScope,

Modified: 
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
 Sat Mar 10 17:03:06 2007
@@ -84,6 +84,7 @@
 
             ArtifactResolutionResult result = 
artifactResolver.resolveTransitively( Collections.singleton( artifact ),
                                                                                
     project.getArtifact(),
+                                                                               
     project.getManagedVersionMap(),
                                                                                
     localRepository,
                                                                                
     project.getRemoteArtifactRepositories(),
                                                                                
     artifactMetadataSource, filter );

Modified: 
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 Sat Mar 10 17:03:06 2007
@@ -618,6 +618,7 @@
             repositories.addAll( project.getRemoteArtifactRepositories() );
 
             ArtifactResolutionResult result = 
artifactResolver.resolveTransitively( dependencies, pluginArtifact,
+                                                                               
     project.getManagedVersionMap(),
                                                                                
     localRepository, repositories,
                                                                                
     artifactMetadataSource,
                                                                                
     artifactFilter );
@@ -1140,7 +1141,9 @@
             project.setDependencyArtifacts( project.createArtifacts( 
artifactFactory, null, null ) );
         }
         ArtifactResolutionResult result = 
artifactResolver.resolveTransitively( project.getDependencyArtifacts(),
-                                                                               
 artifact, context.getLocalRepository(),
+                                                                               
 artifact,
+                                                                               
 project.getManagedVersionMap(),
+                                                                               
 context.getLocalRepository(),
                                                                                
 project.getRemoteArtifactRepositories(),
                                                                                
 artifactMetadataSource, filter );
 

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Sat Mar 10 17:03:06 2007
@@ -33,12 +33,15 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.artifact.versioning.ManagedVersionMap;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
 import org.apache.maven.model.Extension;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
@@ -274,6 +277,8 @@
 
         MavenProject project = new MavenProject( superModel );
 
+        project.setManagedVersionMap(createManagedVersionMap(projectId, 
superModel.getDependencyManagement(), null));
+
         project.setActiveProfiles( activeProfiles );
 
         project.setOriginalModel( superModel );
@@ -334,7 +339,8 @@
 
         String projectId = safeVersionlessKey( project.getGroupId(), 
project.getArtifactId() );
 
-        Map managedVersions = createManagedVersionMap( projectId, 
project.getDependencyManagement() );
+        // Map managedVersions = createManagedVersionMap( projectId, 
project.getDependencyManagement() );
+        Map managedVersions = project.getManagedVersionMap();
 
         ensureMetadataSourceIsInitialized();
 
@@ -386,13 +392,20 @@
         }
     }
 
-    private Map createManagedVersionMap( String projectId, 
DependencyManagement dependencyManagement )
+    private Map createManagedVersionMap( String projectId, 
DependencyManagement dependencyManagement, MavenProject parent)
         throws ProjectBuildingException
     {
-        Map map;
-        if ( dependencyManagement != null && 
dependencyManagement.getDependencies() != null )
+        Map map = null;
+        List deps;
+        if ( dependencyManagement != null && (deps = 
dependencyManagement.getDependencies()) != null && deps.size() > 0)
         {
-            map = new HashMap();
+            map = new ManagedVersionMap(map);
+
+            if ( getLogger().isDebugEnabled() )
+            {
+                getLogger().debug("Adding managed depedendencies for " + 
projectId);
+            }
+
             for ( Iterator i = 
dependencyManagement.getDependencies().iterator(); i.hasNext(); )
             {
                 Dependency d = (Dependency) i.next();
@@ -404,6 +417,26 @@
                                                                                
   versionRange, d.getType(),
                                                                                
   d.getClassifier(), d.getScope(),
                                                                                
   d.isOptional() );
+                    if ( getLogger().isDebugEnabled())
+                    {
+                        getLogger().debug("  " + artifact);
+                    }
+
+                    // If the dependencyManagement section listed exclusions,
+                    // add them to the managed artifacts here so that 
transitive
+                    // dependencies will be excluded if necessary.
+                    if ( null != d.getExclusions() && 
!d.getExclusions().isEmpty() ) {
+                       List exclusions = new ArrayList();
+                       Iterator exclItr = d.getExclusions().iterator();
+                       while (exclItr.hasNext()) {
+                               Exclusion e = (Exclusion) exclItr.next();
+                               exclusions.add(e.getGroupId() + ":" + 
e.getArtifactId());
+                       }
+                        ExcludesArtifactFilter eaf = new 
ExcludesArtifactFilter( exclusions );
+                        artifact.setDependencyFilter( eaf );
+                    } else {
+                       artifact.setDependencyFilter( null );
+                    }
                     map.put( d.getManagementKey(), artifact );
                 }
                 catch ( InvalidVersionSpecificationException e )
@@ -413,7 +446,7 @@
                 }
             }
         }
-        else
+        else if (map == null)
         {
             map = Collections.EMPTY_MAP;
         }
@@ -804,6 +837,8 @@
             }
         }
 
+        project.setManagedVersionMap(createManagedVersionMap(projectId, 
project.getDependencyManagement(), project.getParent()));
+
         return project;
     }
     
@@ -1033,10 +1068,10 @@
 
         Parent parentModel = model.getParent();
 
+        String projectId = safeVersionlessKey( model.getGroupId(), 
model.getArtifactId() );
+
         if ( parentModel != null )
         {
-            String projectId = safeVersionlessKey( model.getGroupId(), 
model.getArtifactId() );
-
             if ( StringUtils.isEmpty( parentModel.getGroupId() ) )
             {
                 throw new ProjectBuildingException( projectId, "Missing 
groupId element from parent element" );

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 Sat Mar 10 17:03:06 2007
@@ -34,6 +34,7 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.artifact.versioning.ManagedVersionMap;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -139,6 +140,8 @@
 
     private Map extensionArtifactMap;
 
+    private Map managedVersionMap;
+
     private Map projectReferences = new HashMap();
 
     private Build buildOverlay;
@@ -252,7 +255,12 @@
         if ( project.artifact != null )
         {
             this.artifact = ArtifactUtils.copyArtifact( project.artifact );
-        }        
+        }
+
+        if ( project.getManagedVersionMap() != null )
+        {
+            setManagedVersionMap( new ManagedVersionMap( 
project.getManagedVersionMap() ) );
+        }
     }
     
     public String getModulePathAdjustment( MavenProject moduleProject ) throws 
IOException
@@ -1479,6 +1487,16 @@
     public Model getOriginalModel()
     {
         return originalModel;
+    }
+
+    public void setManagedVersionMap( Map map )
+    {
+        this.managedVersionMap = map;
+    }
+
+    public Map getManagedVersionMap()
+    {
+        return this.managedVersionMap;
     }
 
     public boolean equals( Object other )

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java?view=diff&rev=516822&r1=516821&r2=516822
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java
 Sat Mar 10 17:03:06 2007
@@ -21,9 +21,15 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.List;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.artifact.versioning.ManagedVersionMap;
 
 public class MavenProjectTest
     extends AbstractMavenProjectTestCase
@@ -41,7 +47,7 @@
         childModel.setArtifactId( "artifact" );
 
         MavenProject childProject = new MavenProject( childModel );
-        
+
         File childFile = new File( System.getProperty( "java.io.tmpdir" ), 
"maven-project-tests" + System.currentTimeMillis() + "/child/pom.xml" );
 
         childProject.setFile( childFile );
@@ -49,7 +55,7 @@
         String adjustment = parentProject.getModulePathAdjustment( 
childProject );
 
         assertNotNull( adjustment );
-        
+
         assertEquals( "..", adjustment );
     }
 
@@ -92,6 +98,33 @@
 
         MavenProject clonedProject = new MavenProject( projectToClone );
         assertEquals( "maven-core", clonedProject.getArtifactId() );
+        Map clonedMap = clonedProject.getManagedVersionMap();
+        assertNotNull("ManagedVersionMap not copied", clonedMap);
+        assertTrue("ManagedVersionMap is not empty", clonedMap.isEmpty());
+    }
+
+    public void testCopyConstructorWithDependencyManagement()
+        throws Exception
+    {
+        File f = getFileForClasspathResource( "dependencyManagement-pom.xml" );
+        MavenProject projectToClone = getProjectWithDependencies( f );
+        DependencyManagement dep = projectToClone.getDependencyManagement();
+        assertNotNull("No dependencyManagement", dep);
+        List list = dep.getDependencies();
+        assertNotNull("No dependencies", list);
+        assertTrue("Empty dependency list", !list.isEmpty());
+
+        Map map = projectToClone.getManagedVersionMap();
+        assertNotNull("No ManagedVersionMap", map);
+        assertTrue("ManagedVersionMap is empty", !map.isEmpty());
+
+        MavenProject clonedProject = new MavenProject( projectToClone );
+        assertEquals( "maven-core", clonedProject.getArtifactId() );
+        Map clonedMap = clonedProject.getManagedVersionMap();
+        assertNotNull("ManagedVersionMap not copied", clonedMap);
+        assertTrue("ManagedVersionMap is empty", !clonedMap.isEmpty());
+        assertTrue("Not a ManagedVersionMap", clonedMap instanceof 
ManagedVersionMap);
+        assertTrue("ManagedVersionMap does not contain test key", 
clonedMap.containsKey("maven-test:maven-test-b:jar"));
     }
 
     public void testGetModulePathAdjustment()


Reply via email to