Author: pete
Date: Sun Jun 26 19:39:02 2011
New Revision: 1139927

URL: http://svn.apache.org/viewvc?rev=1139927&view=rev
Log:
- enable Url class to output absolute urls with toAbsoluteString()
- add more tests for proper parse and string output of urls
- support parsing of urls that contain authentication in form 
scheme://user:password@host

Modified:
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java
    wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java?rev=1139927&r1=1139926&r2=1139927&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java 
(original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java 
Sun Jun 26 19:39:02 2011
@@ -422,31 +422,62 @@ public class UrlTest extends TestCase
                Url url = Url.parse("ftp://myhost:8081";);
                checkUrl(url, "ftp", "myhost", 8081);
                assertFalse(url.isAbsolute());
-       
+               assertEquals("ftp://myhost:8081";, url.toAbsoluteString());
+
                url = Url.parse("gopher://myhost:8081/foo";);
                checkUrl(url, "gopher", "myhost", 8081, "", "foo");
                assertTrue(url.isAbsolute());
+               assertEquals("gopher://myhost:8081/foo";, 
url.toAbsoluteString());
+               
+               url = Url.parse("http://myhost:80/foo";);
+               checkUrl(url, "http", "myhost", 80, "", "foo");
+               assertTrue(url.isAbsolute());
+               assertEquals("http://myhost/foo";, url.toAbsoluteString());
+
+               url = Url.parse("http://myhost:81/foo";);
+               checkUrl(url, "http", "myhost", 81, "", "foo");
+               assertTrue(url.isAbsolute());
+               assertEquals("http://myhost:81/foo";, url.toAbsoluteString());
+
+               url = Url.parse("http://myhost/foo";);
+               checkUrl(url, "http", "myhost", 80, "", "foo");
+               assertTrue(url.isAbsolute());
+               assertEquals("http://myhost/foo";, url.toAbsoluteString());
 
-               url = Url.parse("https://myhost/foo";);
+               url = Url.parse("https://myhost:443/foo";);
                checkUrl(url, "https", "myhost", 443, "", "foo");
                assertTrue(url.isAbsolute());
+               assertEquals("https://myhost/foo";, url.toAbsoluteString());
 
-               url = Url.parse("https://myhost/foo:123";);
+               url = Url.parse("HTTPS://myhost/foo:123");
                checkUrl(url, "https", "myhost", 443, "", "foo:123");
                assertTrue(url.isAbsolute());
+               assertEquals("https://myhost/foo:123";, url.toAbsoluteString());
 
                url = Url.parse("ftp://myhost/foo";);
                checkUrl(url, "ftp", "myhost", 21, "", "foo");
                assertTrue(url.isAbsolute());
+               assertEquals("ftp://myhost/foo";, url.toAbsoluteString());
+
+               url = Url.parse("ftp://myhost:21/foo";);
+               checkUrl(url, "ftp", "myhost", 21, "", "foo");
+               assertTrue(url.isAbsolute());
+               assertEquals("ftp://myhost/foo";, url.toAbsoluteString());
+
+               url = Url.parse("ftp://user:pass@myhost:21/foo";);
+               checkUrl(url, "ftp", "user:pass@myhost", 21, "", "foo");
+               assertTrue(url.isAbsolute());
+               assertEquals("ftp://user:pass@myhost/foo";, 
url.toAbsoluteString());
 
                url = Url.parse("FTp://myhost/foo");
                checkUrl(url, "ftp", "myhost", 21, "", "foo");
                assertTrue(url.isAbsolute());
+               assertEquals("ftp://myhost/foo";, url.toAbsoluteString());
 
                url = Url.parse("unknown://myhost/foo");
                checkUrl(url, "unknown", "myhost", null, "", "foo");
                assertTrue(url.isAbsolute());
-
+               assertEquals("unknown://myhost/foo", url.toAbsoluteString());
        }
 
        private void checkUrl(Url url, String protocol, String host, Integer 
port, String... segments)

Modified: 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java?rev=1139927&r1=1139926&r2=1139927&view=diff
==============================================================================
--- 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java 
(original)
+++ 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java 
Sun Jun 26 19:39:02 2011
@@ -126,7 +126,7 @@ public final class Url implements Serial
        {
                Args.notNull(url, "url");
 
-               Url result = new Url(charset);
+               final Url result = new Url(charset);
 
                // the url object resolved the charset, use that
                charset = result.getCharset();
@@ -135,7 +135,7 @@ public final class Url implements Serial
                final String queryString;
                final String absoluteUrl;
 
-               int queryAt = url.indexOf('?');
+               final int queryAt = url.indexOf('?');
 
                if (queryAt == -1)
                {
@@ -157,11 +157,11 @@ public final class Url implements Serial
                if (protocolAt != -1)
                {
                        result.protocol = absoluteUrl.substring(0, 
protocolAt).toLowerCase(Locale.US);
+                       
                        final String afterProto = 
absoluteUrl.substring(protocolAt + 3);
                        final String hostAndPort;
 
-                       int relativeAt = afterProto.indexOf('/');
-                       
+                       final int relativeAt = afterProto.indexOf('/');
                        
                        if (relativeAt == -1)
                        {
@@ -174,7 +174,7 @@ public final class Url implements Serial
                                hostAndPort = afterProto.substring(0, 
relativeAt);
                        }
 
-                       int portAt = hostAndPort.indexOf(':');
+                       final int portAt = hostAndPort.lastIndexOf(':');
 
                        if (portAt == -1)
                        {
@@ -592,6 +592,47 @@ public final class Url implements Serial
        }
 
        /**
+        * render full representation of url (including protocol, host and 
port) 
+        * into string representation
+        */
+       public String toAbsoluteString()
+       {
+               return toAbsoluteString(getCharset());
+       }
+
+       /**
+        * render full representation of url (including protocol, host and 
port) 
+        * into string representation
+        * 
+        * @param charset
+        * 
+        * @return see toStringRepresentation
+        */
+       public String toAbsoluteString(final Charset charset)
+       {
+               StringBuilder result = new StringBuilder();
+
+               // output scheme://host:port if specified
+               if(protocol != null && Strings.isEmpty(host) == false)
+               {
+                       result.append(protocol);
+                       result.append("://");
+                       result.append(host);
+                       
+                       if(port != null && 
port.equals(getDefaultPortForProtocol(protocol)) == false)
+                       {
+                               result.append(':');
+                               result.append(port);
+                       }
+               }
+               // append relative part
+               result.append(this.toString());
+       
+               // return url string
+               return result.toString();
+       }
+
+       /**
         * @param charset
         * @return see toString()
         */


Reply via email to