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:[EMAIL PROTECTED]">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()
{