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

svn commit: r747993 - in /maven/components/trunk: maven-project-builder/src/main/java/org/apache/maven/project/builder/ maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/ maven-project/src/main/java/org/apache/maven/profiles/...

Author: sisbell
Date: Thu Feb 26 03:14:14 2009
New Revision: 747993

URL: http://svn.apache.org/viewvc?rev=747993&view=rev
Log:
Replaced old profile code with new.

Added:
    maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/
    maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml
Modified:
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java

Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java Thu Feb 26 03:14:14 2009
@@ -227,6 +227,7 @@
 
                 ModelContainerAction action = pluginContainer.containerAction( managementContainer );
 
+                //Join Execution Containers
                 if ( action.equals( ModelContainerAction.JOIN ) || action.equals( ModelContainerAction.DELETE ) )
                 {
                     ModelDataSource pluginDatasource = new DefaultModelDataSource(  pluginContainer.getProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES );

Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java Thu Feb 26 03:14:14 2009
@@ -45,7 +45,16 @@
                     || (key.equals("${os.family}") && property.getUri().equals(ProjectUri.Profiles.Profile.Activation.Os.family))
                     || (key.equals("${os.name}") && property.getUri().equals(ProjectUri.Profiles.Profile.Activation.Os.name)) )
             {
-               return interpolatorProperty.getValue().equals(property.getResolvedValue());
+
+                if(property.getResolvedValue().startsWith("!"))
+                {
+                    return !interpolatorProperty.getValue().equals(property.getResolvedValue());
+                }
+                else
+                {
+                    return interpolatorProperty.getValue().equals(property.getResolvedValue());    
+                }
+
             }
         }
         return true;

Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java Thu Feb 26 03:14:14 2009
@@ -25,10 +25,16 @@
             }
         }
 
-        if(name == null || value == null) {
+        if(name == null )
+        {
             return false;
         }
 
+        if(value == null)
+        {
+            return !name.startsWith("!");
+        }
+
         for(InterpolatorProperty ip : properties) {
             if(ip.getKey().equals("${" + name + "}")) {
                 return ip.getValue().equals(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=747993&r1=747992&r2=747993&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 Thu Feb 26 03:14:14 2009
@@ -23,21 +23,29 @@
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.Parent;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.profiles.activation.DefaultProfileActivationContext;
 import org.apache.maven.profiles.activation.ProfileActivationContext;
 import org.apache.maven.profiles.activation.ProfileActivationException;
-import org.apache.maven.profiles.activation.ProfileActivator;
+import org.apache.maven.shared.model.ModelContainer;
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.ModelMarshaller;
+import org.apache.maven.shared.model.InterpolatorProperty;
+import org.apache.maven.project.builder.factories.IdModelContainerFactory;
+import org.apache.maven.project.builder.ProjectUri;
+import org.apache.maven.project.builder.PomTransformer;
+import org.apache.maven.project.builder.PomInterpolatorTag;
+import org.apache.maven.project.builder.profile.*;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.MutablePlexusContainer;
-import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.xml.pull.XmlSerializer;
+import org.codehaus.plexus.util.xml.pull.MXSerializer;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
+import java.io.*;
+import java.lang.reflect.Method;
+
 
 public class DefaultProfileManager
     implements ProfileManager
@@ -258,49 +266,79 @@
         }
     }
 
+    private static List<ActiveProfileMatcher> matchers = Arrays.asList(new FileMatcher(),
+        new JdkMatcher(), new OperatingSystemMatcher(), new PropertyMatcher());
+
     private boolean isActive( Profile profile, ProfileActivationContext context )
         throws ProfileActivationException
     {
-        List<ProfileActivator> activators = null;
-
+        //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
         {
-            activators = container.lookupList( ProfileActivator.class );
+            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)
+        {
+            throw new ProfileActivationException(e.getMessage(), e);
+        }
+
+        List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+        interpolatorProperties.addAll(InterpolatorProperty.toInterpolatorProperties(
+                context.getExecutionProperties(),
+                PomInterpolatorTag.EXECUTION_PROPERTIES.name()));
 
-            for ( ProfileActivator activator : activators )
-            {
-                if ( activator.canDetermineActivation( profile, context ) )
-                {
-                    if ( activator.isActive( profile, context ) )
-                    {
-                        container.getLogger().debug(
-                            "Profile: " + profile.getId() + " is active. (source: " + profile.getSource() + ")" );
-                        return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new ProfileActivationException( "Cannot retrieve list of profile activators.", e );
-        }
-        finally
+        List<ModelProperty> p;
+        try
+        {                                                                   
+            p = ModelMarshaller.marshallXmlToModelProperties(new ByteArrayInputStream(writer.getBuffer().toString().getBytes()),
+                    ProjectUri.Profiles.Profile.xUri, PomTransformer.URIS);
+        } catch (IOException e) {
+            throw new ProfileActivationException(e.getMessage());
+        }
+        //Serializer adds in extra node, strip it out
+        List<ModelProperty> p2 = new ArrayList<ModelProperty>();
+        for(ModelProperty mp : p)
+        {
+            p2.add(new ModelProperty(mp.getUri().replaceFirst("profile/", ""), mp.getResolvedValue()));
+        }
+        
+        ModelContainer mc = new IdModelContainerFactory(ProjectUri.Profiles.Profile.xUri).create(p2);
+        for(ActiveProfileMatcher matcher : matchers)
         {
-            container.getContext().put( "SystemProperties", null );
-            if ( activators != null )
+            if(matcher.isMatch(mc, interpolatorProperties))
             {
-                try
-                {
-                    container.releaseAll( activators );
-                }
-                catch ( ComponentLifecycleException e )
-                {
-                    container.getLogger().debug( "Error releasing profile activators - ignoring.", e );
-                }
+                return true;
             }
         }
+        return false;
     }
 
     /* (non-Javadoc)
@@ -341,18 +379,6 @@
         return profileActivationContext.getActiveByDefaultProfileIds();
     }
 
-    private static String getVersion( Model model )
-    {
-        Parent parent = model.getParent();
-
-        String version = model.getVersion();
-        if ( ( parent != null ) && ( version == null ) )
-        {
-            version = parent.getVersion();
-        }
-
-        return version;
-    }
 
     public static String getGroupId( Model model )
     {

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java Thu Feb 26 03:14:14 2009
@@ -81,6 +81,19 @@
     }
 
     /**
+     * Will throw exception if url is empty. MNG-4050 
+     *
+     * @throws Exception
+     */
+    /*
+    public void testEmptyUrl()
+        throws Exception
+    {
+        buildPomFromMavenProject( "empty-distMng-repo-url", null );
+    }
+    */
+
+    /**
      * Will throw exception if doesn't find parent(s) in build
      *
      * @throws Exception

Added: maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml?rev=747993&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml Thu Feb 26 03:14:14 2009
@@ -0,0 +1,15 @@
+<project >
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.commons</groupId>
+  <artifactId>commons-parent</artifactId>
+  <packaging>pom</packaging>
+  <version>11</version>
+
+  <distributionManagement>
+    <repository>
+      <id>dummy</id>
+      <name>Dummy to avoid accidental deploys</name>
+      <url />
+    </repository>
+  </distributionManagement>
+</project>