Author: mgrigorov
Date: Tue Jun 28 13:38:53 2011
New Revision: 1140607
URL: http://svn.apache.org/viewvc?rev=1140607&view=rev
Log:
WICKET-3838 In wicket 1.5 urlFor returns incorrect string for package mounted
pages
Produce correct class names for inner pages.
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java?rev=1140607&r1=1140606&r2=1140607&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
Tue Jun 28 13:38:53 2011
@@ -16,11 +16,11 @@
*/
package org.apache.wicket.request.mapper;
+import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.mount.MountMapper;
import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
@@ -30,10 +30,14 @@ import org.apache.wicket.util.lang.Packa
/**
* A request mapper that mounts all bookmarkable pages in a given package.
* <p>
- * To mount this mapper onto a path use the {@link MountMapper}, ex:
+ * To mount this mapper onto a path use the {@link
WebApplication#mountPackage(String, Class)}, ex:
*
* <pre>
- * new MountMapper("/my/path", new
packageMapper(PackageName.forClass(MyPage.class)));
+ * MyApp#init() {
+ *
+ * super.init();
+ * mountPackage("/my/path", MyPage.class);
+ * }
* </pre>
*
* will result in urls like {@code /my/path/MyPage}
@@ -96,10 +100,19 @@ public class PackageMapper extends Abstr
protected Url buildUrl(UrlInfo info)
{
Class<? extends IRequestablePage> pageClass =
info.getPageClass();
- if (PackageName.forClass(pageClass).equals(packageName))
+ PackageName pageClassPackageName =
PackageName.forClass(pageClass);
+ if (pageClassPackageName.equals(packageName))
{
Url url = new Url();
- url.getSegments().add(pageClass.getSimpleName());
+
+ String fullyQualifiedClassName = pageClass.getName();
+ String packageRelativeClassName =
fullyQualifiedClassName;
+ int packageNameLength = packageName.getName().length();
+ if (packageNameLength > 0)
+ {
+ packageRelativeClassName =
fullyQualifiedClassName.substring(packageNameLength + 1);
+ }
+ url.getSegments().add(packageRelativeClassName);
encodePageComponentInfo(url,
info.getPageComponentInfo());
return encodePageParameters(url,
info.getPageParameters(), pageParametersEncoder);
}
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java?rev=1140607&r1=1140606&r2=1140607&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/PackageMapperTest.java
Tue Jun 28 13:38:53 2011
@@ -30,11 +30,12 @@ import org.apache.wicket.request.handler
import org.apache.wicket.request.handler.PageAndComponentProvider;
import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.request.mapper.PackageMapperTest.OuterPage.InnerPage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.lang.PackageName;
/**
- *
+ * Tests for {@link PackageMapper}
*/
public class PackageMapperTest extends AbstractMapperTest
{
@@ -409,4 +410,55 @@ public class PackageMapperTest extends A
assertEquals(PAGE_CLASS_NAME, url.toString());
}
+
+
+ private final PackageMapper innerClassEncoder = new PackageMapper(
+ PackageName.forClass(OuterPage.class))
+ {
+ @Override
+ protected IMapperContext getContext()
+ {
+ return context;
+ }
+ };
+
+ public static class OuterPage extends MockPage
+ {
+ private static final long serialVersionUID = 1L;
+
+ public static class InnerPage extends MockPage
+ {
+ private static final long serialVersionUID = 1L;
+ }
+ }
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-3838
+ */
+ public void testEncodeInnerClass()
+ {
+ InnerPage page = new OuterPage.InnerPage();
+ IPageProvider provider = new PageProvider(page);
+ IRequestHandler handler = new
BookmarkablePageRequestHandler(provider);
+
+ Url url = innerClassEncoder.mapHandler(handler);
+
+ assertEquals("PackageMapperTest$OuterPage$InnerPage",
url.toString());
+ }
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-3838
+ */
+ public void testDecodeInnerClass()
+ {
+ Url url = Url.parse("PackageMapperTest$OuterPage$InnerPage");
+ IRequestHandler handler =
innerClassEncoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ IRequestablePage page =
((RenderPageRequestHandler)handler).getPage();
+ assertEquals("InnerPage", page.getClass().getSimpleName());
+ assertEquals(0, page.getPageParameters().getIndexedCount());
+ assertTrue(page.getPageParameters().getNamedKeys().isEmpty());
+ }
+
}