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 2008/11/21 07:11:22 UTC

svn commit: r719494 - /maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java

Author: sisbell
Date: Thu Nov 20 22:11:22 2008
New Revision: 719494

URL: http://svn.apache.org/viewvc?rev=719494&view=rev
Log:
More syncs between PomClassicTransformer and PomTransformer

Modified:
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.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=719494&r1=719493&r2=719494&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 Nov 20 22:11:22 2008
@@ -219,6 +219,7 @@
             }
         }
         props.removeAll( removeProperties );
+
         for(ModelEventListener listener : eventListeners)
         {
             ModelDataSource ds = new DefaultModelDataSource();
@@ -245,9 +246,11 @@
 
         List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
         List<String> projectNames = new ArrayList<String>();
-        StringBuffer scmUrl = new StringBuffer();
-        StringBuffer scmConnectionUrl = new StringBuffer();
-        StringBuffer scmDeveloperUrl = new StringBuffer();
+        StringBuilder projectUrl = new StringBuilder( 128 );
+        StringBuilder siteUrl = new StringBuilder( 128 );
+        StringBuilder scmUrl = new StringBuilder( 128 );
+        StringBuilder scmConnectionUrl = new StringBuilder( 128 );
+        StringBuilder scmDeveloperUrl = new StringBuilder( 128 );
 
         boolean containsBuildResources = false;
         boolean containsTestResources = false;
@@ -352,55 +355,27 @@
                 tmp.removeAll( removeProperties );
             }
 
-            //SCM Rule
-            ModelProperty scmUrlProperty = getPropertyFor( ProjectUri.Scm.url, tmp );
-            if ( scmUrl.length() == 0 && scmUrlProperty != null )
-            {
-                scmUrl.append( scmUrlProperty.getResolvedValue() );
-                for ( String projectName : projectNames )
-                {
-                    scmUrl.append( "/" ).append( projectName );
-                }
-                int index = tmp.indexOf( scmUrlProperty );
-                tmp.remove( index );
-                tmp.add( index, new ModelProperty( ProjectUri.Scm.url, scmUrl.toString() ) );
-            }
-
-            //SCM Connection Rule
-            scmUrlProperty = getPropertyFor( ProjectUri.Scm.connection, tmp );
-            if ( scmConnectionUrl.length() == 0 && scmUrlProperty != null )
-            {
-                scmConnectionUrl.append( scmUrlProperty.getResolvedValue() );
-                for ( String projectName : projectNames )
-                {
-                    scmConnectionUrl.append( "/" ).append( projectName );
-                }
-                int index = tmp.indexOf( scmUrlProperty );
-                tmp.remove( index );
-                tmp.add( index, new ModelProperty( ProjectUri.Scm.connection, scmConnectionUrl.toString() ) );
-            }
-            //SCM Developer Rule
-            scmUrlProperty = getPropertyFor( ProjectUri.Scm.developerConnection, tmp );
-            if ( scmDeveloperUrl.length() == 0 && scmUrlProperty != null )
-            {
-                scmDeveloperUrl.append( scmUrlProperty.getResolvedValue() );
-                for ( String projectName : projectNames )
-                {
-                    scmDeveloperUrl.append( "/" ).append( projectName );
-                }
-                int index = tmp.indexOf( scmUrlProperty );
-                tmp.remove( index );
-                tmp.add( index, new ModelProperty( ProjectUri.Scm.developerConnection, scmDeveloperUrl.toString() ) );
-            }
+            // Project URL Rule
+            adjustUrl( projectUrl, tmp, ProjectUri.url, projectNames );
+            // Site Rule
+            adjustUrl( siteUrl, tmp, ProjectUri.DistributionManagement.Site.url, projectNames );
+            // SCM Rule
+            adjustUrl( scmUrl, tmp, ProjectUri.Scm.url, projectNames );
+            // SCM Connection Rule
+            adjustUrl( scmConnectionUrl, tmp, ProjectUri.Scm.connection, projectNames );
+            // SCM Developer Rule
+            adjustUrl( scmDeveloperUrl, tmp, ProjectUri.Scm.developerConnection, projectNames );
 
             //Project Name Inheritance Rule
             //Packaging Inheritance Rule
             //Profiles not inherited rule
+            //parent.relativePath not inherited rule
             for ( ModelProperty mp : tmp )
             {
                 String uri = mp.getUri();
                 if ( domainModels.indexOf( domainModel ) > 0 && ( uri.equals( ProjectUri.name ) ||
-                    uri.equals( ProjectUri.packaging ) || uri.startsWith( ProjectUri.Profiles.xUri ) ) )
+                    uri.equals( ProjectUri.packaging ) || uri.startsWith( ProjectUri.Profiles.xUri ) )
+                        || uri.startsWith( ProjectUri.Parent.relativePath ))
                 {
                     clearedProperties.add( mp );
                 }
@@ -460,9 +435,61 @@
             modelProperties.removeAll( clearedProperties );
         }
 
+        //Rule: Build plugin config overrides reporting plugin config
+        ModelDataSource source = new DefaultModelDataSource();
+        source.init( modelProperties, Arrays.asList( new ArtifactModelContainerFactory(), new IdModelContainerFactory() ) );
+
+        List<ModelContainer> reportContainers = source.queryFor( ProjectUri.Reporting.Plugins.Plugin.xUri );
+        for ( ModelContainer pluginContainer : source.queryFor( ProjectUri.Build.Plugins.Plugin.xUri ) )
+        {
+            ModelContainer transformedReportContainer = new ArtifactModelContainerFactory().create(
+                    transformPlugin( pluginContainer.getProperties() ) );
+
+            for(ModelContainer reportContainer : reportContainers) {
+                ModelContainerAction action = transformedReportContainer.containerAction( reportContainer );
+                if ( action.equals( ModelContainerAction.JOIN ) )
+                {
+                    source.join( transformedReportContainer, reportContainer );
+                    break;
+                }
+            }
+        }
+
+        modelProperties = source.getModelProperties();
         return modelProperties;
     }
 
+    /**
+     * Adjusts an inherited URL to compensate for a child's relation/distance to the parent that defines the URL.
+     *
+     * @param url The buffer for the adjusted URL, must not be {@code null}.
+     * @param properties The model properties to update, must not be {@code null}.
+     * @param uri The URI of the model property defining the URL to adjust, must not be {@code null}.
+     * @param ids The artifact identifiers of the parent projects, starting with the least significant parent, must not
+     *            be {@code null}.
+     */
+    private void adjustUrl( StringBuilder url, List<ModelProperty> properties, String uri, List<String> ids )
+    {
+        if ( url.length() == 0 )
+        {
+            ModelProperty property = getPropertyFor( uri, properties );
+            if ( property != null )
+            {
+                url.append( property.getResolvedValue() );
+                for ( String id : ids )
+                {
+                    if ( url.length() > 0 && url.charAt( url.length() - 1 ) != '/' )
+                    {
+                        url.append( '/' );
+                    }
+                    url.append( id );
+                }
+                int index = properties.indexOf( property );
+                properties.set( index, new ModelProperty( uri, url.toString() ) );
+            }
+        }
+    }
+
     public void interpolateModelProperties(List<ModelProperty> modelProperties,
                                            List<InterpolatorProperty> interpolatorProperties,
                                            DomainModel domainModel)
@@ -632,7 +659,7 @@
         return transformedProperties;
     }
 
-    public static List<ModelProperty> transformPluginManagement( List<ModelProperty> modelProperties )
+    private static List<ModelProperty> transformPluginManagement( List<ModelProperty> modelProperties )
     {
         List<ModelProperty> transformedProperties = new ArrayList<ModelProperty>();
         for ( ModelProperty mp : modelProperties )
@@ -646,5 +673,27 @@
         }
         return transformedProperties;
     }
+
+    private static List<ModelProperty> transformPlugin( List<ModelProperty> modelProperties )
+    {
+        List<ModelProperty> transformedProperties = new ArrayList<ModelProperty>();
+        for ( ModelProperty mp : modelProperties )
+        {
+            if ( mp.getUri().startsWith( ProjectUri.Build.Plugins.xUri ) )
+            {   if(mp.getUri().startsWith(ProjectUri.Build.Plugins.Plugin.configuration)
+                    || mp.getUri().equals( ProjectUri.Build.Plugins.Plugin.groupId)
+                    || mp.getUri().equals( ProjectUri.Build.Plugins.Plugin.artifactId)
+                    || mp.getUri().equals( ProjectUri.Build.Plugins.Plugin.version)
+                    || mp.getUri().equals( ProjectUri.Build.Plugins.Plugin.xUri ) )
+                {
+                transformedProperties.add( new ModelProperty(
+                    mp.getUri().replace( ProjectUri.Build.Plugins.xUri, ProjectUri.Reporting.Plugins.xUri ),
+                    mp.getResolvedValue() ) );
+                }
+
+            }
+        }
+        return transformedProperties;
+    }
 }