http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
index 4e0c08d,2c015a4..0be5d76
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
@@@ -259,6 -259,6 +259,12 @@@ public class PageProvider implements IP
                if (pageId != null)
                {
                        page = getStoredPage(pageId);
++
++                      if (page == null)
++                      {
++                              // WICKET-4594 - ignore the parsed parameters 
for stateful pages
++                              pageParameters = null;
++                      }
                }
  
                if (page == null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
index bd920de,bbe2e1c..94a4b7a
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
@@@ -138,12 -135,6 +140,12 @@@ public abstract class AbstractBookmarka
                }
        }
  
-       private final List<MountPathSegment> pathSegments;
++      protected final List<MountPathSegment> pathSegments;
 +
 +      protected final String[] mountSegments;
 +
 +      protected final IPageParametersEncoder pageParametersEncoder;
 +
        /**
         * Construct.
         */
@@@ -256,6 -250,12 +271,12 @@@
  
                if (listenerInterface != null)
                {
 -                      if (pageInfo.getPageId() != null)
 -                      {
 -                              // WICKET-4594 - ignore the parsed parameters 
for stateful pages
 -                              pageParameters = null;
 -                      }
++//                    if (pageInfo.getPageId() != null)
++//                    {
++//                            // WICKET-4594 - ignore the parsed parameters 
for stateful pages
++//                            pageParameters = null;
++//                    }
+ 
                        PageAndComponentProvider provider = new 
PageAndComponentProvider(pageInfo.getPageId(),
                                pageClass, pageParameters, renderCount, 
componentInfo.getComponentPath());
  

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
index f3e3770,f3e3770..00b72a1
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
@@@ -83,21 -83,21 +83,16 @@@ public abstract class AbstractComponent
         */
        protected PageComponentInfo getPageComponentInfo(final Url url)
        {
--              if (url == null)
--              {
--                      throw new IllegalStateException("Argument 'url' may not 
be null.");
--              }
--              else
++              Args.notNull(url, "url");
++
++              for (QueryParameter queryParameter : url.getQueryParameters())
                {
--                      for (QueryParameter queryParameter : 
url.getQueryParameters())
++                      if (Strings.isEmpty(queryParameter.getValue()))
                        {
--                              if (Strings.isEmpty(queryParameter.getValue()))
++                              PageComponentInfo pageComponentInfo = 
PageComponentInfo.parse(queryParameter.getName());
++                              if (pageComponentInfo != null)
                                {
--                                      PageComponentInfo pageComponentInfo = 
PageComponentInfo.parse(queryParameter.getName());
--                                      if (pageComponentInfo != null)
--                                      {
--                                              return pageComponentInfo;
--                                      }
++                                      return pageComponentInfo;
                                }
                        }
                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
index 37aada6,c6d3d2a..83e0374
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
@@@ -16,7 -16,9 +16,6 @@@
   */
  package org.apache.wicket.core.request.mapper;
  
- import org.apache.wicket.Application;
 -import java.util.ArrayList;
 -import java.util.List;
 -
  import org.apache.wicket.RequestListenerInterface;
  import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
  import org.apache.wicket.request.IRequestHandler;
@@@ -63,8 -66,78 +63,8 @@@ import org.apache.wicket.util.string.St
   */
  public class MountedMapper extends AbstractBookmarkableMapper
  {
 -      private final IPageParametersEncoder pageParametersEncoder;
 -
 -      private static class MountPathSegment
 -      {
 -              private int segmentIndex;
 -              private String fixedPart;
 -              private int minParameters;
 -              private int optionalParameters;
 -
 -              public MountPathSegment(int segmentIndex)
 -              {
 -                      this.segmentIndex = segmentIndex;
 -              }
 -
 -              public void setFixedPart(String fixedPart)
 -              {
 -                      this.fixedPart = fixedPart;
 -              }
 -
 -              public void addRequiredParameter()
 -              {
 -                      minParameters++;
 -              }
 -
 -              public void addOptionalParameter()
 -              {
 -                      optionalParameters++;
 -              }
 -
 -              public int getSegmentIndex()
 -              {
 -                      return segmentIndex;
 -              }
 -
 -              public String getFixedPart()
 -              {
 -                      return fixedPart;
 -              }
 -
 -              public int getMinParameters()
 -              {
 -                      return minParameters;
 -              }
 -
 -              public int getOptionalParameters()
 -              {
 -                      return optionalParameters;
 -              }
 -
 -              public int getMaxParameters()
 -              {
 -                      return getOptionalParameters() + getMinParameters();
 -              }
 -
 -              public int getFixedPartSize()
 -              {
 -                      return getFixedPart() == null ? 0 : 1;
 -              }
 -
 -              @Override
 -              public String toString()
 -              {
 -                      return "(" + getSegmentIndex() + ") " + 
getMinParameters() + "-" + getMaxParameters() +
 -                              " " + (getFixedPart() == null ? "(end)" : 
getFixedPart());
 -              }
 -      }
 -
 -      private final List<MountPathSegment> pathSegments;
 -      private final String[] mountSegments;
 -
        /** bookmarkable page class. */
-       private final ClassProvider<? extends IRequestablePage> 
pageClassProvider;
+       private final IProvider<Class<? extends IRequestablePage>> 
pageClassProvider;
  
        /**
         * Construct.
@@@ -110,16 -183,54 +110,16 @@@
         * @param pageParametersEncoder
         */
        public MountedMapper(String mountPath,
-               ClassProvider<? extends IRequestablePage> pageClassProvider,
+               IProvider<Class<? extends IRequestablePage>> pageClassProvider,
                IPageParametersEncoder pageParametersEncoder)
        {
 -              Args.notEmpty(mountPath, "mountPath");
 +              super(mountPath, pageParametersEncoder);
 +
                Args.notNull(pageClassProvider, "pageClassProvider");
 -              Args.notNull(pageParametersEncoder, "pageParametersEncoder");
  
 -              this.pageParametersEncoder = pageParametersEncoder;
                this.pageClassProvider = pageClassProvider;
 -              mountSegments = getMountSegments(mountPath);
 -              pathSegments = getPathSegments(mountSegments);
        }
  
 -      private List<MountPathSegment> getPathSegments(String[] segments)
 -      {
 -              List<MountPathSegment> ret = new ArrayList<MountPathSegment>();
 -              int segmentIndex = 0;
 -              MountPathSegment curPathSegment = new 
MountPathSegment(segmentIndex);
 -              ret.add(curPathSegment);
 -              for (String curSegment : segments)
 -              {
 -                      if (isFixedSegment(curSegment))
 -                      {
 -                              curPathSegment.setFixedPart(curSegment);
 -                              curPathSegment = new 
MountPathSegment(segmentIndex + 1);
 -                              ret.add(curPathSegment);
 -                      }
 -                      else if (getPlaceholder(curSegment) != null)
 -                      {
 -                              curPathSegment.addRequiredParameter();
 -                      }
 -                      else
 -                      {
 -                              curPathSegment.addOptionalParameter();
 -                      }
 -                      segmentIndex++;
 -              }
 -              return ret;
 -      }
 -
 -      private boolean isFixedSegment(String segment)
 -      {
 -              return getOptionalPlaceholder(segment) == null && 
getPlaceholder(segment) == null;
 -      }
 -
 -      /**
 -       * @see 
AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
 -       */
        @Override
        protected UrlInfo parseRequest(Request request)
        {
@@@ -221,7 -410,37 +216,38 @@@
                encodePageComponentInfo(url, info.getPageComponentInfo());
  
                PageParameters copy = new 
PageParameters(info.getPageParameters());
-               setPlaceholders(copy, url);
++//            setPlaceholders(copy, url);
+ 
+               int dropped = 0;
+               for (int i = 0; i < mountSegments.length; ++i)
+               {
+                       String placeholder = getPlaceholder(mountSegments[i]);
+                       String optionalPlaceholder = 
getOptionalPlaceholder(mountSegments[i]);
+                       if (placeholder != null)
+                       {
+                               if (!copy.getNamedKeys().contains(placeholder))
+                               {
+                                       // no value for placeholder - cannot 
mount
+                                       return null;
+                               }
+                               url.getSegments().set(i - dropped, 
copy.get(placeholder).toString(""));
+                               copy.remove(placeholder);
+                       }
+                       else if (optionalPlaceholder != null)
+                       {
+                               if 
(copy.getNamedKeys().contains(optionalPlaceholder))
+                               {
+                                       url.getSegments().set(i - dropped, 
copy.get(optionalPlaceholder).toString(""));
+                                       copy.remove(optionalPlaceholder);
+                               }
+                               else
+                               {
+                                       url.getSegments().remove(i - dropped);
+                                       dropped++;
+                               }
+                       }
+               }
+ 
                return encodePageParameters(url, copy, pageParametersEncoder);
        }
  

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
index 2e5d3fe,63e5914..2cc3e46
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
@@@ -214,9 -213,15 +214,9 @@@ public class PackageMapper extends Abst
        @Override
        protected boolean pageMustHaveBeenCreatedBookmarkable()
        {
-               return true;
+               return false;
        }
  
 -      /**
 -       * @see 
org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
 -       */
        @Override
        public int getCompatibilityScore(Request request)
        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
index 9aafdac,0c6332d..8ebca1d
--- 
a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
@@@ -110,10 -108,10 +118,10 @@@ public class PackageMapperTest extends 
        @Test
        public void decode1()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME);
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME);
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof RenderPageRequestHandler);
+               assertThat(handler, instanceOf(RenderPageRequestHandler.class));
                IRequestablePage page = 
((RenderPageRequestHandler)handler).getPage();
                assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());
                assertEquals(0, page.getPageParameters().getIndexedCount());
@@@ -126,10 -124,10 +134,10 @@@
        @Test
        public void decode2()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME + "/indexed1?a=b&b=c");
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + 
"/indexed1?a=b&b=c");
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof RenderPageRequestHandler);
+               assertThat(handler, instanceOf(RenderPageRequestHandler.class));
                IRequestablePage page = 
((RenderPageRequestHandler)handler).getPage();
                assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());
  
@@@ -148,10 -146,10 +156,10 @@@
        @Test
        public void decode3()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME + "?15");
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15");
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof RenderPageRequestHandler);
+               assertThat(handler, instanceOf(RenderPageRequestHandler.class));
                IRequestablePage page = 
((RenderPageRequestHandler)handler).getPage();
                checkPage(page, 15);
        }
@@@ -162,10 -160,10 +170,10 @@@
        @Test
        public void decode4()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c");
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + 
"/i1/i2?15&a=b&b=c");
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof RenderPageRequestHandler);
+               assertThat(handler, instanceOf(RenderPageRequestHandler.class));
                IRequestablePage page = 
((RenderPageRequestHandler)handler).getPage();
                checkPage(page, 15);
  
@@@ -181,10 -179,10 +189,10 @@@
        @Test
        public void decode5()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME + 
"?15-ILinkListener-foo-bar");
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + 
"?15-ILinkListener-foo-bar");
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+               assertThat(handler, 
instanceOf(ListenerInterfaceRequestHandler.class));
  
                ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
  
@@@ -202,10 -200,10 +210,10 @@@
        @Test
        public void decode6()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME + 
"/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + 
"/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+               assertThat(handler, 
instanceOf(ListenerInterfaceRequestHandler.class));
                ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
  
                IRequestablePage page = h.getPage();
@@@ -226,10 -224,10 +234,10 @@@
        @Test
        public void decode7()
        {
 -              Url url = Url.parse(PAGE_CLASS_NAME + 
"?15-ILinkListener.4-foo-bar");
 +              Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + 
"?15-ILinkListener.4-foo-bar");
                IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+               assertThat(handler, 
instanceOf(ListenerInterfaceRequestHandler.class));
  
                ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
  
@@@ -405,10 -376,7 +413,7 @@@
                IRequestHandler handler = new 
RenderPageRequestHandler(provider);
                Url url = encoder.mapHandler(handler);
  
-               // never allow bookmarkable render url for page that has not 
been created by bookmarkable
-               // URL
- 
-               assertNull(url);
 -              assertEquals(Url.parse("MockPage/i1/i2?15&a=b&b=c"), url);
++              assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + 
"/i1/i2?15&a=b&b=c", url.toString());
        }
  
        /**
@@@ -548,10 -497,10 +555,10 @@@
        @Test
        public void decodeInnerClass()
        {
 -              Url url = Url.parse("PackageMapperTest$OuterPage$InnerPage");
 +              Url url = Url.parse(MOUNT_PATH + '/' + 
"PackageMapperTest$OuterPage$InnerPage");
                IRequestHandler handler = 
innerClassEncoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof RenderPageRequestHandler);
+               assertThat(handler, instanceOf(RenderPageRequestHandler.class));
                IRequestablePage page = 
((RenderPageRequestHandler)handler).getPage();
                assertEquals("InnerPage", page.getClass().getSimpleName());
                assertEquals(0, page.getPageParameters().getIndexedCount());
@@@ -583,10 -532,10 +590,10 @@@
        @Test
        public void decodeAlias()
        {
 -              Url url = Url.parse(ALIAS + "?15");
 +              Url url = Url.parse(MOUNT_PATH + '/' + ALIAS + "?15");
                IRequestHandler handler = 
aliasEncoder.mapRequest(getRequest(url));
  
-               assertTrue(handler instanceof RenderPageRequestHandler);
+               assertThat(handler, instanceOf(RenderPageRequestHandler.class));
                IRequestablePage page = 
((RenderPageRequestHandler)handler).getPage();
                checkPage(page, 15);
                assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());

Reply via email to