You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/02/20 22:52:06 UTC

svn commit: r379247 - in /maven/components/trunk/maven-project/src: main/java/org/apache/maven/project/ main/java/org/apache/maven/project/inheritance/ test/java/org/apache/maven/project/inheritance/

Author: jdcasey
Date: Mon Feb 20 13:52:03 2006
New Revision: 379247

URL: http://svn.apache.org/viewcvs?rev=379247&view=rev
Log:
[MNG-2006] Changed the model inheritance assembler to allow the project builder to pass in a child path adjustment String, which is the module path of the child in the parent POM. This can be used to realign the URLs of the child POM in addition to simply appending the child path to the parent.

Modified:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=379247&r1=379246&r2=379247&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon Feb 20 13:52:03 2006
@@ -686,6 +686,8 @@
         project.setOriginalModel( originalModel );
 
         // we don't have to force the collision exception for superModel here, it's already been done in getSuperModel()
+        MavenProject previousProject = superProject;
+        
         Model previous = superProject.getModel();
 
         for ( Iterator i = lineage.iterator(); i.hasNext(); )
@@ -693,10 +695,22 @@
             MavenProject currentProject = (MavenProject) i.next();
 
             Model current = currentProject.getModel();
+            
+            String pathAdjustment = null;
+            
+            try
+            {
+                pathAdjustment = previousProject.getModulePathAdjustment( currentProject );
+            }
+            catch ( IOException e )
+            {
+                getLogger().debug( "Cannot determine whether " + currentProject.getId() + " is a module of " + previousProject.getId() + ". Reason: " + e.getMessage(), e );
+            }
 
-            modelInheritanceAssembler.assembleModelInheritance( current, previous );
+            modelInheritanceAssembler.assembleModelInheritance( current, previous, pathAdjustment );
 
             previous = current;
+            previousProject = currentProject;
         }
 
         // only add the super repository if it wasn't overridden by a profile or project

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=379247&r1=379246&r2=379247&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Mon Feb 20 13:52:03 2006
@@ -135,6 +135,8 @@
     private Build buildOverlay;
 
     private boolean executionRoot;
+    
+    private Map moduleFiles;
 
     public MavenProject( Model model )
     {
@@ -187,6 +189,44 @@
         this.executionRoot = project.executionRoot;
 
         this.artifact = ArtifactUtils.copyArtifact( project.artifact );
+    }
+    
+    public String getModulePathAdjustment( MavenProject moduleProject ) throws IOException
+    {
+        File module = moduleProject.getFile();
+        
+        if ( module == null )
+        {
+            return null;
+        }
+        
+        module = module.getCanonicalFile();
+        
+        if ( moduleFiles == null )
+        {
+            moduleFiles = new HashMap();
+            
+            List modules = getModules();
+            File myFile = getFile();
+            
+            if ( myFile != null )
+            {
+                File myDir = myFile.getCanonicalFile().getParentFile();
+                if ( modules != null )
+                {
+                    for ( Iterator it = modules.iterator(); it.hasNext(); )
+                    {
+                        String modulePath = (String) it.next();
+
+                        File moduleFile = new File( myDir, modulePath ).getCanonicalFile();
+
+                        moduleFiles.put( moduleFile, modulePath );
+                    }
+                }
+            }            
+        }
+        
+        return (String) moduleFiles.get( module );
     }
 
     // ----------------------------------------------------------------------

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java?rev=379247&r1=379246&r2=379247&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java Mon Feb 20 13:52:03 2006
@@ -16,6 +16,15 @@
  * limitations under the License.
  */
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
@@ -29,14 +38,6 @@
 import org.apache.maven.project.ModelUtils;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-
 /**
  * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
  * @version $Id: DefaultModelInheritanceAssembler.java,v 1.4 2004/08/23 20:24:54
@@ -48,15 +49,20 @@
 {
     public void copyModel( Model dest, Model source )
     {
-        assembleModelInheritance( dest, source, false );
+        assembleModelInheritance( dest, source, null, false );
+    }
+
+    public void assembleModelInheritance( Model child, Model parent, String childPathAdjustment )
+    {
+        assembleModelInheritance( child, parent, childPathAdjustment, true );
     }
 
     public void assembleModelInheritance( Model child, Model parent )
     {
-        assembleModelInheritance( child, parent, true );
+        assembleModelInheritance( child, parent, null, true );
     }
 
-    private void assembleModelInheritance( Model child, Model parent, boolean appendPaths )
+    private void assembleModelInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
     {
         // cannot inherit from null parent.
         if ( parent == null )
@@ -93,7 +99,7 @@
         {
             if ( parent.getUrl() != null )
             {
-                child.setUrl( appendPath( parent.getUrl(), child.getArtifactId(), appendPaths ) );
+                child.setUrl( appendPath( parent.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
             }
             else
             {
@@ -105,7 +111,7 @@
         // Distribution
         // ----------------------------------------------------------------------
 
-        assembleDistributionInheritence( child, parent, appendPaths );
+        assembleDistributionInheritence( child, parent, childPathAdjustment, appendPaths );
 
         // issueManagement
         if ( child.getIssueManagement() == null )
@@ -126,7 +132,7 @@
         }
 
         // Scm
-        assembleScmInheritance( child, parent, appendPaths );
+        assembleScmInheritance( child, parent, childPathAdjustment, appendPaths );
 
         // ciManagement
         if ( child.getCiManagement() == null )
@@ -399,7 +405,7 @@
         }
     }
 
-    private void assembleScmInheritance( Model child, Model parent, boolean appendPaths )
+    private void assembleScmInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
     {
         if ( parent.getScm() != null )
         {
@@ -416,7 +422,7 @@
 
             if ( StringUtils.isEmpty( childScm.getConnection() ) && !StringUtils.isEmpty( parentScm.getConnection() ) )
             {
-                childScm.setConnection( appendPath( parentScm.getConnection(), child.getArtifactId(), appendPaths ) );
+                childScm.setConnection( appendPath( parentScm.getConnection(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
             }
 
             if ( StringUtils.isEmpty( childScm.getDeveloperConnection() ) &&
@@ -424,17 +430,17 @@
             {
                 childScm
                     .setDeveloperConnection(
-                        appendPath( parentScm.getDeveloperConnection(), child.getArtifactId(), appendPaths ) );
+                        appendPath( parentScm.getDeveloperConnection(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
             }
 
             if ( StringUtils.isEmpty( childScm.getUrl() ) && !StringUtils.isEmpty( parentScm.getUrl() ) )
             {
-                childScm.setUrl( appendPath( parentScm.getUrl(), child.getArtifactId(), appendPaths ) );
+                childScm.setUrl( appendPath( parentScm.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
             }
         }
     }
 
-    private void assembleDistributionInheritence( Model child, Model parent, boolean appendPaths )
+    private void assembleDistributionInheritence( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
     {
         if ( parent.getDistributionManagement() != null )
         {
@@ -465,7 +471,7 @@
 
                     if ( site.getUrl() != null )
                     {
-                        site.setUrl( appendPath( site.getUrl(), child.getArtifactId(), appendPaths ) );
+                        site.setUrl( appendPath( site.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
                     }
                 }
             }
@@ -508,23 +514,78 @@
         }
     }
 
-    private String appendPath( String url, String path, boolean appendPaths )
+    protected String appendPath( String parentPath, String childPath, String pathAdjustment, boolean appendPaths )
     {
+        List pathFragments = new ArrayList();
+        
+        String rootPath = parentPath;
+
+        String protocol = null;
+        int protocolIdx = rootPath.indexOf( "://" );
+        
+        if ( protocolIdx > -1 )
+        {
+            protocol = rootPath.substring( 0, protocolIdx + 3 );
+            rootPath = rootPath.substring( protocolIdx + 3 );
+        }
+        
+        pathFragments.add( rootPath );
+        
         if ( appendPaths )
         {
-            if ( url.endsWith( "/" ) )
+            if ( pathAdjustment != null )
             {
-                return url + path;
+                pathFragments.add( pathAdjustment );
             }
-            else
+            
+            pathFragments.add( childPath );
+        }
+        
+        StringBuffer cleanedPath = new StringBuffer();
+        
+        if ( protocol != null )
+        {
+            cleanedPath.append( protocol );
+        }
+        
+        if ( rootPath.startsWith( "/" ) )
+        {
+            cleanedPath.append( '/' );
+        }
+        
+        String lastToken = null;
+        String currentToken = null;
+        
+        for ( Iterator it = pathFragments.iterator(); it.hasNext(); )
+        {
+            String pathFragment = (String) it.next();
+            
+            StringTokenizer tokens = new StringTokenizer( pathFragment, "/" );
+            
+            while( tokens.hasMoreTokens() )
             {
-                return url + "/" + path;
+                lastToken = currentToken;
+                currentToken = tokens.nextToken();
+                
+                if ( "..".equals( currentToken ) )
+                {
+                    // trim the previous path part off...
+                    cleanedPath.setLength( cleanedPath.length() - ( lastToken.length() + 1 ) );
+                }
+                else if ( !".".equals( currentToken ) )
+                {
+                    // don't worry about /./ self-references.
+                    cleanedPath.append( currentToken ).append( '/' );
+                }
             }
         }
-        else
+        
+        if ( !childPath.endsWith( "/" ) && appendPaths )
         {
-            return url;
+            cleanedPath.setLength( cleanedPath.length() - 1 );
         }
+        
+        return cleanedPath.toString();
     }
 
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java?rev=379247&r1=379246&r2=379247&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java Mon Feb 20 13:52:03 2006
@@ -26,6 +26,8 @@
 {
     String ROLE = ModelInheritanceAssembler.class.getName();
 
+    void assembleModelInheritance( Model child, Model parent, String childPathAdjustment );
+
     void assembleModelInheritance( Model child, Model parent );
 
     void copyModel( Model dest, Model source );

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java?rev=379247&r1=379246&r2=379247&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java Mon Feb 20 13:52:03 2006
@@ -43,6 +43,19 @@
     extends TestCase
 {
     private ModelInheritanceAssembler assembler = new DefaultModelInheritanceAssembler();
+    
+    public void testShouldAppendPathWithChildPathAdjustment()
+    {
+        String parentPath = "http://maven.apache.org/shared/maven-shared-parent";
+        String childPath = "file-management";
+        String pathAdjustment = "..";
+        
+        String result = ((DefaultModelInheritanceAssembler) assembler).appendPath( parentPath, childPath, pathAdjustment, true );
+        
+        System.out.println( "Resulting path is: \'" + result + "\'" );
+        
+        assertEquals( "Append with path adjustment failed.", "http://maven.apache.org/shared/file-management", result );
+    }
 
     public void testShouldOverrideUnitTestExcludesOnly()
     {