Author: rfscholte
Date: Sun Jul 7 19:02:39 2013
New Revision: 1500505
URL: http://svn.apache.org/r1500505
Log:
Add getSharedFolder(File,File), which will be used to calculate the
topLevelFolder of a multimodule project
Modified:
maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java
maven/shared/trunk/maven-project-utils/src/test/java/org/apache/maven/shared/project/utils/ProjectUtilsTest.java
Modified:
maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java
URL:
http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java?rev=1500505&r1=1500504&r2=1500505&view=diff
==============================================================================
---
maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java
(original)
+++
maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java
Sun Jul 7 19:02:39 2013
@@ -8,6 +8,7 @@ import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+import java.util.Stack;
import org.apache.maven.model.Model;
import org.apache.maven.model.Profile;
@@ -194,4 +195,41 @@ public final class ProjectUtils
}
return Collections.unmodifiableMap( modules );
}
+
+ // Don't make this method public, it has nothing to do with a MavenProject.
+ // If required on more places, create a separate Utils-class
+ protected static final File getSharedFolder( File lhs, File rhs )
+ {
+ File sharedFolder = null;
+
+ Stack<File> lhsStack = new Stack<File>();
+
+ File lhsAncestor = lhs;
+
+ while ( lhsAncestor != null )
+ {
+ lhsAncestor = lhsStack.push( lhsAncestor ).getParentFile();
+ }
+
+ Stack<File> rhsStack = new Stack<File>();
+
+ File rhsAncestor = rhs;
+
+ while ( rhsAncestor != null )
+ {
+ rhsAncestor = rhsStack.push( rhsAncestor ).getParentFile();
+ }
+
+ while ( !lhsStack.isEmpty() && !rhsStack.isEmpty() )
+ {
+ File nextFile = lhsStack.pop();
+
+ if( nextFile.isDirectory() && nextFile.equals( rhsStack.pop() ) )
+ {
+ sharedFolder = nextFile;
+ }
+ }
+
+ return sharedFolder;
+ }
}
Modified:
maven/shared/trunk/maven-project-utils/src/test/java/org/apache/maven/shared/project/utils/ProjectUtilsTest.java
URL:
http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/test/java/org/apache/maven/shared/project/utils/ProjectUtilsTest.java?rev=1500505&r1=1500504&r2=1500505&view=diff
==============================================================================
---
maven/shared/trunk/maven-project-utils/src/test/java/org/apache/maven/shared/project/utils/ProjectUtilsTest.java
(original)
+++
maven/shared/trunk/maven-project-utils/src/test/java/org/apache/maven/shared/project/utils/ProjectUtilsTest.java
Sun Jul 7 19:02:39 2013
@@ -1,7 +1,10 @@
package org.apache.maven.shared.project.utils;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
+import java.io.File;
+
import org.junit.Test;
/*
@@ -25,6 +28,7 @@ import org.junit.Test;
public class ProjectUtilsTest
{
+ private static final File ROOT_FOLDER = new File( "." );
@Test
public void getRootProjectForNull()
@@ -32,4 +36,86 @@ public class ProjectUtilsTest
assertNull( ProjectUtils.getRootProject( null ) );
}
+ @Test
+ public void getSharedFolderNullDirectories()
+ throws Exception
+ {
+ assertNull( ProjectUtils.getSharedFolder( null, null ) );
+ }
+
+ @Test
+ public void getSharedFolderNullLeftFolder()
+ throws Exception
+ {
+ assertNull( ProjectUtils.getSharedFolder( null, ROOT_FOLDER ) );
+ }
+
+ @Test
+ public void getSharedFolderNullRightFolder()
+ throws Exception
+ {
+ assertNull( ProjectUtils.getSharedFolder( ROOT_FOLDER, null ) );
+ }
+
+
+ @Test
+ public void getSharedFolderSameDirectory()
+ throws Exception
+ {
+ File folder = ROOT_FOLDER;
+
+ assertEquals( folder, ProjectUtils.getSharedFolder( folder, folder ) );
+ }
+
+ @Test
+ public void getSharedFolderSameFile()
+ throws Exception
+ {
+ File pomFile = new File( "pom.xml" );
+
+ assertEquals( pomFile.getParentFile(), ProjectUtils.getSharedFolder(
pomFile, pomFile ) );
+ }
+
+ @Test
+ public void getSharedFolderDeeperLeftFolder()
+ throws Exception
+ {
+ File lhsFolder = new File( ROOT_FOLDER, "src" );
+ File rhsFolder = ROOT_FOLDER;
+
+ assertEquals( rhsFolder, ProjectUtils.getSharedFolder( lhsFolder,
rhsFolder ) );
+ }
+
+ @Test
+ public void getSharedFolderDeeperRightFolder()
+ throws Exception
+ {
+ File lhsFolder = ROOT_FOLDER;
+ File rhsFolder = new File( ROOT_FOLDER, "src" );
+
+ assertEquals( lhsFolder, ProjectUtils.getSharedFolder( lhsFolder,
rhsFolder ) );
+ }
+
+ @Test
+ public void getSharedFolderFileAndDeeperLeftFolder()
+ throws Exception
+ {
+ File folder = ROOT_FOLDER;
+ File lhsFolder = new File( folder, "src" );
+ File rhsFolder = new File( folder, "pom.xml" );
+
+ assertEquals( folder, ProjectUtils.getSharedFolder( lhsFolder,
rhsFolder ) );
+ }
+
+ @Test
+ public void getSharedFolderFileAndDeeperRightFolder()
+ throws Exception
+ {
+ File folder = ROOT_FOLDER;
+ File lhsFolder = new File( folder, "pom.xml" );
+ File rhsFolder = new File( folder, "src" );
+
+ assertEquals( folder, ProjectUtils.getSharedFolder( lhsFolder,
rhsFolder ) );
+ }
+
}