You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2020/02/19 16:07:17 UTC

[maven-doxia-sitetools] branch uri created (now db76fea)

This is an automated email from the ASF dual-hosted git repository.

elharo pushed a change to branch uri
in repository https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git.


      at db76fea  handle more URI formats

This branch includes the following new commits:

     new db76fea  handle more URI formats

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-doxia-sitetools] 01/01: handle more URI formats

Posted by el...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

elharo pushed a commit to branch uri
in repository https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git

commit db76fea346d57b1dcecd5ee45e354d0e9788c29f
Author: Elliotte Rusty Harold <el...@ibiblio.org>
AuthorDate: Wed Feb 19 11:06:49 2020 -0500

    handle more URI formats
---
 .../apache/maven/doxia/tools/DefaultSiteTool.java  | 44 ++++++++++++++++++--
 .../maven/doxia/tools/DefaultSiteToolTest.java     | 48 ++++++++++++++++++++++
 2 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
index 002402b..eaafa6c 100644
--- a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
+++ b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
@@ -126,7 +126,6 @@ public class DefaultSiteTool
     // Public methods
     // ----------------------------------------------------------------------
 
-    /** {@inheritDoc} */
     public Artifact getSkinArtifactFromRepository( ArtifactRepository localRepository,
                                                    List<ArtifactRepository> remoteArtifactRepositories,
                                                    DecorationModel decoration )
@@ -174,7 +173,6 @@ public class DefaultSiteTool
         return artifact;
     }
 
-    /** {@inheritDoc} */
     public Artifact getDefaultSkinArtifact( ArtifactRepository localRepository,
                                             List<ArtifactRepository> remoteArtifactRepositories )
         throws SiteToolException
@@ -182,11 +180,35 @@ public class DefaultSiteTool
         return getSkinArtifactFromRepository( localRepository, remoteArtifactRepositories, new DecorationModel() );
     }
 
-    /** {@inheritDoc} */
+    /**
+     * This method is not implemented according to the URI specification and has many weird
+     * corner cases where it doesn't do the right thing. Please consider using a better 
+     * implemented method from a different library such as org.apache.http.client.utils.URIUtils#resolve.
+     */
+    @Deprecated
     public String getRelativePath( String to, String from )
     {
         checkNotNull( "to", to );
         checkNotNull( "from", from );
+        
+        if (to.contains(":") && from.contains(":")) {
+	        String toScheme = to.substring(0, to.indexOf( ':' ));
+	        String fromScheme = from.substring( 0, from.indexOf( ':' ) );
+	        if ( !toScheme.equals( fromScheme ) ) 
+	        {
+	        	return to; 
+	        }
+        }
+        else // at least one is not absolute
+        {
+        	return to;
+        }
+        
+        
+        // check for multiple colons; java.net.URL can't handle these
+        if ( colonCount( to ) > 1 || colonCount( from ) > 1 ) {
+        	return to;
+        }
 
         URL toUrl = null;
         URL fromUrl = null;
@@ -207,6 +229,7 @@ public class DefaultSiteTool
             catch ( MalformedURLException e1 )
             {
                 getLogger().warn( "Unable to load a URL for '" + to + "': " + e.getMessage() );
+                return to;
             }
         }
 
@@ -223,6 +246,7 @@ public class DefaultSiteTool
             catch ( MalformedURLException e1 )
             {
                 getLogger().warn( "Unable to load a URL for '" + from + "': " + e.getMessage() );
+                return to;
             }
         }
 
@@ -272,6 +296,18 @@ public class DefaultSiteTool
         return relativePath;
     }
 
+    private static int colonCount( String s )
+    {
+	     int count = 0;
+	     for ( char c : s.toCharArray() ) {
+	    	 if ( c == ':' )
+	    	 {
+	    		 count++;
+	    	 }
+	     }
+	     return count;
+    }
+
     private static String getRelativeFilePath( final String oldPath, final String newPath )
     {
         // normalize the path delimiters
@@ -1496,7 +1532,7 @@ public class DefaultSiteTool
         final Properties properties = new Properties();
         final String corePomProperties = "META-INF/maven/org.apache.maven/maven-core/pom.properties";
         final InputStream in = MavenProject.class.getClassLoader().getResourceAsStream( corePomProperties );
-       try
+        try
         {
             properties.load( in );
         }
diff --git a/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/DefaultSiteToolTest.java b/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/DefaultSiteToolTest.java
index 0d54c5b..f712273 100644
--- a/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/DefaultSiteToolTest.java
+++ b/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/DefaultSiteToolTest.java
@@ -24,11 +24,24 @@ import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
+import org.junit.Before;
+
 /**
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
  */
 public class DefaultSiteToolTest
 {
+	
+    private DefaultSiteTool tool = new DefaultSiteTool();
+    
+    @Before 
+    public void setUp() {
+    	Logger logger =  new ConsoleLogger(Logger.LEVEL_WARN, "tool");
+        tool.enableLogging(logger);
+    }
+	
     /**
      * test getNormalizedPath().
      */
@@ -56,4 +69,39 @@ public class DefaultSiteToolTest
         assertEquals( "file:/Documents and Settings/",
                 DefaultSiteTool.getNormalizedPath( "file://Documents and Settings/" ) );
     }
+
+    @Test
+    public void testGetRelativePath()
+    {
+        assertEquals( "../bar.html", tool.getRelativePath("http://example.com/foo/bar.html", "http://example.com/foo/baz.html"));
+    }
+    
+    @Test
+    public void testGetRelativePath_same()
+    {
+        assertEquals( "", tool.getRelativePath("http://example.com/foo/bar.html", "http://example.com/foo/bar.html"));
+    }
+    
+    @Test
+    public void testGetRelativePath_differentSchemes()
+    {
+        assertEquals( "scp://example.com/foo/bar.html", 
+            tool.getRelativePath("scp://example.com/foo/bar.html", "http://example.com/foo/bar.html"));
+        assertEquals( "file:///tmp/bloop", 
+            tool.getRelativePath("file:///tmp/bloop", "scp://localhost:/tmp/blop"));
+    }
+    
+    @Test
+    public void testGetRelativePath_differentDomains()
+    {
+        assertEquals("https://example.org/bar.html", 
+            tool.getRelativePath( "https://example.org/bar.html", "https://example.com/bar.html"));  
+        assertEquals("dav:https://nexus2.mysite.net:123/nexus/content/sites/site/mysite-child/2.0.0/", 
+            tool.getRelativePath(
+                "dav:https://nexus2.mysite.net:123/nexus/content/sites/site/mysite-child/2.0.0/",
+                "dav:https://nexus1.mysite.net:123/nexus/content/sites/site/mysite-parent/1.0.0/") );
+    }
+
+
+
 }