You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by lt...@apache.org on 2011/01/19 10:08:47 UTC

svn commit: r1060720 - /maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java

Author: ltheussl
Date: Wed Jan 19 09:08:46 2011
New Revision: 1060720

URL: http://svn.apache.org/viewvc?rev=1060720&view=rev
Log:
refactor, pull out methods to compare with plexus ParthTool

Modified:
    maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java

Modified: maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java?rev=1060720&r1=1060719&r2=1060720&view=diff
==============================================================================
--- maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java (original)
+++ maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java Wed Jan 19 09:08:46 2011
@@ -272,10 +272,27 @@ public class DefaultSiteTool
         // share the common protocol and domain info and we are left
         // with their URI information
 
+        String relativePath = getRelativeFilePath( fromPath, toPath );
+
+        if ( relativePath == null )
+        {
+            relativePath = to;
+        }
+
+        if ( getLogger().isDebugEnabled() && !relativePath.toString().equals( to ) )
+        {
+            getLogger().debug( "Mapped url: " + to + " to relative path: " + relativePath );
+        }
+
+        return relativePath;
+    }
+
+    private static String getRelativeFilePath( final String oldPath, final String newPath )
+    {
         // normalize the path delimiters
 
-        toPath = new File( toPath ).getPath();
-        fromPath = new File( fromPath ).getPath();
+        String fromPath = new File( oldPath ).getPath();
+        String toPath = new File( newPath ).getPath();
 
         // strip any leading slashes if its a windows path
         if ( toPath.matches( "^\\[a-zA-Z]:" ) )
@@ -288,14 +305,13 @@ public class DefaultSiteTool
         }
 
         // lowercase windows drive letters.
-
-        if ( toPath.startsWith( ":", 1 ) )
+        if ( fromPath.startsWith( ":", 1 ) )
         {
-            toPath = toPath.substring( 0, 1 ).toLowerCase() + toPath.substring( 1 );
+            fromPath = Character.toLowerCase( fromPath.charAt( 0 ) ) + fromPath.substring( 1 );
         }
-        if ( fromPath.startsWith( ":", 1 ) )
+        if ( toPath.startsWith( ":", 1 ) )
         {
-            fromPath = fromPath.substring( 0, 1 ).toLowerCase() + fromPath.substring( 1 );
+            toPath = Character.toLowerCase( toPath.charAt( 0 ) ) + toPath.substring( 1 );
         }
 
         // check for the presence of windows drives. No relative way of
@@ -307,7 +323,7 @@ public class DefaultSiteTool
             // they both have drive path element but they don't match, no
             // relative path
 
-            return to;
+            return null;
         }
 
         if ( ( toPath.startsWith( ":", 1 ) && !fromPath.startsWith( ":", 1 ) )
@@ -317,84 +333,11 @@ public class DefaultSiteTool
             // one has a drive path element and the other doesn't, no relative
             // path.
 
-            return to;
-
-        }
-
-        // use tokenizer to traverse paths and for lazy checking
-        StringTokenizer toTokeniser = new StringTokenizer( toPath, File.separator );
-        StringTokenizer fromTokeniser = new StringTokenizer( fromPath, File.separator );
-
-        int count = 0;
-
-        // walk along the to path looking for divergence from the from path
-        while ( toTokeniser.hasMoreTokens() && fromTokeniser.hasMoreTokens() )
-        {
-            if ( File.separatorChar == '\\' )
-            {
-                if ( !fromTokeniser.nextToken().equalsIgnoreCase( toTokeniser.nextToken() ) )
-                {
-                    break;
-                }
-            }
-            else
-            {
-                if ( !fromTokeniser.nextToken().equals( toTokeniser.nextToken() ) )
-                {
-                    break;
-                }
-            }
-
-            count++;
-        }
-
-        // reinitialize the tokenizers to count positions to retrieve the
-        // gobbled token
-
-        toTokeniser = new StringTokenizer( toPath, File.separator );
-        fromTokeniser = new StringTokenizer( fromPath, File.separator );
-
-        while ( count-- > 0 )
-        {
-            fromTokeniser.nextToken();
-            toTokeniser.nextToken();
-        }
-
-        StringBuilder relativePath = new StringBuilder();
-
-        // add back refs for the rest of from location.
-        while ( fromTokeniser.hasMoreTokens() )
-        {
-            fromTokeniser.nextToken();
-
-            relativePath.append( ".." );
-
-            if ( fromTokeniser.hasMoreTokens() )
-            {
-                relativePath.append( File.separatorChar );
-            }
-        }
-
-        if ( relativePath.length() != 0 && toTokeniser.hasMoreTokens() )
-        {
-            relativePath.append( File.separatorChar );
-        }
-
-        // add fwd fills for whatever's left of to.
-        while ( toTokeniser.hasMoreTokens() )
-        {
-            relativePath.append( toTokeniser.nextToken() );
+            return null;
 
-            if ( toTokeniser.hasMoreTokens() )
-            {
-                relativePath.append( File.separatorChar );
-            }
         }
 
-        if ( getLogger().isDebugEnabled() && !relativePath.toString().equals( to ) )
-        {
-            getLogger().debug( "Mapped url: " + to + " to relative path: " + relativePath );
-        }
+        final String relativePath = buildRelativePath( toPath, fromPath, File.separatorChar );
 
         return relativePath.toString();
     }
@@ -1316,6 +1259,80 @@ public class DefaultSiteTool
         return decoration;
     }
 
+    private static String buildRelativePath( final String toPath,  final String fromPath, final char separatorChar )
+    {
+        // use tokenizer to traverse paths and for lazy checking
+        StringTokenizer toTokeniser = new StringTokenizer( toPath, String.valueOf( separatorChar ) );
+        StringTokenizer fromTokeniser = new StringTokenizer( fromPath, String.valueOf( separatorChar ) );
+
+        int count = 0;
+
+        // walk along the to path looking for divergence from the from path
+        while ( toTokeniser.hasMoreTokens() && fromTokeniser.hasMoreTokens() )
+        {
+            if ( separatorChar == '\\' )
+            {
+                if ( !fromTokeniser.nextToken().equalsIgnoreCase( toTokeniser.nextToken() ) )
+                {
+                    break;
+                }
+            }
+            else
+            {
+                if ( !fromTokeniser.nextToken().equals( toTokeniser.nextToken() ) )
+                {
+                    break;
+                }
+            }
+
+            count++;
+        }
+
+        // reinitialize the tokenizers to count positions to retrieve the
+        // gobbled token
+
+        toTokeniser = new StringTokenizer( toPath, String.valueOf( separatorChar ) );
+        fromTokeniser = new StringTokenizer( fromPath, String.valueOf( separatorChar ) );
+
+        while ( count-- > 0 )
+        {
+            fromTokeniser.nextToken();
+            toTokeniser.nextToken();
+        }
+
+        StringBuilder relativePath = new StringBuilder();
+
+        // add back refs for the rest of from location.
+        while ( fromTokeniser.hasMoreTokens() )
+        {
+            fromTokeniser.nextToken();
+
+            relativePath.append( ".." );
+
+            if ( fromTokeniser.hasMoreTokens() )
+            {
+                relativePath.append( separatorChar );
+            }
+        }
+
+        if ( relativePath.length() != 0 && toTokeniser.hasMoreTokens() )
+        {
+            relativePath.append( separatorChar );
+        }
+
+        // add fwd fills for whatever's left of to.
+        while ( toTokeniser.hasMoreTokens() )
+        {
+            relativePath.append( toTokeniser.nextToken() );
+
+            if ( toTokeniser.hasMoreTokens() )
+            {
+                relativePath.append( separatorChar );
+            }
+        }
+        return relativePath.toString();
+    }
+
     /**
      * @param project not null
      * @param models not null