You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/02/27 10:44:24 UTC
[2/2] git commit: WICKET-4907 UrlResourceReference generates broken
relative URLs WICKET-4942 Double slash '//' in starting url makes Url.parse
output a relative Url WICKET-4903 relativeUrl's begins with ./
Updated Branches:
refs/heads/master 8d774aead -> 25294f4d9
WICKET-4907 UrlResourceReference generates broken relative URLs
WICKET-4942 Double slash '//' in starting url makes Url.parse output a relative Url
WICKET-4903 relativeUrl's begins with ./
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/25294f4d
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/25294f4d
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/25294f4d
Branch: refs/heads/master
Commit: 25294f4d9e48497b69c586da2cae3b4ba532d751
Parents: 01f32fa
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Feb 27 11:42:30 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Feb 27 11:42:30 2013 +0200
----------------------------------------------------------------------
.../main/java/org/apache/wicket/SystemMapper.java | 1 +
.../apache/wicket/UrlResourceReferenceMapper.java | 71 +++++++++++++++
.../mapper/BasicResourceReferenceMapper.java | 9 +--
.../request/resource/UrlResourceReference.java | 33 +++++++-
.../markup/html/internal/InlineEnclosureTest.java | 7 ++
.../wicket/request/cycle/UrlRendererTest.java | 1 +
.../wicket/request/resource/ResouceBundleTest.java | 2 +-
.../request/resource/UrlResourceReferenceTest.java | 3 +-
.../org/apache/wicket/request/IUrlRenderer.java | 46 ++++++++++
.../org/apache/wicket/request/UrlRenderer.java | 12 +++
10 files changed, 173 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java b/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
index aaba006..c695581 100644
--- a/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
@@ -50,6 +50,7 @@ public class SystemMapper extends CompoundRequestMapper
add(new HomePageMapper(new HomePageProvider(application)));
add(new ResourceReferenceMapper(new PageParametersEncoder(),
new ParentFolderPlaceholderProvider(application), getResourceCachingStrategy()));
+ add(new UrlResourceReferenceMapper());
add(RestartResponseAtInterceptPageException.MAPPER);
add(new BufferedResponseMapper());
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/main/java/org/apache/wicket/UrlResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/UrlResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/UrlResourceReferenceMapper.java
new file mode 100644
index 0000000..d25ff88
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/UrlResourceReferenceMapper.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket;
+
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.IRequestMapper;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.UrlResourceReference;
+import org.apache.wicket.resource.bundles.ResourceBundleReference;
+
+/**
+ * A request mapper that is used to create Url out of UrlResourceReference.
+ * UrlResourceReference works with {@link org.apache.wicket.request.resource.UrlResourceReference.CalculatedUrl} and
+ * thus this mapper should not use {@link org.apache.wicket.SystemMapper.ParentFolderPlaceholderProvider}
+ */
+public class UrlResourceReferenceMapper implements IRequestMapper
+{
+ @Override
+ public Url mapHandler(IRequestHandler requestHandler)
+ {
+ Url url = null;
+ if (requestHandler instanceof ResourceReferenceRequestHandler)
+ {
+ ResourceReferenceRequestHandler resourceReferenceRequestHandler = (ResourceReferenceRequestHandler) requestHandler;
+ ResourceReference resourceReference = resourceReferenceRequestHandler.getResourceReference();
+
+ while (resourceReference instanceof ResourceBundleReference)
+ {
+ // unwrap the bundle to render the url for the actual reference
+ resourceReference = ((ResourceBundleReference)resourceReference).getBundleReference();
+ }
+
+ if (resourceReference instanceof UrlResourceReference)
+ {
+ UrlResourceReference urlResourceReference = (UrlResourceReference) resourceReference;
+ url = urlResourceReference.getUrl();
+ }
+ }
+ return url;
+ }
+
+ @Override
+ public IRequestHandler mapRequest(Request request)
+ {
+ return null;
+ }
+
+ @Override
+ public int getCompatibilityScore(Request request)
+ {
+ return Integer.MIN_VALUE;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
index 02bf367..665dafe 100755
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
@@ -30,7 +30,6 @@ import org.apache.wicket.request.resource.IResource;
import org.apache.wicket.request.resource.MetaInfStaticResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.request.resource.ResourceReferenceRegistry;
-import org.apache.wicket.request.resource.UrlResourceReference;
import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
import org.apache.wicket.request.resource.caching.ResourceUrl;
@@ -169,7 +168,7 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
Url url;
- if (reference instanceof ResourceBundleReference)
+ while (reference instanceof ResourceBundleReference)
{
// unwrap the bundle to render the url for the actual reference
reference = ((ResourceBundleReference)reference).getBundleReference();
@@ -185,12 +184,6 @@ public class BasicResourceReferenceMapper extends AbstractResourceReferenceMappe
}
// otherwise it has to be served by the standard wicket way
}
- else if (reference instanceof UrlResourceReference)
- {
- UrlResourceReference urlReference = (UrlResourceReference)reference;
- url = urlReference.getUrl();
- return url;
- }
if (reference.canBeRegistered())
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
index 4c16c8b..98e76c9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.request.resource;
+import org.apache.wicket.request.IUrlRenderer;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.UrlUtils;
import org.apache.wicket.request.cycle.RequestCycle;
@@ -31,6 +32,30 @@ import org.apache.wicket.util.lang.Args;
public class UrlResourceReference extends ResourceReference
{
/**
+ * An Url that knows how to render itself, so it doesn't need re-calculating in UrlRenderer.
+ * It should be rendered as is.
+ */
+ private static class CalculatedUrl extends Url implements IUrlRenderer
+ {
+ private CalculatedUrl(Url original)
+ {
+ super(original);
+ }
+
+ @Override
+ public String renderFullUrl(Url url, Url baseUrl)
+ {
+ return url.toString(StringMode.FULL);
+ }
+
+ @Override
+ public String renderRelativeUrl(Url url, Url baseUrl)
+ {
+ return url.toString();
+ }
+ }
+
+ /**
* The url to the resource.
*/
private final Url url;
@@ -61,12 +86,16 @@ public class UrlResourceReference extends ResourceReference
*/
public final Url getUrl()
{
- Url _url = url;
+ CalculatedUrl _url;
if (contextRelative)
{
String contextRelative = UrlUtils.rewriteToContextRelative(url.toString(), RequestCycle.get());
- _url = Url.parse(contextRelative, url.getCharset());
+ _url = new CalculatedUrl(Url.parse(contextRelative, url.getCharset()));
+ }
+ else
+ {
+ _url = new CalculatedUrl(url);
}
return _url;
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
index f085672..ed29a70 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
@@ -56,6 +56,13 @@ public class InlineEnclosureTest extends WicketTestCase
executeTest(InlineEnclosurePanelPage.class, "InlineEnclosurePanelPageExpectedResult.html");
}
+ @Test
+ public void inlineEnclosurePageDifferentNamespace() throws Exception
+ {
+ executeTest(InlineEnclosureDifferentNamespacePage.class,
+ "InlineEnclosureDifferentNamespaceExpectedResult.html");
+ }
+
/**
* https://issues.apache.org/jira/browse/WICKET-4520
*
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
index bbb8b26..a11e84a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
@@ -466,4 +466,5 @@ public class UrlRendererTest extends Assert
assertEquals("../../../../a/b;jsessionid=123456", encodedRelativeUrl);
}
+
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java
index ea60618..cb5173c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java
@@ -26,7 +26,7 @@ import org.apache.wicket.resource.bundles.ResourceBundleReference;
import org.junit.Test;
/**
- * Testcases for resource bundles
+ * Test cases for resource bundles
*
* @author papegaaij
*/
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
index fcb884c..62fb31a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
@@ -32,6 +32,7 @@ import org.junit.Test;
*/
public class UrlResourceReferenceTest extends WicketTestCase
{
+ @Test
public void relativeUrl()
{
Url url = Url.parse("some/relative/url");
@@ -70,7 +71,7 @@ public class UrlResourceReferenceTest extends WicketTestCase
tester.getApplication().mountPage("/some/mount/path", TestPage.class);
tester.startPage(new TestPage());
- tester.assertContains("<script type=\"text/javascript\" src=\"../../::/::/some/relative/url\"></script>");
+ tester.assertContains("<script type=\"text/javascript\" src=\"../../some/relative/url\"></script>");
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-request/src/main/java/org/apache/wicket/request/IUrlRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/IUrlRenderer.java b/wicket-request/src/main/java/org/apache/wicket/request/IUrlRenderer.java
new file mode 100644
index 0000000..6011772
--- /dev/null
+++ b/wicket-request/src/main/java/org/apache/wicket/request/IUrlRenderer.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request;
+
+/**
+ * An interface that a Url can implement if it knows how to
+ * render itself as full url or relative to a base url
+ */
+public interface IUrlRenderer
+{
+ /**
+ * Renders the passed url as full/absolute.
+ *
+ * @param url
+ * the url to render as full
+ * @param baseUrl
+ * the url of the currently rendered page
+ * @return The full url.
+ */
+ String renderFullUrl(final Url url, Url baseUrl);
+
+ /**
+ * Renders the passed url as relative to a base url.
+ *
+ * @param url
+ * the url to render as relative
+ * @param baseUrl
+ * the url of the currently rendered page
+ * @return The relative url.
+ */
+ String renderRelativeUrl(final Url url, Url baseUrl);
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/25294f4d/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
index e092957..c4005cc 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
@@ -127,6 +127,12 @@ public class UrlRenderer
*/
public String renderFullUrl(final Url url)
{
+ if (url instanceof IUrlRenderer)
+ {
+ IUrlRenderer renderer = (IUrlRenderer) url;
+ return renderer.renderFullUrl(url, getBaseUrl());
+ }
+
final String protocol = resolveProtocol(url);
final String host = resolveHost(url);
final Integer port = resolvePort(url);
@@ -214,6 +220,12 @@ public class UrlRenderer
{
Args.notNull(url, "url");
+ if (url instanceof IUrlRenderer)
+ {
+ IUrlRenderer renderer = (IUrlRenderer) url;
+ return renderer.renderRelativeUrl(url, getBaseUrl());
+ }
+
List<String> baseUrlSegments = getBaseUrl().getSegments();
List<String> urlSegments = new ArrayList<String>(url.getSegments());