You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/02/18 21:47:43 UTC

svn commit: r745642 - in /maven/components/trunk: maven-mercury/src/main/java/org/apache/maven/mercury/ maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ maven-project-builder/src/test/java/org/apache/maven/project/builder/p...

Author: bentmann
Date: Wed Feb 18 20:47:42 2009
New Revision: 745642

URL: http://svn.apache.org/viewvc?rev=745642&view=rev
Log:
o Fixed regressions regarding profile de-/activation

Modified:
    maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java
    maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java

Modified: maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java (original)
+++ maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java Wed Feb 18 20:47:42 2009
@@ -30,7 +30,6 @@
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.project.builder.ArtifactModelContainerFactory;
 import org.apache.maven.project.builder.ExclusionModelContainerFactory;
-import org.apache.maven.project.builder.IdModelContainerFactory;
 import org.apache.maven.project.builder.PomTransformer;
 import org.apache.maven.project.builder.ProjectUri;
 import org.apache.maven.project.builder.profile.ProfileContext;
@@ -125,7 +124,7 @@
     {
         ModelDataSource dataSource = new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
 
-        return new ProfileContext( dataSource, null, properties ).getActiveProfiles();
+        return new ProfileContext( dataSource, null, null, properties ).getActiveProfiles();
     }
 
     public ArtifactBasicMetadata getParentMetadata()

Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ProfileContext.java Wed Feb 18 20:47:42 2009
@@ -14,37 +14,64 @@
 
     private Collection<String> activeProfileIds;
 
-    List<ActiveProfileMatcher> matchers  = Collections.unmodifiableList( Arrays.asList(new ByDefaultMatcher(),
+    private Collection<String> inactiveProfileIds;
+
+    private ActiveProfileMatcher defaultMatcher = new ByDefaultMatcher();
+
+    private List<ActiveProfileMatcher> matchers  = Collections.unmodifiableList( Arrays.asList(
             new FileMatcher(), new JdkMatcher(), new OperatingSystemMatcher(), new PropertyMatcher()
          ) );
 
-    public ProfileContext(ModelDataSource modelDataSource, Collection<String> activeProfileIds,
-                          List<InterpolatorProperty> properties) {
+    public ProfileContext( ModelDataSource modelDataSource, Collection<String> activeProfileIds,
+                           Collection<String> inactiveProfileIds, List<InterpolatorProperty> properties )
+    {
         this.modelDataSource = modelDataSource;
-        this.properties = new ArrayList<InterpolatorProperty>(properties);
-        this.activeProfileIds = (activeProfileIds != null) ? activeProfileIds : new ArrayList<String>();
+        this.properties = new ArrayList<InterpolatorProperty>( properties );
+        this.activeProfileIds = ( activeProfileIds != null ) ? activeProfileIds : new ArrayList<String>();
+        this.inactiveProfileIds = ( inactiveProfileIds != null ) ? inactiveProfileIds : new ArrayList<String>();
     }
 
-    public Collection<ModelContainer> getActiveProfiles() throws DataSourceException {
+    public Collection<ModelContainer> getActiveProfiles()
+        throws DataSourceException
+    {
         List<ModelContainer> matchedContainers = new ArrayList<ModelContainer>();
+        List<ModelContainer> defaultContainers = new ArrayList<ModelContainer>();
 
-        List<ModelContainer> modelContainers  = modelDataSource.queryFor(ProjectUri.Profiles.Profile.xUri);
-        for(ModelContainer mc : modelContainers) {
-            for(ActiveProfileMatcher matcher : matchers) {
-                if(matcher.isMatch(mc, properties)) {
-                    matchedContainers.add(mc);
-                    continue;
-                }
-            }
+        List<ModelContainer> modelContainers = modelDataSource.queryFor( ProjectUri.Profiles.Profile.xUri );
+        for ( ModelContainer mc : modelContainers )
+        {
+            String profileId = getProfileId( mc.getProperties() );
 
-            String profileId = getProfileId(mc.getProperties());
-            if(profileId != null && activeProfileIds.contains(profileId))
+            if ( !inactiveProfileIds.contains( profileId ) )
             {
-                matchedContainers.add(mc);
+                if ( activeProfileIds.contains( profileId ) )
+                {
+                    matchedContainers.add( mc );
+                }
+                else if ( defaultMatcher.isMatch( mc, properties ) )
+                {
+                    defaultContainers.add( mc );
+                }
+                else
+                {
+                    for ( ActiveProfileMatcher matcher : matchers )
+                    {
+                        if ( matcher.isMatch( mc, properties ) )
+                        {
+                            matchedContainers.add( mc );
+                            break;
+                        }
+                    }
+                }
             }
         }
 
-        return matchedContainers;       
+        if ( matchedContainers.isEmpty() )
+        {
+            matchedContainers = defaultContainers;
+        }
+
+        return matchedContainers;
     }
 
     private String getProfileId(List<ModelProperty> modelProperties)

Modified: maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java (original)
+++ maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/profile/ProfileContextTest.java Wed Feb 18 20:47:42 2009
@@ -3,14 +3,14 @@
 import org.apache.maven.project.builder.profile.ProfileContext;
 import org.apache.maven.project.builder.PomTransformer;
 import org.apache.maven.project.builder.ProjectUri;
-import org.apache.maven.project.builder.ArtifactModelContainerFactory;
-import org.apache.maven.project.builder.IdModelContainerFactory;
 import org.apache.maven.shared.model.DataSourceException;
 import org.apache.maven.shared.model.InterpolatorProperty;
 import org.apache.maven.shared.model.ModelContainer;
 import org.apache.maven.shared.model.ModelProperty;
 import org.apache.maven.shared.model.impl.DefaultModelDataSource;
-import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -19,7 +19,7 @@
 
 public class ProfileContextTest {
 
-    @org.junit.Test
+    @Test
     public void getActiveProfiles() throws DataSourceException {
         List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
         modelProperties.add(new ModelProperty(ProjectUri.xUri, null));
@@ -35,7 +35,7 @@
         List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
         interpolatorProperties.add(new InterpolatorProperty( "${foo}", "bar"));
 
-        ProfileContext ctx = new ProfileContext(dataSource, null, interpolatorProperties);
+        ProfileContext ctx = new ProfileContext(dataSource, null, null, interpolatorProperties);
 
         Collection<ModelContainer> profiles = ctx.getActiveProfiles();
 
@@ -43,7 +43,7 @@
 
     }
 
-    @org.junit.Test
+    @Test
     public void getActiveProfilesById() throws DataSourceException {
         List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
         modelProperties.add(new ModelProperty(ProjectUri.xUri, null));
@@ -55,11 +55,75 @@
 
         List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
 
-        ProfileContext ctx = new ProfileContext(dataSource, Arrays.asList("test"), interpolatorProperties);
+        ProfileContext ctx = new ProfileContext(dataSource, Arrays.asList("test"), null, interpolatorProperties);
 
         Collection<ModelContainer> profiles = ctx.getActiveProfiles();
 
         assertTrue(profiles.size() == 1);
 
     }
+
+    @Test
+    public void getActiveByDefaultProfilesOnlyActivatedIfNoOtherPomProfilesAreActive()
+        throws DataSourceException
+    {
+        List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
+        modelProperties.add( new ModelProperty( ProjectUri.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.id, "default" ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.activeByDefault, "true" ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.id, "explicit" ) );
+
+        DefaultModelDataSource dataSource =
+            new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
+
+        List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+
+        ProfileContext ctx = new ProfileContext( dataSource, Arrays.asList( "explicit" ), null, interpolatorProperties );
+
+        Collection<ModelContainer> profiles = ctx.getActiveProfiles();
+
+        assertEquals( 1, profiles.size() );
+        assertProperty( profiles.iterator().next().getProperties(), ProjectUri.Profiles.Profile.id, "explicit" );
+    }
+
+    @Test
+    public void getDeactivateProfiles()
+        throws DataSourceException
+    {
+        List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
+        modelProperties.add( new ModelProperty( ProjectUri.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.id, "default" ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.xUri, null ) );
+        modelProperties.add( new ModelProperty( ProjectUri.Profiles.Profile.Activation.activeByDefault, "true" ) );
+
+        DefaultModelDataSource dataSource =
+            new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
+
+        List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+
+        ProfileContext ctx = new ProfileContext( dataSource, null, Arrays.asList( "default" ), interpolatorProperties );
+
+        Collection<ModelContainer> profiles = ctx.getActiveProfiles();
+
+        assertEquals( 0, profiles.size() );
+    }
+
+    private void assertProperty( Collection<ModelProperty> properties, String uri, String value )
+    {
+        for ( ModelProperty property : properties )
+        {
+            if ( uri.equals( property.getUri() ) && value.equals( property.getValue() ) )
+            {
+                return;
+            }
+        }
+        fail( "missing model property " + uri + " = " + value );
+    }
+
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java Wed Feb 18 20:47:42 2009
@@ -181,6 +181,7 @@
         return getActiveProfiles( null );
     }
 
+    // TODO: Portions of this logic are duplicated in o.a.m.p.b.p.ProfileContext, something is wrong here
     public List getActiveProfiles( Model model )
         throws ProfileActivationException
     {

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=745642&r1=745641&r2=745642&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Wed Feb 18 20:47:42 2009
@@ -26,14 +26,12 @@
 import java.util.*;
 
 import org.apache.maven.MavenTools;
-import org.apache.maven.profiles.activation.ProfileActivationContext;
 import org.apache.maven.mercury.PomProcessor;
 import org.apache.maven.mercury.PomProcessorException;
 import org.apache.maven.mercury.MavenDomainModel;
 import org.apache.maven.mercury.MavenDomainModelFactory;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
-import org.apache.maven.mercury.builder.api.DependencyProcessorException;
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
@@ -48,7 +46,6 @@
 import org.apache.maven.project.builder.*;
 import org.apache.maven.project.builder.ProjectUri;
 import org.apache.maven.project.builder.profile.ProfileContext;
-import org.apache.maven.project.builder.profile.ProfileUri;
 import org.apache.maven.shared.model.*;
 import org.apache.maven.shared.model.impl.DefaultModelDataSource;
 import org.codehaus.plexus.component.annotations.Component;
@@ -166,13 +163,13 @@
                                              PomArtifactResolver resolver )
         throws IOException    
     {
-        return buildModel( pom, null, interpolatorProperties, null, resolver );
+        return buildModel( pom, null, interpolatorProperties, null, null, resolver );
     }    
     
     private PomClassicDomainModel buildModel( File pom,
                                              List<Model> mixins,
                                              Collection<InterpolatorProperty> interpolatorProperties,
-                                             Collection<String> activeProfileIds,
+                                             Collection<String> activeProfileIds, Collection<String> inactiveProfileIds,
                                              PomArtifactResolver resolver ) 
         throws IOException    
     {
@@ -201,6 +198,10 @@
         {
             activeProfileIds = new ArrayList<String>();
         }
+        if ( inactiveProfileIds == null )
+        {
+            inactiveProfileIds = new ArrayList<String>();
+        }
 
         List<InterpolatorProperty> properties;
         if ( interpolatorProperties == null )
@@ -219,7 +220,7 @@
 
         //Process Profile on most specialized child model
         ProfileContext profileContext = new ProfileContext(new DefaultModelDataSource(domainModel.getModelProperties(),
-                PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, properties);
+                PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, inactiveProfileIds, properties);
 
         Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
 
@@ -246,11 +247,15 @@
             List<DomainModel> mavenParents;
             if ( isParentLocal( domainModel.getModel().getParent(), pom.getParentFile() ) )
             {
-                mavenParents = getDomainModelParentsFromLocalPath( domainModel, resolver, pom.getParentFile(), properties, activeProfileIds );
+                mavenParents =
+                    getDomainModelParentsFromLocalPath( domainModel, resolver, pom.getParentFile(), properties,
+                                                        activeProfileIds, inactiveProfileIds );
             }
             else
             {
-                mavenParents = getDomainModelParentsFromRepository( domainModel, resolver, properties, activeProfileIds );
+                mavenParents =
+                    getDomainModelParentsFromRepository( domainModel, resolver, properties, activeProfileIds,
+                                                         inactiveProfileIds );
             }
             
             if ( mavenParents.size() > 0 )
@@ -295,16 +300,20 @@
         throws IOException
     {
 
-       List<String> profileIds = (projectBuilderConfiguration != null &&
+       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, 
                                                         mixins, 
                                                         interpolatorProperties,
-                                                        profileIds,
+                                                        activeProfileIds, inactiveProfileIds,
                                                         resolver ); 
         
         try
@@ -354,7 +363,8 @@
     private List<DomainModel> getDomainModelParentsFromRepository( PomClassicDomainModel domainModel,
                                                                    PomArtifactResolver artifactResolver,
                                                                    List<InterpolatorProperty> properties,
-                                                                   Collection<String> activeProfileIds)
+                                                                   Collection<String> activeProfileIds,
+                                                                   Collection<String> inactiveProfileIds )
         throws IOException
     {
         List<DomainModel> domainModels = new ArrayList<DomainModel>();
@@ -383,7 +393,7 @@
 
         //Process Profiles
         ProfileContext profileContext = new ProfileContext(new DefaultModelDataSource(parentDomainModel.getModelProperties(),
-                PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, properties);
+                PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, inactiveProfileIds, properties);
         Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
 
         for(ModelContainer mc : profileContainers)
@@ -403,7 +413,8 @@
             domainModels.add(new PomClassicDomainModel(transformed));
         }        
 
-        domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver, properties, activeProfileIds ) );
+        domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver, properties,
+                                                                  activeProfileIds, inactiveProfileIds ) );
         return domainModels;
     }
 
@@ -420,7 +431,8 @@
                                                                   PomArtifactResolver artifactResolver,
                                                                   File projectDirectory,
                                                                   List<InterpolatorProperty> properties,
-                                                                  Collection<String> activeProfileIds)
+                                                                  Collection<String> activeProfileIds,
+                                                                  Collection<String> inactiveProfileIds )
         throws IOException
     {
         List<DomainModel> domainModels = new ArrayList<DomainModel>();
@@ -450,7 +462,7 @@
 
         //Process Profiles
         ProfileContext profileContext = new ProfileContext(new DefaultModelDataSource(parentDomainModel.getModelProperties(),
-                PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, properties);
+                PomTransformer.MODEL_CONTAINER_FACTORIES), activeProfileIds, inactiveProfileIds, properties);
         Collection<ModelContainer> profileContainers = profileContext.getActiveProfiles();
 
         for(ModelContainer mc : profileContainers)
@@ -475,7 +487,9 @@
                     + parentDomainModel.getId() + ", Child ID = " + domainModel.getId() + ", Expected Parent ID = "
                     + domainModel.getModel().getParent().getId() );
             
-            List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, artifactResolver, properties, activeProfileIds );
+            List<DomainModel> parentDomainModels =
+                getDomainModelParentsFromRepository( domainModel, artifactResolver, properties, activeProfileIds,
+                                                     inactiveProfileIds );
             
             if(parentDomainModels.size() == 0)
             {
@@ -493,11 +507,14 @@
             if ( isParentLocal( parentDomainModel.getModel().getParent(), parentFile.getParentFile() ) )
             {
                 domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, artifactResolver,
-                                                                         parentFile.getParentFile(), properties, activeProfileIds ) );
+                                                                         parentFile.getParentFile(), properties,
+                                                                         activeProfileIds, inactiveProfileIds ) );
             }
             else
             {
-                domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver, properties, activeProfileIds ) );
+                domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver,
+                                                                          properties, activeProfileIds,
+                                                                          inactiveProfileIds ) );
             }
         }