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 ) );
+    }
+
 }


Reply via email to