You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2009/04/23 01:04:18 UTC

svn commit: r767707 [3/6] - in /maven/components/branches/MNG-2766: ./ apache-maven/ maven-compat/ maven-compat/src/main/java/org/apache/maven/artifact/ maven-compat/src/main/java/org/apache/maven/artifact/manager/ maven-compat/src/main/java/org/apache...

Modified: maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed Apr 22 23:04:06 2009
@@ -15,25 +15,17 @@
  * the License.
  */
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.Reader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.lang.reflect.Method;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
+import java.util.Properties;
+
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
@@ -44,33 +36,25 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
 import org.apache.maven.model.Build;
+import org.apache.maven.model.DomainModel;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelEventListener;
+import org.apache.maven.model.PomClassicDomainModel;
+import org.apache.maven.model.ProcessorContext;
 import org.apache.maven.model.Profile;
+import org.apache.maven.model.interpolator.Interpolator;
+import org.apache.maven.model.interpolator.InterpolatorProperty;
+import org.apache.maven.model.interpolator.PomInterpolatorTag;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.profiles.DefaultProfileManager;
-import org.apache.maven.profiles.ProfileActivationContext;
 import org.apache.maven.profiles.ProfileActivationException;
+import org.apache.maven.profiles.ProfileManagerInfo;
 import org.apache.maven.profiles.ProfileManager;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
-import org.apache.maven.project.builder.PomClassicDomainModel;
-import org.apache.maven.project.builder.PomClassicDomainModelFactory;
-import org.apache.maven.project.builder.PomInterpolatorTag;
-import org.apache.maven.project.builder.PomTransformer;
-import org.apache.maven.project.builder.ProjectUri;
-import org.apache.maven.project.builder.profile.ProfileContext;
 import org.apache.maven.project.validation.ModelValidationResult;
 import org.apache.maven.project.validation.ModelValidator;
 import org.apache.maven.repository.RepositorySystem;
 import org.apache.maven.repository.VersionNotFoundException;
-import org.apache.maven.shared.model.DomainModel;
-import org.apache.maven.shared.model.InterpolatorProperty;
-import org.apache.maven.shared.model.ModelContainer;
-import org.apache.maven.shared.model.ModelEventListener;
-import org.apache.maven.shared.model.ModelMarshaller;
-import org.apache.maven.shared.model.ModelProperty;
-import org.apache.maven.shared.model.ModelTransformerContext;
-import org.apache.maven.shared.model.impl.DefaultModelDataSource;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -78,10 +62,6 @@
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
-import org.codehaus.plexus.util.xml.pull.MXSerializer;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import org.codehaus.plexus.util.xml.pull.XmlSerializer;
 
 /**
  * @version $Id$
@@ -100,12 +80,12 @@
     private RepositorySystem repositorySystem;
 
     @Requirement
-    private PlexusContainer container;
-
-    @Requirement
     List<ModelEventListener> listeners;
     
     @Requirement
+    private Interpolator interpolator;    
+    
+    @Requirement
     private ResolutionErrorHandler resolutionErrorHandler;    
 
     //DO NOT USE, it is here only for backward compatibility reasons. The existing
@@ -137,12 +117,59 @@
     public MavenProject build( File pomFile, ProjectBuilderConfiguration configuration )
         throws ProjectBuildingException
     {
-        MavenProject project = readModelFromLocalPath( "unknown", pomFile, configuration.getLocalRepository(), configuration.getRemoteRepositories(), configuration );
-
-        project.setFile( pomFile );
+    	//Do inheritance
+        PomClassicDomainModel domainModel;
+		try 
+		{
+			domainModel = build( "unknown", pomFile, configuration );
+		} 
+		catch (IOException e) 
+		{
+			throw new ProjectBuildingException("", "", e);
+		}
 
-        project = buildWithProfiles( project.getModel(), configuration, pomFile, project.getParentFile() );
+		//Profiles
 
+        List<Profile> projectProfiles;
+	    Properties props = new Properties();
+	    props.putAll(configuration.getExecutionProperties());
+	    props.putAll(configuration.getUserProperties());
+        try
+        {
+        	projectProfiles = DefaultProfileManager.getActiveProfilesFrom(configuration.getGlobalProfileManager(), props, domainModel.getModel() );
+        }
+        catch ( ProfileActivationException e )
+        {
+            throw new ProjectBuildingException( "", "Failed to activate pom profiles.");
+        }   
+        catch(IOException e)
+        {
+        	throw new ProjectBuildingException( "", "Failed to activate pom profiles.");	
+        }
+		
+        try
+        {
+        	List<Profile> externalProfiles = new ArrayList<Profile>();
+            for(Profile p : projectProfiles)
+    		{
+            	if(!"pom".equals(p.getSource()))
+            	{
+            		logger.debug("Merging profile into model (build): Model = " + domainModel.getId() + ", Profile = " + p.getId() );
+            		externalProfiles.add(p);
+            	}   			
+    		}
+    		        	
+            domainModel = ProcessorContext.mergeProfilesIntoModel( externalProfiles, domainModel );
+        }
+        catch ( IOException e )
+        {
+            throw new ProjectBuildingException("", "");
+        }
+        
+		//Interpolation
+        MavenProject project = interpolateDomainModel( domainModel, configuration, pomFile );
+        project.setActiveProfiles( projectProfiles );
+         
         Build build = project.getBuild();
         // NOTE: setting this script-source root before path translation, because
         // the plugin tools compose basedir and scriptSourceRoot into a single file.
@@ -150,13 +177,15 @@
         project.addCompileSourceRoot( build.getSourceDirectory() );
         project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
         project.setFile( pomFile );
-
+        
         setBuildOutputDirectoryOnParent( project );
 
         hm.put( ArtifactUtils.artifactId( project.getGroupId(), project.getArtifactId(), "pom", project.getVersion() ), project );
-
+   
         return project;
     }
+    
+  //  private static void setRepositoriesOn(MavenProject project, )
 
     //!! This is used by the RR plugin
     public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteArtifactRepositories, ArtifactRepository localRepository, boolean allowStubs )
@@ -171,18 +200,24 @@
         
         return buildFromRepository( pomArtifact, remoteArtifactRepositories, localRepository );
     }
-
-    public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
-        throws ProjectBuildingException
+    
+    public MavenProject buildFromRepository(Artifact artifact, ProjectBuilderConfiguration configuration )
+    	throws ProjectBuildingException
     {
+     
         MavenProject project = hm.get( artifact.getId() );
 
         if ( project != null )
         {
             return project;
         }
+        
+        if(configuration.getRemoteRepositories() == null)
+        {
+        	throw new IllegalArgumentException("configuration.getRemoteRepositories(): null");
+        }
 
-        ArtifactResolutionRequest request = new ArtifactResolutionRequest( artifact, localRepository, remoteRepositories );
+        ArtifactResolutionRequest request = new ArtifactResolutionRequest( artifact, configuration.getLocalRepository(), configuration.getRemoteRepositories() );
         ArtifactResolutionResult result = repositorySystem.resolve( request );
                 
         try
@@ -193,26 +228,69 @@
         {
             throw new ProjectBuildingException( artifact.getId(), "Error resolving project artifact.", e );
         }
-        
-        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration()   
-            .setLocalRepository( localRepository )
-            .setRemoteRepositories( remoteRepositories );
-        /*
-        if( !artifact.getFile().getName().endsWith(".pom"))
-        {
-			throw new ProjectBuildingException("", "Invalid project extension", artifact.getFile());
-		} else {
-			System.out.println("READ: " + artifact.getFile());
+        PomClassicDomainModel domainModel;
+        try 
+        {
+			domainModel = build( "unknown", artifact.getFile(), configuration );
+		} 
+        catch (IOException e) 
+        {
+			throw new ProjectBuildingException(artifact.getId(), "Error reading project artifact.", e);
 		}
-        */
-        project = readModelFromLocalPath( "unknown", artifact.getFile(), config.getLocalRepository(), remoteRepositories, config );
-        project = buildWithProfiles( project.getModel(), config, artifact.getFile(), project.getParentFile() );
+        
+        List<Profile> projectProfiles;
+	    Properties props = new Properties();
+	    props.putAll(configuration.getExecutionProperties());
+	    props.putAll(configuration.getUserProperties());
+	    
+        try
+        {
+        	projectProfiles = DefaultProfileManager.getActiveProfilesFrom(configuration.getGlobalProfileManager(), props, domainModel.getModel() );
+        }
+        catch ( ProfileActivationException e )
+        {
+            throw new ProjectBuildingException( "", "Failed to activate pom profiles.");
+        }   
+        catch(IOException e)
+        {
+        	throw new ProjectBuildingException( "", "Failed to activate pom profiles.");	
+        }
+        
+        try
+        {
+            for(Profile p : projectProfiles)
+    		{
+    			logger.debug("Merging profile into model (buildFromRepository): Model = " + domainModel.getId() + ", Profile = " + p.getId() );
+    		}
+    		           	
+            domainModel = ProcessorContext.mergeProfilesIntoModel( projectProfiles, domainModel );
+        }
+        catch ( IOException e )
+        {
+            throw new ProjectBuildingException("", "");
+        }
+        project = interpolateDomainModel( domainModel, configuration, artifact.getFile() );
+        project.setActiveProfiles( projectProfiles );
         artifact.setFile( artifact.getFile() );
         project.setVersion( artifact.getVersion() );
 
         hm.put( artifact.getId(), project );
 
-        return project;
+        return project;   	
+    }
+    
+    //TODO: Get rid of this after merge of new PluginManager code
+    public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
+        throws ProjectBuildingException
+    {
+    	if(remoteRepositories == null)
+    	{
+    		throw new IllegalArgumentException("repositories: null");
+    	}
+        ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration()        
+        .setLocalRepository( localRepository )
+        .setRemoteRepositories(remoteRepositories);
+        return buildFromRepository(artifact, configuration);
     }
 
     /**
@@ -268,6 +346,12 @@
             .setLocalRepository( configuration.getLocalRepository() )
             .setRemoteRepostories( project.getRemoteArtifactRepositories() )
             .setManagedVersionMap( project.getManagedVersionMap() );
+        
+        
+        if(request.getRemoteRepostories() == null)
+        {
+            request.setRemoteRepostories( new ArrayList<ArtifactRepository>() );
+        }
 
         ArtifactResolutionResult result = repositorySystem.resolve( request );
 
@@ -283,49 +367,42 @@
 
         return new MavenProjectBuildingResult( project, result );
     }
-
-    private MavenProject buildWithProfiles( Model model, ProjectBuilderConfiguration config, File projectDescriptor, File parentDescriptor )
+    
+    private MavenProject interpolateDomainModel( PomClassicDomainModel domainModel, ProjectBuilderConfiguration config, File projectDescriptor )
         throws ProjectBuildingException
     {
+    	Model model;
+		try 
+		{
+			model = domainModel.getModel();
+		} 
+		catch (IOException e) 
+		{
+			throw new ProjectBuildingException("", e.getMessage());
+		}
+		
         String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
+        
+        List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+        interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( config.getExecutionProperties(), PomInterpolatorTag.EXECUTION_PROPERTIES.name() ) );
+        interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( config.getUserProperties(), PomInterpolatorTag.USER_PROPERTIES.name() ) );
 
-        ProfileActivationContext profileActivationContext;
-
-        List<Profile> projectProfiles = new ArrayList<Profile>();
-        ProfileManager externalProfileManager = config.getGlobalProfileManager();
-
-        if ( externalProfileManager != null )
-        {
-            try
-            {
-                projectProfiles.addAll( externalProfileManager.getActiveProfiles( model ) );
-            }
-            catch ( ProfileActivationException e )
-            {
-                throw new ProjectBuildingException( projectId, "Failed to activate external profiles.", projectDescriptor, e );
-            }
-            profileActivationContext = externalProfileManager.getProfileActivationContext();
-        }
-        else
+        if ( config.getBuildStartTime() != null )
         {
-            profileActivationContext = new ProfileActivationContext( config.getExecutionProperties(), false );
-
-            ProfileManager profileManager = new DefaultProfileManager( container, profileActivationContext );
-            profileManager.addProfiles( model.getProfiles() );
+            interpolatorProperties.add( new InterpolatorProperty( "${build.timestamp}", new SimpleDateFormat( "yyyyMMdd-hhmm" ).format( config.getBuildStartTime() ),
+                                                                  PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
+        }    
+        
             try
             {
-                projectProfiles.addAll( profileManager.getActiveProfiles( model ) );
+            	model = interpolator.interpolateDomainModel( domainModel, interpolatorProperties ).getModel();
             }
-            catch ( ProfileActivationException e )
+            catch ( IOException e )
             {
-                throw new ProjectBuildingException( projectId, "Failed to activate external profiles.", projectDescriptor, e );
-            }
-        }
 
-        for ( Profile profile : projectProfiles )
-        {
-            model = inject( profile, model );
-        }
+                throw new ProjectBuildingException(projectId, "", projectDescriptor, e);
+            }  
+            
 
         MavenProject project;
 
@@ -338,7 +415,7 @@
             Artifact projectArtifact = repositorySystem.createArtifact( project.getGroupId(), project.getArtifactId(), project.getVersion(), null, project.getPackaging() );
             project.setArtifact( projectArtifact );
 
-            project.setParentFile( parentDescriptor );
+            project.setParentFile( domainModel.getParentFile() );
 
         }
         catch ( InvalidRepositoryException e )
@@ -346,123 +423,113 @@
             throw new InvalidProjectModelException( projectId, e.getMessage(), projectDescriptor, e );
         }
 
-        project.setActiveProfiles( projectProfiles );
-
         return project;
     }
-
-    private Model inject( Profile profile, Model model )
+    
+    private PomClassicDomainModel build( String projectId, File pomFile, ProjectBuilderConfiguration projectBuilderConfiguration )
+        throws ProjectBuildingException, IOException
     {
-        //TODO: Using reflection now. Need to replace with custom mapper
-        StringWriter writer = new StringWriter();
-        XmlSerializer serializer = new MXSerializer();
-        serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "  " );
-        serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
-        try
-        {
-            serializer.setOutput( writer );
-            serializer.startDocument( "UTF-8", null );
-        }
-        catch ( IOException e )
-        {
-
-        }
-
-        try
-        {
-            MavenXpp3Writer w = new MavenXpp3Writer();
-            Class c = Class.forName( "org.apache.maven.model.io.xpp3.MavenXpp3Writer" );
-
-            Class partypes[] = new Class[3];
-            partypes[0] = Profile.class;
-            partypes[1] = String.class;
-            partypes[2] = XmlSerializer.class;
-
-            Method meth = c.getDeclaredMethod( "writeProfile", partypes );
-            meth.setAccessible( true );
-
-            Object arglist[] = new Object[3];
-            arglist[0] = profile;
-            arglist[1] = "profile";
-            arglist[2] = serializer;
-
-            meth.invoke( w, arglist );
-            serializer.endDocument();
-        }
-        catch ( Exception e )
-        {
-            return null;
-        }
-        Set<String> uris = new HashSet( PomTransformer.URIS );
-        uris.add( ProjectUri.Profiles.Profile.Build.Plugins.Plugin.configuration );
-
-        List<ModelProperty> p;
-        try
-        {
-            String xml = writer.getBuffer().toString();
-            p = ModelMarshaller.marshallXmlToModelProperties( new ByteArrayInputStream( xml.getBytes( "UTF-8" ) ), ProjectUri.Profiles.xUri, uris );
-        }
-        catch ( IOException e )
-        {
-            return null;
-        }
-
-        List<ModelProperty> transformed = new ArrayList<ModelProperty>();
-        for ( ModelProperty mp : p )
-        {
-            if ( mp.getUri().startsWith( ProjectUri.Profiles.Profile.xUri ) && !mp.getUri().equals( ProjectUri.Profiles.Profile.id )
-                && !mp.getUri().startsWith( ProjectUri.Profiles.Profile.Activation.xUri ) )
-            {
-                transformed.add( new ModelProperty( mp.getUri().replace( ProjectUri.Profiles.Profile.xUri, ProjectUri.xUri ), mp.getResolvedValue() ) );
-            }
-        }
-
-        PomTransformer transformer = new PomTransformer( new PomClassicDomainModelFactory() );
-        ModelTransformerContext ctx = new ModelTransformerContext( PomTransformer.MODEL_CONTAINER_INFOS );
+        List<String> activeProfileIds = ( projectBuilderConfiguration != null && projectBuilderConfiguration.getGlobalProfileManager() != null && projectBuilderConfiguration.getGlobalProfileManager()
+            .getProfileActivationContext() != null ) ? projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyActiveProfileIds() : new ArrayList<String>();
 
-        PomClassicDomainModel transformedDomainModel;
-        try
-        {
-            transformedDomainModel = ( (PomClassicDomainModel) ctx.transform( Arrays.asList( new PomClassicDomainModel( transformed, false ), convertToDomainModel( model, true ) ), transformer,
-                                                                              transformer, Collections.EMPTY_LIST, null, null ) );
-            return convertFromInputStreamToModel( transformedDomainModel.getInputStream() );
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-            return null;
-        }
+        List<String> inactiveProfileIds = ( projectBuilderConfiguration != null && projectBuilderConfiguration.getGlobalProfileManager() != null && projectBuilderConfiguration
+            .getGlobalProfileManager().getProfileActivationContext() != null ) ? projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyInactiveProfileIds()
+                                                                              : new ArrayList<String>();
+            
+            List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+            interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( projectBuilderConfiguration.getExecutionProperties(), PomInterpolatorTag.EXECUTION_PROPERTIES.name() ) );
+            interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( projectBuilderConfiguration.getUserProperties(), PomInterpolatorTag.USER_PROPERTIES.name() ) );
+            
+            ProfileManagerInfo profileInfo = new ProfileManagerInfo(interpolatorProperties, activeProfileIds, inactiveProfileIds);
+            PomClassicDomainModel domainModel = new PomClassicDomainModel( pomFile );
+            domainModel.setProjectDirectory( pomFile.getParentFile() );
+            domainModel.setMostSpecialized( true );
+
+            List<DomainModel> domainModels = new ArrayList<DomainModel>();
+
+            domainModels.add( domainModel );
+            ArtifactRepository localRepository = projectBuilderConfiguration.getLocalRepository();
+            List<ArtifactRepository> remoteRepositories = projectBuilderConfiguration.getRemoteRepositories();
+
+            File parentFile = null;
+            int lineageCount = 0;
+            if ( domainModel.getParentId() != null )
+            {
+            	List<DomainModel> mavenParents;
+            	MavenProject topProject = projectBuilderConfiguration.getTopLevelProjectFromReactor();
+            	if(useTopLevelProjectForParent(domainModel, topProject) )
+            	{
+            		mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, topProject.getFile(), projectBuilderConfiguration );
+            	}
+            	else if ( isParentLocal( domainModel.getRelativePathOfParent(), pomFile.getParentFile() ) )
+            	{
+            		mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pomFile.getParentFile(), projectBuilderConfiguration );
+            	}
+            	else
+            	{
+            		mavenParents = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories );
+            	}
+
+            	if ( mavenParents.size() > 0 )
+            	{
+            		PomClassicDomainModel dm = (PomClassicDomainModel) mavenParents.get( 0 );
+            		parentFile = dm.getFile();
+            		domainModel.setParentFile( parentFile );
+            		lineageCount = mavenParents.size();
+            	}
+
+            	domainModels.addAll( mavenParents );
+            }
+
+            domainModels.add( new PomClassicDomainModel( getSuperModel(), false ) );
+            List<DomainModel> profileModels = new ArrayList<DomainModel>();
+            //Process Profiles
+            for(DomainModel domain : domainModels)
+            {
+            	PomClassicDomainModel dm = (PomClassicDomainModel) domain;
+
+            	if(!dm.getModel().getProfiles().isEmpty())
+            	{
+            		Collection<Profile> profiles = DefaultProfileManager.getActiveProfiles(dm.getModel().getProfiles(), profileInfo);
+            		if(!profiles.isEmpty())
+            		{
+            			for(Profile p : profiles)
+            			{
+            				logger.debug("Merging profile into model: Model = " + dm.getId() + ", Profile = " + p.getId() );
+            			}
+            			profileModels.add(ProcessorContext.mergeProfilesIntoModel( profiles, dm ));  
+            		}
+            		else
+            		{
+            			profileModels.add( dm );   
+            		}
+            	}
+            	else
+            	{
+            		profileModels.add( dm );
+            	}                
+            }
+
+            PomClassicDomainModel transformedDomainModel = ProcessorContext.build(profileModels, listeners);
+
+            // Lineage count is inclusive to add the POM read in itself.
+            transformedDomainModel.setLineageCount( lineageCount + 1 );
+            transformedDomainModel.setParentFile( parentFile );
 
+            return transformedDomainModel;
     }
-
-    private MavenProject readModelFromLocalPath( String projectId, File pomFile, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, ProjectBuilderConfiguration config )
-        throws ProjectBuildingException
+    
+    private static boolean useTopLevelProjectForParent(PomClassicDomainModel currentModel, MavenProject topProject) throws IOException
     {
-        List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
-
-        interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( config.getExecutionProperties(), PomInterpolatorTag.EXECUTION_PROPERTIES.name() ) );
-
-        interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( config.getUserProperties(), PomInterpolatorTag.USER_PROPERTIES.name() ) );
-
-        if ( config.getBuildStartTime() != null )
-        {
-            interpolatorProperties.add( new InterpolatorProperty( "${build.timestamp}", new SimpleDateFormat( "yyyyMMdd-hhmm" ).format( config.getBuildStartTime() ),
-                                                                  PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
-        }
-
-        MavenProject mavenProject;
-
-        try
-        {
-            mavenProject = buildFromLocalPath( pomFile, interpolatorProperties, localRepository, remoteRepositories, config, this );
-        }
-        catch ( IOException e )
-        {
-            throw new ProjectBuildingException( projectId, "File = " + pomFile.getAbsolutePath(), e );
-        }
-
-        return mavenProject;
-
+    	if(topProject == null || currentModel.getModel().getParent() == null)
+    	{
+    		return false;
+    	}
+
+    	return topProject.getGroupId().equals(currentModel.getParentGroupId()) 
+    	&& topProject.getArtifactId().equals(currentModel.getParentArtifactId()) 
+    	&& topProject.getVersion().equals(currentModel.getParentVersion());
+    	
     }
 
     private void validateModel( Model model, File pomFile )
@@ -477,7 +544,7 @@
         {
             for ( String s : (List<String>) validationResult.getMessages() )
             {
-                logger.debug( s );
+                logger.info( s );
             }
             throw new InvalidProjectModelException( projectId, "Failed to validate POM", pomFile, validationResult );
         }
@@ -512,159 +579,6 @@
         }
     }
 
-    protected PomClassicDomainModel buildModel( File pom, Collection<InterpolatorProperty> interpolatorProperties, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
-        throws IOException
-    {
-        return buildModel( pom, interpolatorProperties, null, null, localRepository, remoteRepositories );
-    }
-
-    private PomClassicDomainModel buildModel( File pom, Collection<InterpolatorProperty> interpolatorProperties, Collection<String> activeProfileIds, Collection<String> inactiveProfileIds,
-                                              ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
-        throws IOException
-    {
-        if ( pom == null )
-        {
-            throw new IllegalArgumentException( "pom: null" );
-        }
-
-        if ( activeProfileIds == null )
-        {
-            activeProfileIds = new ArrayList<String>();
-        }
-        if ( inactiveProfileIds == null )
-        {
-            inactiveProfileIds = new ArrayList<String>();
-        }
-
-        List<InterpolatorProperty> properties;
-        if ( interpolatorProperties == null )
-        {
-            properties = new ArrayList<InterpolatorProperty>();
-        }
-        else
-        {
-            properties = new ArrayList<InterpolatorProperty>( interpolatorProperties );
-        }
-
-        PomClassicDomainModel domainModel = new PomClassicDomainModel( pom );
-        domainModel.setProjectDirectory( pom.getParentFile() );
-        domainModel.setMostSpecialized( true );
-
-        List<DomainModel> domainModels = new ArrayList<DomainModel>();
-
-        //Process Profile on most specialized child model
-        ProfileContext profileContext = new ProfileContext( new DefaultModelDataSource( domainModel.getModelProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES ), activeProfileIds,
-                                                            inactiveProfileIds, properties );
-
-        domainModels.addAll( transformProfiles( profileContext ) );
-        domainModels.add( domainModel );
-
-        File parentFile = null;
-        int lineageCount = 0;
-        if ( domainModel.getParentId() != null )
-        {
-            List<DomainModel> mavenParents;
-            if ( isParentLocal( domainModel.getRelativePathOfParent(), pom.getParentFile() ) )
-            {
-                mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pom.getParentFile(), properties, activeProfileIds, inactiveProfileIds );
-            }
-            else
-            {
-                mavenParents = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds );
-            }
-
-            if ( mavenParents.size() > 0 )
-            {
-                PomClassicDomainModel dm = (PomClassicDomainModel) mavenParents.get( 0 );
-                parentFile = dm.getFile();
-                domainModel.setParentFile( parentFile );
-                lineageCount = mavenParents.size();
-            }
-
-            domainModels.addAll( mavenParents );
-        }
-
-        domainModels.add( convertToDomainModel( getSuperModel(), false ) );
-
-        PomTransformer transformer = new PomTransformer( new PomClassicDomainModelFactory() );
-
-        ModelTransformerContext ctx = new ModelTransformerContext( PomTransformer.MODEL_CONTAINER_INFOS );
-
-        PomClassicDomainModel transformedDomainModel = ( (PomClassicDomainModel) ctx.transform( domainModels, transformer, transformer, Collections.EMPTY_LIST, properties, listeners ) );
-        // Lineage count is inclusive to add the POM read in itself.
-        transformedDomainModel.setLineageCount( lineageCount + 1 );
-        transformedDomainModel.setParentFile( parentFile );
-
-        return transformedDomainModel;
-    }
-
-    private PomClassicDomainModel convertToDomainModel( Model model, boolean isMostSpecialized )
-        throws IOException
-    {
-        if ( model == null )
-        {
-            throw new IllegalArgumentException( "model: null" );
-        }
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        Writer out = null;
-        MavenXpp3Writer writer = new MavenXpp3Writer();
-        try
-        {
-            out = WriterFactory.newXmlWriter( baos );
-            writer.write( out, model );
-        }
-        finally
-        {
-            if ( out != null )
-            {
-                out.close();
-            }
-        }
-        return new PomClassicDomainModel( new ByteArrayInputStream( baos.toByteArray() ), isMostSpecialized );
-    }
-
-    protected MavenProject buildFromLocalPath( File pom, Collection<InterpolatorProperty> interpolatorProperties, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
-                                               ProjectBuilderConfiguration projectBuilderConfiguration, MavenProjectBuilder mavenProjectBuilder )
-        throws IOException
-    {
-
-        List<String> activeProfileIds = ( projectBuilderConfiguration != null && projectBuilderConfiguration.getGlobalProfileManager() != null && projectBuilderConfiguration.getGlobalProfileManager()
-            .getProfileActivationContext() != null ) ? projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyActiveProfileIds() : new ArrayList<String>();
-
-        List<String> inactiveProfileIds = ( projectBuilderConfiguration != null && projectBuilderConfiguration.getGlobalProfileManager() != null && projectBuilderConfiguration
-            .getGlobalProfileManager().getProfileActivationContext() != null ) ? projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyInactiveProfileIds()
-                                                                              : new ArrayList<String>();
-
-        PomClassicDomainModel domainModel = buildModel( pom, interpolatorProperties, activeProfileIds, inactiveProfileIds, localRepository, remoteRepositories );
-
-        try
-        {
-            MavenProject mavenProject = new MavenProject( convertFromInputStreamToModel( domainModel.getInputStream() ), repositorySystem, mavenProjectBuilder, projectBuilderConfiguration );
-
-            mavenProject.setParentFile( domainModel.getParentFile() );
-
-            return mavenProject;
-        }
-        catch ( InvalidRepositoryException e )
-        {
-            throw new IOException( e.getMessage() );
-        }
-    }
-
-    private static Model convertFromInputStreamToModel( InputStream inputStream )
-        throws IOException
-    {
-        try
-        {
-            return new MavenXpp3Reader().read( ReaderFactory.newXmlReader( inputStream ) );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new IOException( e.getMessage() );
-        }
-
-    }
-
     /**
      * Returns true if the relative path of the specified parent references a pom, otherwise returns
      * false.
@@ -674,7 +588,7 @@
      * @return true if the relative path of the specified parent references a pom, otherwise returns
      *         fals
      */
-    private boolean isParentLocal( String relativePath, File projectDirectory )
+    private static boolean isParentLocal( String relativePath, File projectDirectory )
     {
         try
         {
@@ -693,15 +607,14 @@
         }
     }
 
-    private List<DomainModel> getDomainModelParentsFromRepository( PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
-                                                                   List<InterpolatorProperty> properties, Collection<String> activeProfileIds, Collection<String> inactiveProfileIds )
+    private List<DomainModel> getDomainModelParentsFromRepository(  PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
         throws IOException
     {
         List<DomainModel> domainModels = new ArrayList<DomainModel>();
 
         String parentId = domainModel.getParentId();
 
-        if ( parentId == null )
+        if ( parentId == null || localRepository == null)
         {
             return domainModels;
         }
@@ -727,41 +640,12 @@
             //shane: what does this mean exactly and why does it occur
             logger.debug( "Parent pom ids do not match: Parent File = " + artifactParent.getFile().getAbsolutePath() + ": Child ID = " + domainModel.getId() );
 
-            return domainModels;
+           // return domainModels;
         }
 
         domainModels.add( parentDomainModel );
 
-        //Process Profiles
-        ProfileContext profileContext = new ProfileContext( new DefaultModelDataSource( parentDomainModel.getModelProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES ), activeProfileIds,
-                                                            inactiveProfileIds, properties );
-        domainModels.addAll( transformProfiles( profileContext ) );
-
-        domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds ) );
-        return domainModels;
-    }
-
-    private static List<DomainModel> transformProfiles( ProfileContext profileContext )
-        throws IOException
-    {
-        List<DomainModel> domainModels = new ArrayList<DomainModel>();
-        Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
-
-        for ( ModelContainer mc : profileContainers )
-        {
-            List<ModelProperty> transformed = new ArrayList<ModelProperty>();
-            transformed.add( new ModelProperty( ProjectUri.xUri, null ) );
-            for ( ModelProperty mp : mc.getProperties() )
-            {
-                if ( mp.getUri().startsWith( ProjectUri.Profiles.Profile.xUri ) && !mp.getUri().equals( ProjectUri.Profiles.Profile.id )
-                    && !mp.getUri().startsWith( ProjectUri.Profiles.Profile.Activation.xUri ) )
-                {
-                    transformed.add( new ModelProperty( mp.getUri().replace( ProjectUri.Profiles.Profile.xUri, ProjectUri.xUri ), mp.getResolvedValue() ) );
-                }
-            }
-
-            domainModels.add( new PomClassicDomainModel( transformed ) );
-        }
+        domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) );
         return domainModels;
     }
 
@@ -775,8 +659,7 @@
      * @throws IOException
      */
     private List<DomainModel> getDomainModelParentsFromLocalPath( PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
-                                                                  File projectDirectory, List<InterpolatorProperty> properties, Collection<String> activeProfileIds,
-                                                                  Collection<String> inactiveProfileIds )
+                                                                  File projectDirectory, ProjectBuilderConfiguration projectBuilderConfiguration )
         throws IOException
     {
         List<DomainModel> domainModels = new ArrayList<DomainModel>();
@@ -793,33 +676,21 @@
         {
             parentFile = new File( parentFile.getAbsolutePath(), "pom.xml" );
         }
-
-        if ( !parentFile.isFile() )
-        {
-            throw new IOException( "File does not exist: File = " + parentFile.getAbsolutePath() );
+    	MavenProject topProject = projectBuilderConfiguration.getTopLevelProjectFromReactor();
+    	boolean isTop = useTopLevelProjectForParent(domainModel, topProject);
+    	PomClassicDomainModel parentDomainModel = null;
+        if ( !isTop  )
+        {
+        	if(!parentFile.isFile())
+        	{
+        		throw new IOException( "File does not exist: File = " + parentFile.getAbsolutePath() );	
+        	}     
+        	parentDomainModel = new PomClassicDomainModel( parentFile );
+        	parentDomainModel.setProjectDirectory( parentFile.getParentFile() );
         }
-
-        PomClassicDomainModel parentDomainModel = new PomClassicDomainModel( parentFile );
-        parentDomainModel.setProjectDirectory( parentFile.getParentFile() );
-
-        //Process Profiles
-        ProfileContext profileContext = new ProfileContext( new DefaultModelDataSource( parentDomainModel.getModelProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES ), activeProfileIds,
-                                                            inactiveProfileIds, properties );
-        Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
-
-        for ( ModelContainer mc : profileContainers )
+        else
         {
-            List<ModelProperty> transformed = new ArrayList<ModelProperty>();
-            transformed.add( new ModelProperty( ProjectUri.xUri, null ) );
-            for ( ModelProperty mp : mc.getProperties() )
-            {
-                if ( mp.getUri().startsWith( ProjectUri.Profiles.Profile.xUri ) && !mp.getUri().equals( ProjectUri.Profiles.Profile.id )
-                    && !mp.getUri().startsWith( ProjectUri.Profiles.Profile.Activation.xUri ) )
-                {
-                    transformed.add( new ModelProperty( mp.getUri().replace( ProjectUri.Profiles.Profile.xUri, ProjectUri.xUri ), mp.getResolvedValue() ) );
-                }
-            }
-            domainModels.add( new PomClassicDomainModel( transformed ) );
+        	parentDomainModel = new PomClassicDomainModel(projectBuilderConfiguration.getTopLevelProjectFromReactor().getFile());
         }
 
         if ( !parentDomainModel.matchesParentOf( domainModel ) )
@@ -827,7 +698,7 @@
             logger.info( "Parent pom ids do not match: Parent File = " + parentFile.getAbsolutePath() + ", Parent ID = " + parentDomainModel.getId() + ", Child ID = " + domainModel.getId()
                 + ", Expected Parent ID = " + domainModel.getParentId() );
 
-            List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds );
+            List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories );
 
             if ( parentDomainModels.size() == 0 )
             {
@@ -841,22 +712,30 @@
         domainModels.add( parentDomainModel );
         if ( domainModel.getParentId() != null )
         {
-            if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) )
+        	if(isTop)
+        	{
+        		 if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) )
+                 {
+        			 domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, topProject.getFile(), projectBuilderConfiguration ) );
+                 }
+                 else
+                 {
+                     domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) );
+                 }       		
+        	}
+        	else if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) )
             {
-                domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile(), properties, activeProfileIds,
-                                                                         inactiveProfileIds ) );
+                domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile(), projectBuilderConfiguration ) );
             }
             else
             {
-                domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds ) );
+                domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) );
             }
         }
 
         return domainModels;
     }
 
-    private DomainModel superDomainModel;
-
     // Super Model Handling
 
     private static final String MAVEN_MODEL_VERSION = "4.0.0";
@@ -891,5 +770,4 @@
 
         return superModel;
     }
-
 }
\ No newline at end of file

Modified: maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java Wed Apr 22 23:04:06 2009
@@ -24,8 +24,8 @@
 import java.util.Properties;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.ModelEventListener;
 import org.apache.maven.profiles.ProfileManager;
-import org.apache.maven.shared.model.ModelEventListener;
 
 public class DefaultProjectBuilderConfiguration
     implements ProjectBuilderConfiguration
@@ -44,6 +44,18 @@
     private Date buildStartTime;
 
     private List<ModelEventListener> listeners;
+    
+    private MavenProject topProject;
+    
+    public MavenProject getTopLevelProjectFromReactor()
+    {
+    	return topProject;
+    }
+    
+    public void setTopLevelProjectForReactor(MavenProject mavenProject)
+    {
+    	this.topProject = mavenProject;
+    }
         
     public ProjectBuilderConfiguration setGlobalProfileManager( ProfileManager globalProfileManager )
     {

Modified: maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Wed Apr 22 23:04:06 2009
@@ -237,7 +237,24 @@
         }
         */
 
-        setRemoteArtifactRepositories( projectBuilderConfiguration.getRemoteRepositories() );       
+        setRemoteArtifactRepositories( (projectBuilderConfiguration.getRemoteRepositories() != null) ? new ArrayList<ArtifactRepository>(projectBuilderConfiguration.getRemoteRepositories()) : new ArrayList<ArtifactRepository>());
+ 
+        for(Repository r: model.getPluginRepositories())
+		{
+			try {
+				remoteArtifactRepositories.add(repositorySystem.buildArtifactRepository( r ));
+			} catch (InvalidRepositoryException e) {
+
+			}
+		}   
+        for(Repository r: model.getPluginRepositories())
+		{
+			try {
+				remoteArtifactRepositories.add(repositorySystem.buildArtifactRepository( r ));
+			} catch (InvalidRepositoryException e) {
+
+			}
+		}        
     }
 
     /**
@@ -331,6 +348,10 @@
     {
         if ( parent == null )
         {
+            /*
+             * TODO: This is suboptimal. Without a cache in the project builder, rebuilding the parent chain currently
+             * causes O(n^2) parser invocations for an inheritance hierarchy of depth n.
+             */
             if ( parentFile != null )
             {
                 try
@@ -369,9 +390,9 @@
 
     public List<ArtifactRepository> getRemoteArtifactRepositories()
     {
-        return remoteArtifactRepositories;
+        return new ArrayList<ArtifactRepository>( remoteArtifactRepositories );
     }
-
+    
     public boolean hasParent()
     {
         return getParent() != null;
@@ -419,21 +440,36 @@
     // Test and compile sourceroots.
     // ----------------------------------------------------------------------
 
-    public void addCompileSourceRoot( String path )
+    private void addPath( List<String> paths, String path )
     {
         if ( path != null )
         {
             path = path.trim();
-            if ( path.length() != 0 )
+            if ( path.length() > 0 )
             {
-                if ( !getCompileSourceRoots().contains( path ) )
+                File file = new File( path );
+                if ( file.isAbsolute() )
+                {
+                    path = file.getAbsolutePath();
+                }
+                else
+                {
+                    path = new File( getBasedir(), path ).getAbsolutePath();
+                }
+
+                if ( !paths.contains( path ) )
                 {
-                    getCompileSourceRoots().add( path );
+                    paths.add( path );
                 }
             }
         }
     }
 
+    public void addCompileSourceRoot( String path )
+    {
+        addPath( getCompileSourceRoots(), path );
+    }
+
     public void addScriptSourceRoot( String path )
     {
         if ( path != null )
@@ -451,17 +487,7 @@
 
     public void addTestCompileSourceRoot( String path )
     {
-        if ( path != null )
-        {
-            path = path.trim();
-            if ( path.length() != 0 )
-            {
-                if ( !getTestCompileSourceRoots().contains( path ) )
-                {
-                    getTestCompileSourceRoots().add( path );
-                }
-            }
-        }
+        addPath( getTestCompileSourceRoots(), path );
     }
 
     public List<String> getCompileSourceRoots()

Modified: maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java Wed Apr 22 23:04:06 2009
@@ -40,6 +40,9 @@
 
     MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
         throws ProjectBuildingException;
+    
+    MavenProject buildFromRepository(Artifact artifact, ProjectBuilderConfiguration configuration )
+		throws ProjectBuildingException;    
 
     MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration configuration )
         throws ProjectBuildingException;

Modified: maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java Wed Apr 22 23:04:06 2009
@@ -33,4 +33,8 @@
     Date getBuildStartTime();
 
     ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime );    
+    
+    MavenProject getTopLevelProjectFromReactor();
+    
+    void setTopLevelProjectForReactor(MavenProject mavenProject);
 }

Modified: maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java Wed Apr 22 23:04:06 2009
@@ -85,10 +85,10 @@
 
             validateId( "dependencies.dependency.groupId", result, d.getGroupId() );
 
-            validateStringNotEmpty( "dependencies.dependency.type", result, d.getType(), dependencySourceHint( d ) );
+            validateStringNotEmpty( "dependencies.dependency.type", result, d.getType(), d.getManagementKey() );
 
             validateStringNotEmpty( "dependencies.dependency.version", result, d.getVersion(),
-                                    dependencySourceHint( d ) );
+                                    d.getManagementKey() );
 
             if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) )
             {
@@ -263,19 +263,6 @@
     // Field validation
     // ----------------------------------------------------------------------
 
-    /**
-     * Create a hint string consisting of the groupId and artifactId for user validation
-     * messages. For example when the version or type information is missing from a
-     * dependency.
-     *
-     * @param d The dependency from which to make the hint.
-     * @return String of the form g:a.
-     */
-    private String dependencySourceHint( Dependency d )
-    {
-        return d.getGroupId() + ":" + d.getArtifactId();
-    }
-
     private boolean validateStringNotEmpty( String fieldName, ModelValidationResult result, String string )
     {
         return validateStringNotEmpty( fieldName, result, string, null );

Modified: maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java Wed Apr 22 23:04:06 2009
@@ -20,7 +20,6 @@
  */
 
 import org.apache.maven.model.Activation;
-import org.apache.maven.model.ActivationOS;
 import org.apache.maven.model.ActivationProperty;
 import org.apache.maven.model.Profile;
 import org.apache.maven.profiles.DefaultProfileManager;
@@ -65,12 +64,12 @@
         Properties props = new Properties();
         ProfileActivationContext ctx = new ProfileActivationContext( props, false );
 
-        ProfileManager profileManager = new DefaultProfileManager( getContainer(), ctx );
+        ProfileManager profileManager = new DefaultProfileManager( ctx );
 
         profileManager.addProfile( notActivated );
         profileManager.addProfile( defaultActivated );
 
-        List active = profileManager.getActiveProfiles( null );
+        List active = profileManager.getActiveProfiles();
 
         assertNotNull( active );
         assertEquals( 1, active.size() );
@@ -104,17 +103,18 @@
         Properties props = System.getProperties();
         ProfileActivationContext ctx = new ProfileActivationContext( props, false );
 
-        ProfileManager profileManager = new DefaultProfileManager( getContainer(), ctx );
+        ProfileManager profileManager = new DefaultProfileManager( ctx );
 
         profileManager.addProfile( syspropActivated );
         profileManager.addProfile( defaultActivated );
 
-        List active = profileManager.getActiveProfiles( null );
+        List active = profileManager.getActiveProfiles();
 
         assertNotNull( active );
         assertEquals( 1, active.size() );
         assertEquals( "syspropActivated", ( (Profile) active.get( 0 ) ).getId() );
     }
+    
 
     public void testShouldNotActivateReversalOfPresentSystemProperty()
         throws Exception
@@ -134,11 +134,11 @@
         Properties props = System.getProperties();
         ProfileActivationContext ctx = new ProfileActivationContext( props, false );
 
-        ProfileManager profileManager = new DefaultProfileManager( getContainer(), ctx );
+        ProfileManager profileManager = new DefaultProfileManager( ctx );
 
         profileManager.addProfile( syspropActivated );
 
-        List active = profileManager.getActiveProfiles( null );
+        List active = profileManager.getActiveProfiles();
 
         assertNotNull( active );
         assertEquals( 0, active.size() );
@@ -162,13 +162,13 @@
         Properties props = System.getProperties();
         ProfileActivationContext ctx = new ProfileActivationContext( props, false );
 
-        ProfileManager profileManager = new DefaultProfileManager( getContainer(), ctx );
+        ProfileManager profileManager = new DefaultProfileManager( ctx );
 
         profileManager.addProfile( syspropActivated );
 
         ctx.setActive( "syspropActivated" );
 
-        List active = profileManager.getActiveProfiles( null );
+        List active = profileManager.getActiveProfiles();
 
         assertNotNull( active );
         assertEquals( 1, active.size() );
@@ -193,18 +193,18 @@
         Properties props = System.getProperties();
         ProfileActivationContext ctx = new ProfileActivationContext( props, false );
 
-        ProfileManager profileManager = new DefaultProfileManager( getContainer(), ctx );
+        ProfileManager profileManager = new DefaultProfileManager( ctx );
 
         profileManager.addProfile( syspropActivated );
 
         ctx.setInactive( "syspropActivated" );
 
-        List active = profileManager.getActiveProfiles( null );
+        List active = profileManager.getActiveProfiles();
 
         assertNotNull( active );
         assertEquals( 0, active.size() );
     }
-
+/*
     public void testOsActivationProfile()
         throws Exception
     {
@@ -233,5 +233,6 @@
         assertNotNull( active );
         assertEquals( 1, active.size() );
     }
+    */
 
 }

Modified: maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java?rev=767707&r1=767706&r2=767707&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java (original)
+++ maven/components/branches/MNG-2766/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java Wed Apr 22 23:04:06 2009
@@ -135,7 +135,7 @@
 
         ProjectBuilderConfiguration pbc = new DefaultProjectBuilderConfiguration();
         pbc.setLocalRepository( getLocalRepository() );
-        pbc.setGlobalProfileManager( new DefaultProfileManager( getContainer(), ctx ) );
+        pbc.setGlobalProfileManager( new DefaultProfileManager( ctx ) );
 
         return projectBuilder.build( pom, pbc );
     }