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()
*/