Author: knopp
Date: Wed Sep 17 09:09:52 2008
New Revision: 696353

URL: http://svn.apache.org/viewvc?rev=696353&view=rev
Log:
Bookmarkable stuff

Added:
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/BookmarkableListenerInterfaceRequestHandler.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractEncoderTest.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java
   (with props)
Modified:
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInfo.java
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/MockPage.java
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageInstanceEncoderTest.java
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java?rev=696353&r1=696352&r2=696353&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java
 Wed Sep 17 09:09:52 2008
@@ -18,10 +18,14 @@
 
 import org.apache._wicket.IComponent;
 import org.apache._wicket.IPage;
+import org.apache._wicket.PageParameters;
 import org.apache._wicket.request.RequestHandlerEncoder;
+import org.apache._wicket.request.RequestParameters;
 import org.apache._wicket.request.Url;
 import org.apache._wicket.request.Url.QueryParameter;
+import org.apache.wicket.Page;
 import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.Session;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.protocol.http.PageExpiredException;
 import org.apache.wicket.util.string.Strings;
@@ -119,4 +123,122 @@
                        return component;
                }
        }
+
+       @SuppressWarnings("unchecked")
+       protected Class<? extends IPage> getPageClass(String name)
+       {
+               try
+               {                       
+                       if (Session.exists())                           
+                       {
+                               Session s = Session.get();
+                               return (Class<? extends 
IPage>)s.getClassResolver().resolveClass(name);
+
+                       }
+                       else
+                       {
+                               return (Class<? extends 
IPage>)Class.forName(name);
+                       }
+               }
+               catch (ClassNotFoundException e)
+               {
+                       throw new WicketRuntimeException("Error resolving 
bookmarkable page class", e);
+               }
+       }
+
+       protected PageParameters extractPageParameters(Url url, 
RequestParameters requestParameters,
+               int segmentsToSkip, PageParametersEncoder encoder)
+       {
+               // strip the segments and first query parameter from URL
+               Url urlCopy = new Url(url);
+               while (segmentsToSkip > 0 && urlCopy.getSegments().isEmpty() == 
false)
+               {
+                       urlCopy.getSegments().remove(0);
+                       --segmentsToSkip;
+               }
+
+               if (getPageComponentInfo(urlCopy) != null)
+               {
+                       urlCopy.getQueryParameters().remove(0);
+               }
+
+               PageParameters decoded = encoder.decodePageParameters(urlCopy);
+               return decoded != null ? decoded : new PageParameters();
+       }
+
+       protected Url encodePageParameters(Url url, PageParameters 
pageParameters,
+               PageParametersEncoder encoder)
+       {
+               if (pageParameters == null)
+               {
+                       pageParameters = new PageParameters();
+               }
+
+               Url parametersUrl = 
encoder.encodePageParameters(pageParameters);
+               if (parametersUrl != null)
+               {
+                       // copy the url
+                       url = new Url(url);
+                       
+                       for (String s : parametersUrl.getSegments())
+                       {
+                               url.getSegments().add(s);
+                       }
+                       for (QueryParameter p : 
parametersUrl.getQueryParameters())
+                       {
+                               url.getQueryParameters().add(p);
+                       }
+               }
+               
+               return url;
+       }
+
+       protected IPage newPageInstance(String pageMapName, Class<? extends 
IPage> pageClass,
+               PageParameters pageParameters)
+       {
+               return getContext().newPageInstance(pageMapName, pageClass, 
pageParameters);
+       }
+
+       protected IPage getPageInstance(PageInfo pageInfo, Class<? extends 
IPage> pageClass,
+               PageParameters pageParameters)
+       {
+               return getPageInstance(pageInfo, pageClass, pageParameters, 
false);
+       }
+
+       protected IPage getPageInstance(PageInfo pageInfo, Class<? extends 
IPage> pageClass,
+               PageParameters pageParameters, boolean prepareForRenderNewPage)
+       {
+               IPage page = 
getContext().getPageInstance(pageInfo.getPageMapName(), pageInfo.getPageId(),
+                       pageInfo.getVersionNumber());
+               if (page != null && page.getClass().equals(pageClass) == false)
+               {
+                       page = null;
+               }
+               if (page == null)
+               {
+                       page = 
getContext().newPageInstance(pageInfo.getPageMapName(), pageClass,
+                               pageParameters);
+
+                       // this is required for stateless listeners
+                       if (prepareForRenderNewPage && page instanceof Page)
+                       {
+                               ((Page)page).prepareForRender(false);
+                       }
+               }
+               else
+               {
+                       page.getPageParameters().assign(pageParameters);
+               }
+               return page;
+       }
+
+       protected void encodePageComponentInfo(Url url, PageComponentInfo info)
+       {
+               String s = info.toString();
+               if (!Strings.isEmpty(s))
+               {
+                       QueryParameter parameter = new QueryParameter(s, "");
+                       url.getQueryParameters().add(parameter);
+               }
+       }
 }

Added: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java?rev=696353&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
 Wed Sep 17 09:09:52 2008
@@ -0,0 +1,189 @@
+/*
+ * 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.encoder;
+
+import org.apache._wicket.IComponent;
+import org.apache._wicket.IPage;
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+import 
org.apache._wicket.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.BookmarkablePageRequestHandler;
+import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
+import org.apache._wicket.request.request.Request;
+import org.apache.wicket.RequestListenerInterface;
+
+/**
+ * Decodes and encodes the following URLs:
+ * 
+ * <pre>
+ *  Page Instance - Render
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?pageMap
+ *  (these will redirect to hybrid alternative if page is not stateless)
+ * 
+ *  Page Instance - Render Hybrid 
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?2
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?2.4
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?pageMap.2.4
+ * 
+ *  Page Instance - Bookmarkable Listener 
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?2-click-foo-bar-baz
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?2.4-click-foo-bar-baz
+ *  /wicket/bookmarkable/org.apache.wicket.MyPage?pageMap.2.4-click-foo-bar-baz
+ *  (these will redirect to hybrid if page is not stateless)
+ * </pre>
+ * 
+ * @author Matej Knopp
+ */
+public class BookmarkableEncoder extends AbstractEncoder
+{
+       private final PageParametersEncoder pageParametersEncoder;
+       
+       /**
+        * Construct.
+        * @param pageParametersEncoder 
+        */
+       public BookmarkableEncoder(PageParametersEncoder pageParametersEncoder)
+       {
+               this.pageParametersEncoder = pageParametersEncoder;
+       }
+       
+       /**
+        * Construct.
+        */
+       public BookmarkableEncoder()
+       {
+               this(new SimplePageParametersEncoder());
+       }
+
+       private RequestHandler processBookmarkable(String pageMapName,
+               Class<? extends IPage> pageClass, PageParameters pageParameters)
+       {
+               IPage page = newPageInstance(pageMapName, pageClass, 
pageParameters);
+               return new RenderPageRequestHandler(page);
+       }
+
+       private RequestHandler processHybrid(PageInfo pageInfo, Class<? extends 
IPage> pageClass,
+               PageParameters pageParameters)
+       {
+               IPage page = getPageInstance(pageInfo, pageClass, 
pageParameters);
+               return new RenderPageRequestHandler(page);
+       }
+
+       private RequestHandler processListener(PageComponentInfo 
pageComponentInfo,
+               Class<? extends IPage> pageClass, PageParameters pageParameters)
+       {
+               PageInfo pageInfo = pageComponentInfo.getPageInfo();
+               ComponentInfo componentInfo = 
pageComponentInfo.getComponentInfo();
+
+               IPage page = getPageInstance(pageInfo, pageClass, 
pageParameters, true);
+               IComponent component = getComponent(page, 
componentInfo.getComponentPath());
+               RequestListenerInterface listenerInterface = 
requestListenerInterfaceFromString(componentInfo.getListenerInterface());
+
+               return new ListenerInterfaceRequestHandler(page, component, 
listenerInterface);
+       }
+
+       public RequestHandler decode(Request request)
+       {
+               Url url = request.getUrl();
+               if (url.getSegments().size() >= 3 &&
+                       urlStartsWith(url, getContext().getNamespace(),
+                               getContext().getBookmarkableIdentifier()))
+               {
+                       PageComponentInfo info = getPageComponentInfo(url);
+
+                       String className = url.getSegments().get(2);
+                       Class<? extends IPage> pageClass = 
getPageClass(className);
+                       PageParameters pageParameters = 
extractPageParameters(url,
+                               request.getRequestParameters(), 3, 
pageParametersEncoder);
+
+                       if (info == null || info.getPageInfo().getPageId() == 
null)
+                       {
+                               String pageMap = info != null ? 
info.getPageInfo().getPageMapName() : null;
+                               return processBookmarkable(pageMap, pageClass, 
pageParameters);
+                       }
+                       else if (info.getPageInfo().getPageId() != null && 
info.getComponentInfo() == null)
+                       {
+                               return processHybrid(info.getPageInfo(), 
pageClass, pageParameters);
+                       }
+                       else if (info.getComponentInfo() != null)
+                       {
+                               return processListener(info, pageClass, 
pageParameters);
+                       }
+               }
+               return null;
+       }
+
+       private Url newUrl(Class<? extends IPage> pageClass)
+       {
+               Url url = new Url();
+
+               url.getSegments().add(getContext().getNamespace());
+               url.getSegments().add(getContext().getBookmarkableIdentifier());
+               url.getSegments().add(pageClass.getName());
+
+               return url;
+       }
+
+       public Url encode(RequestHandler requestHandler)
+       {
+               if (requestHandler instanceof BookmarkablePageRequestHandler)
+               {
+                       BookmarkablePageRequestHandler handler = 
(BookmarkablePageRequestHandler)requestHandler;
+                       Url url = newUrl(handler.getPageClass());
+
+                       PageInfo info = new PageInfo(null, null, 
handler.getPageMapName());
+                       encodePageComponentInfo(url, new 
PageComponentInfo(info, null));
+                       return encodePageParameters(url, 
handler.getPageParameters(), pageParametersEncoder);
+               }
+               else if (requestHandler instanceof RenderPageRequestHandler)
+               {
+                       IPage page = 
((RenderPageRequestHandler)requestHandler).getPage();
+
+                       // necessary check so that we won't generate 
bookmarkable URLs for all pages
+                       if (page.wasCreatedBookmarkable())
+                       {
+                               Url url = newUrl(page.getClass());
+                               PageInfo info = new PageInfo(page);
+                               encodePageComponentInfo(url, new 
PageComponentInfo(info, null));
+                               return encodePageParameters(url, 
page.getPageParameters(), pageParametersEncoder);
+                       }
+               }
+               else if (requestHandler instanceof 
BookmarkableListenerInterfaceRequestHandler)
+               {
+                       BookmarkableListenerInterfaceRequestHandler handler = 
(BookmarkableListenerInterfaceRequestHandler)requestHandler;
+                       IPage page = handler.getPage();
+                       PageInfo pageInfo = new PageInfo(page);
+                       ComponentInfo componentInfo = new ComponentInfo(
+                               
requestListenerInterfaceToString(handler.getListenerInterface()),
+                               handler.getComponent().getPath());
+                       Url url = newUrl(page.getClass());
+                       encodePageComponentInfo(url, new 
PageComponentInfo(pageInfo, componentInfo));
+                       return encodePageParameters(url, 
page.getPageParameters(), pageParametersEncoder);
+               }
+
+               return null;
+       }
+
+       public int getMachingSegmentsCount(Request request)
+       {
+               return 0;
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInfo.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInfo.java?rev=696353&r1=696352&r2=696353&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInfo.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInfo.java
 Wed Sep 17 09:09:52 2008
@@ -16,6 +16,7 @@
  */
 package org.apache._wicket.request.encoder;
 
+import org.apache._wicket.IPage;
 import org.apache.wicket.Application;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
@@ -48,8 +49,8 @@
         */
        public PageInfo(Integer pageId, Integer versionNumber, String 
pageMapName)
        {
-               if ((pageId == null && (versionNumber != null || pageMapName == 
null)) ||
-                       (versionNumber == null && (pageId != null || 
pageMapName == null)))
+               if ((pageId == null && versionNumber != null) ||
+                       (versionNumber == null && pageId != null))
                {
                        throw new IllegalArgumentException(
                                "Either both pageId and versionNumber must be 
null or none of them.");
@@ -59,6 +60,17 @@
                this.pageMapName = pageMapName;
        }
 
+       public PageInfo(IPage page)
+       {
+               if (page == null)
+               {
+                       throw new IllegalArgumentException("Argument 'page' may 
not be null.");
+               }
+               this.pageId = page.getPageId();
+               this.versionNumber = page.getPageVersionNumber();
+               this.pageMapName = page.getPageMapName();
+       }
+       
        /**
         * @return page id
         */
@@ -116,7 +128,6 @@
                final boolean pmEmpty = Strings.isEmpty(pageMapName);
                final boolean pmContainsLetter = !pmEmpty && 
!isNumber(pageMapName);
 
-
                if (pageId != null && pmEmpty && versionNumber.intValue() == 0)
                {
                        // pageId

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java?rev=696353&r1=696352&r2=696353&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java
 Wed Sep 17 09:09:52 2008
@@ -20,7 +20,6 @@
 import org.apache._wicket.IPage;
 import org.apache._wicket.request.RequestHandler;
 import org.apache._wicket.request.Url;
-import org.apache._wicket.request.Url.QueryParameter;
 import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
 import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
 import org.apache._wicket.request.request.Request;
@@ -30,10 +29,12 @@
  * Decodes and encodes the following URLs:
  * 
  * <pre>
+ *  Page Instance - Render
  *  /wicket/page?2
  *  /wicket/page?2.4
  *  /wicket/page?abc.2.4
  * 
+ *  Page Instance - Listener
  *  /wicket/page?2-click-foo-bar-baz
  *  /wicket/page?2.4-click-foo-bar-baz
  *  /wicket/page?pageMap.2.4-click-foo-bar-baz
@@ -88,8 +89,7 @@
                {
                        IPage page = 
((RenderPageRequestHandler)requestHandler).getPage();
 
-                       PageInfo i = new PageInfo(page.getPageId(), 
page.getPageVersionNumber(),
-                               page.getPageMapName());
+                       PageInfo i = new PageInfo(page);
                        info = new PageComponentInfo(i, null);
                }
                else if (requestHandler instanceof 
ListenerInterfaceRequestHandler)
@@ -99,20 +99,18 @@
                        String componentPath = handler.getComponent().getPath();
                        RequestListenerInterface listenerInterface = 
handler.getListenerInterface();
 
-                       PageInfo pageInfo = new PageInfo(page.getPageId(), 
page.getPageVersionNumber(),
-                               page.getPageMapName());
+                       PageInfo pageInfo = new PageInfo(page);
                        ComponentInfo componentInfo = new ComponentInfo(
                                
requestListenerInterfaceToString(listenerInterface), componentPath);
                        info = new PageComponentInfo(pageInfo, componentInfo);
                }
-               
+
                if (info != null)
                {
                        Url url = new Url();
                        url.getSegments().add(getContext().getNamespace());
                        url.getSegments().add(getContext().getPageIdentifier());
-                       QueryParameter parameter = new 
QueryParameter(info.toString(), "");
-                       url.getQueryParameters().add(parameter);
+                       encodePageComponentInfo(url, info);
                        return url;
                }
                else

Added: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java?rev=696353&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
 Wed Sep 17 09:09:52 2008
@@ -0,0 +1,47 @@
+/*
+ * 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.encoder;
+
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+
+/**
+ * Encoder that can encode and decode [EMAIL PROTECTED] PageParameters} 
to/from URL.
+ * 
+ * @author Matej Knopp
+ */
+public interface PageParametersEncoder
+{
+       /**
+        * Encode the given [EMAIL PROTECTED] PageParameters} instance into 
URL. The URL will be then merged with
+        * the URL generated for [EMAIL PROTECTED] RequestHandler}.
+        * 
+        * @param pageParameters
+        * @return Url generated from the page parameters
+        */
+       public Url encodePageParameters(PageParameters pageParameters);
+
+       /**
+        * Decodes the given URL to [EMAIL PROTECTED] PageParameters}. The URL 
will have all
+        * [EMAIL PROTECTED] RequestHandler} specified segments/parameters 
stripped.
+        * 
+        * @param url
+        * @return [EMAIL PROTECTED] PageParameters} instance
+        */
+       public PageParameters decodePageParameters(Url url);
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java?rev=696353&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
 Wed Sep 17 09:09:52 2008
@@ -0,0 +1,84 @@
+/*
+ * 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.encoder;
+
+import java.util.List;
+
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.Url.QueryParameter;
+import org.apache.wicket.util.string.StringValue;
+
+/**
+ * Simple encoder with direct indexed/named parameters mapping.
+ * 
+ * @author Matej Knopp
+ */
+public class SimplePageParametersEncoder implements PageParametersEncoder
+{
+       /**
+        * Construct.
+        */
+       public SimplePageParametersEncoder()
+       {
+       }
+
+       public PageParameters decodePageParameters(Url url)
+       {
+               PageParameters parameters = new PageParameters();
+               
+               int i = 0;
+               for (String s : url.getSegments())
+               {
+                       parameters.setIndexedParameter(i, s);
+                       ++i;
+               }
+               
+               for (QueryParameter p : url.getQueryParameters())
+               {
+                       parameters.addNamedParameter(p.getName(), p.getValue());
+               }
+               
+               return parameters;
+       }
+
+       public Url encodePageParameters(PageParameters pageParameters)
+       {
+               Url url = new Url();
+               
+               for (int i = 0; i < pageParameters.getIndexedParamsCount(); ++i)
+               {
+                       
url.getSegments().add(pageParameters.getIndexedParameter(i).toString());
+               }
+               
+               for (String key : pageParameters.getNamedParameterKeys())
+               {
+                       List<StringValue> values = 
pageParameters.getNamedParameters(key);
+                       if (values != null)
+                       {
+                               for (StringValue value : values)
+                               {
+                                       QueryParameter param = new 
QueryParameter(key, value.toString());
+                                       url.getQueryParameters().add(param);
+                               }
+                       }
+               }
+               
+               return url;
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/BookmarkableListenerInterfaceRequestHandler.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/BookmarkableListenerInterfaceRequestHandler.java?rev=696353&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/BookmarkableListenerInterfaceRequestHandler.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/BookmarkableListenerInterfaceRequestHandler.java
 Wed Sep 17 09:09:52 2008
@@ -0,0 +1,114 @@
+/*
+ * 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.handler.impl;
+
+import org.apache._wicket.IComponent;
+import org.apache._wicket.IPage;
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.RequestCycle;
+import org.apache._wicket.request.handler.ComponentRequestHandler;
+import org.apache._wicket.request.handler.PageRequestHandler;
+import org.apache.wicket.RequestListenerInterface;
+
+/**
+ * Request handler for bookmarkable pages with listener intreface. This 
handler is only used to
+ * generate URLs. Rendering is always handled by [EMAIL PROTECTED] 
ListenerInterfaceRequestHandler}.
+ * 
+ * @author Matej Knopp
+ */
+public class BookmarkableListenerInterfaceRequestHandler
+       implements
+               PageRequestHandler,
+               ComponentRequestHandler
+{
+       private final IComponent component;
+       private final IPage page;
+       private final RequestListenerInterface listenerInterface;
+
+       /**
+        * Construct.
+        * 
+        * @param page
+        * @param component
+        * @param listenerInterface
+        */
+       public BookmarkableListenerInterfaceRequestHandler(IPage page, 
IComponent component,
+               RequestListenerInterface listenerInterface)
+       {
+               if (component == null)
+               {
+                       throw new IllegalArgumentException("Argument 
'component' may not be null.");
+               }
+               if (page == null)
+               {
+                       throw new IllegalArgumentException("Argument 'page' may 
not be null.");
+               }
+               if (listenerInterface == null)
+               {
+                       throw new IllegalArgumentException("Argument 
'listenerInterface' may not be null.");
+               }
+               this.component = component;
+               this.page = page;
+               this.listenerInterface = listenerInterface;
+       }
+
+       public IComponent getComponent()
+       {
+               return component;
+       }
+
+       public IPage getPage()
+       {
+               return page;
+       }
+
+       public Class<? extends IPage> getPageClass()
+       {
+               return page.getClass();
+       }
+
+       public String getPageMapName()
+       {
+               return page.getPageMapName();
+       }
+
+       public PageParameters getPageParameters()
+       {
+               return page.getPageParameters();
+       }
+
+       public void detach(RequestCycle requestCycle)
+       {
+               page.detach();
+       }
+
+       /**
+        * Returns the listener interface.
+        * 
+        * @return listener interface
+        */
+       public RequestListenerInterface getListenerInterface()
+       {
+               return listenerInterface;
+       }
+
+       public void respond(RequestCycle requestCycle)
+       {
+               // nothing to do here, this handler is only used to generate 
URLs
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/BookmarkableListenerInterfaceRequestHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/MockPage.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/MockPage.java?rev=696353&r1=696352&r2=696353&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/MockPage.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/MockPage.java
 Wed Sep 17 09:09:52 2008
@@ -26,18 +26,42 @@
        
        private static final long serialVersionUID = 1L;
        
-       private final int pageId;
+       private int pageId;
        
        /**
         * Construct.
         * 
         * @param pageId
         */
-       public MockPage(int pageId)
+       public MockPage()
        {
-               this.pageId = pageId;
                setPath("");
        }
+
+       
+       /**
+        * Construct.
+        * @param pageId
+        * @param pageVersion
+        * @param pageMapName
+        */
+       public MockPage(int pageId, int pageVersion, String pageMapName)
+       {
+               setPageId(pageId);
+               setPageVersionNumber(pageVersion);
+               setPageMapName(pageMapName);
+       }
+       
+       /**
+        * Sets the page id
+        * @param pageId
+        * @return <code>this</code>
+        */
+       public MockPage setPageId(int pageId)
+       {
+               this.pageId = pageId;
+               return this;
+       }
        
        @Override
        public IPage getPage()

Added: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractEncoderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractEncoderTest.java?rev=696353&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractEncoderTest.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractEncoderTest.java
 Wed Sep 17 09:09:52 2008
@@ -0,0 +1,76 @@
+/*
+ * 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.encoder;
+
+import org.apache._wicket.IPage;
+import org.apache._wicket.request.RequestParameters;
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.UrlRequestParameters;
+import org.apache._wicket.request.request.Request;
+import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.markup.html.link.ILinkListener;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Matej Knopp
+ */
+public abstract class AbstractEncoderTest extends TestCase
+{
+
+       /**
+        * Construct.
+        */
+       public AbstractEncoderTest()
+       {
+       }
+
+       protected TestEncoderContext context = new TestEncoderContext();
+
+       @Override
+       protected void setUp() throws Exception
+       {
+               // inititalize the interface
+               RequestListenerInterface i = ILinkListener.INTERFACE;
+       }
+
+       protected Request getRequest(final Url url)
+       {
+               return new Request()
+               {
+                       @Override
+                       public RequestParameters getRequestParameters()
+                       {
+                               return new UrlRequestParameters(getUrl());
+                       }
+
+                       @Override
+                       public Url getUrl()
+                       {
+                               return url;
+                       }
+               };
+       }
+
+       protected void checkPage(IPage page, int id, int version, String 
pageMapName)
+       {
+               assertEquals(id, page.getPageId());
+               assertEquals(version, page.getPageVersionNumber());
+               assertEquals(pageMapName, page.getPageMapName());
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractEncoderTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java?rev=696353&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java
 Wed Sep 17 09:09:52 2008
@@ -0,0 +1,285 @@
+/*
+ * 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.encoder;
+
+import org.apache._wicket.IComponent;
+import org.apache._wicket.IPage;
+import org.apache._wicket.MockPage;
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+import 
org.apache._wicket.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.BookmarkablePageRequestHandler;
+import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.markup.html.link.ILinkListener;
+
+
+/**
+ * @author Matej Knopp
+ */
+public class BookmarkableEncoderTest extends AbstractEncoderTest
+{
+
+       /**
+        * Construct.
+        */
+       public BookmarkableEncoderTest()
+       {
+       }
+
+       private BookmarkableEncoder encoder = new BookmarkableEncoder()
+       {
+               @Override
+               protected EncoderContext getContext()
+               {
+                       return context;
+               }
+       };
+
+       private static final String PAGE_CLASS_NAME = MockPage.class.getName();
+
+       /**
+        * 
+        */
+       public void test1()
+       {
+               Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME);
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+               assertEquals(PAGE_CLASS_NAME, page.getClass().getName());
+               assertEquals(0, 
page.getPageParameters().getIndexedParamsCount());
+               
assertTrue(page.getPageParameters().getNamedParameterKeys().isEmpty());
+       }
+
+       /**
+        * 
+        */
+       public void test2()
+       {
+               Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"/indexed1?a=b&b=c");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+               assertEquals(PAGE_CLASS_NAME, page.getClass().getName());
+
+               PageParameters p = page.getPageParameters();
+               assertEquals(1, p.getIndexedParamsCount());
+               assertEquals("indexed1", p.getIndexedParameter(0).toString());
+
+               assertEquals(2, p.getNamedParameterKeys().size());
+               assertEquals("b", p.getNamedParameter("a").toString());
+               assertEquals("c", p.getNamedParameter("b").toString());
+       }
+
+       /**
+        * 
+        */
+       public void test3()
+       {
+               Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"?15");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+               checkPage(page, 15, 0, null);
+       }
+
+       /**
+        * 
+        */
+       public void test4()
+       {
+               Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"/i1/i2?abc.15.5&a=b&b=c");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+               checkPage(page, 15, 5, "abc");
+
+               PageParameters p = page.getPageParameters();
+               assertEquals(2, p.getIndexedParamsCount());
+               assertEquals("i1", p.getIndexedParameter(0).toString());
+               assertEquals("i2", p.getIndexedParameter(1).toString());
+
+               assertEquals(2, p.getNamedParameterKeys().size());
+               assertEquals("b", p.getNamedParameter("a").toString());
+               assertEquals("c", p.getNamedParameter("b").toString());
+       }
+
+       /**
+        * 
+        */
+       public void test5()
+       {
+               Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"?15-ILinkListener-foo-bar");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+               ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
+
+               IPage page = h.getPage();
+               checkPage(page, 15, 0, null);
+
+               assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+               assertEquals("foo:bar", h.getComponent().getPath());
+       }
+
+       /**
+        * 
+        */
+       public void test6()
+       {
+               Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+                       "/i1/i2?abc.15.5-ILinkListener-foo-bar&a=b&b=c");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+               ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
+
+               IPage page = h.getPage();
+               checkPage(page, 15, 5, "abc");
+
+               assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+               assertEquals("foo:bar", h.getComponent().getPath());
+
+               PageParameters p = page.getPageParameters();
+               assertEquals(2, p.getIndexedParamsCount());
+               assertEquals("i1", p.getIndexedParameter(0).toString());
+               assertEquals("i2", p.getIndexedParameter(1).toString());
+
+               assertEquals(2, p.getNamedParameterKeys().size());
+               assertEquals("b", p.getNamedParameter("a").toString());
+               assertEquals("c", p.getNamedParameter("b").toString());
+       }
+
+       /**
+        * 
+        */
+       public void test7()
+       {
+               RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, null,
+                       new PageParameters());
+               Url url = encoder.encode(handler);
+               assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME, 
url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void test8()
+       {
+               PageParameters parameters = new PageParameters();
+               parameters.setIndexedParameter(0, "i1");
+               parameters.setIndexedParameter(1, "i2");
+               parameters.setNamedParameter("a", "b");
+               parameters.setNamedParameter("b", "c");
+               RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, null,
+                       parameters);
+               Url url = encoder.encode(handler);
+               assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"/i1/i2?a=b&b=c", url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void test9()
+       {
+               PageParameters parameters = new PageParameters();
+               parameters.setIndexedParameter(0, "i1");
+               parameters.setIndexedParameter(1, "i2");
+               parameters.setNamedParameter("a", "b");
+               parameters.setNamedParameter("b", "c");
+
+               RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, "abc",
+                       parameters);
+               Url url = encoder.encode(handler);
+
+               assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"/i1/i2?abc&a=b&b=c",
+                       url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void test10()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+               page.setCreatedBookmarkable(true);
+
+               RequestHandler handler = new RenderPageRequestHandler(page);
+               Url url = encoder.encode(handler);
+
+               assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME + 
"/i1/i2?abc.15.5&a=b&b=c",
+                       url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void test11()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+
+               page.setCreatedBookmarkable(false);
+
+               RequestHandler handler = new RenderPageRequestHandler(page);
+               Url url = encoder.encode(handler);
+
+               // never allow bookmarkable render url for page that has not 
been created by bookmarkable
+               // URL
+
+               assertNull(url);
+       }
+
+       /**
+        * 
+        */
+       public void test12()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+
+               // shouldn't make any difference for 
BookmarkableListenerInterfaceRequestHandler,
+               // as this explicitely says the url must be bookmarkable
+               page.setCreatedBookmarkable(false);
+
+               IComponent c = page.get("foo:bar");
+
+               RequestHandler handler = new 
BookmarkableListenerInterfaceRequestHandler(page, c,
+                       ILinkListener.INTERFACE);
+
+               Url url = encoder.encode(handler);
+
+               assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+                       "/i1/i2?abc.15.5-ILinkListener-foo-bar&a=b&b=c", 
url.toString());
+       }
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageInstanceEncoderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageInstanceEncoderTest.java?rev=696353&r1=696352&r2=696353&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageInstanceEncoderTest.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageInstanceEncoderTest.java
 Wed Sep 17 09:09:52 2008
@@ -16,26 +16,19 @@
  */
 package org.apache._wicket.request.encoder;
 
-import junit.framework.TestCase;
-
 import org.apache._wicket.IComponent;
-import org.apache._wicket.IPage;
 import org.apache._wicket.MockPage;
 import org.apache._wicket.request.RequestHandler;
-import org.apache._wicket.request.RequestParameters;
 import org.apache._wicket.request.Url;
-import org.apache._wicket.request.UrlRequestParameters;
 import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
 import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
-import org.apache._wicket.request.request.Request;
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.markup.html.link.ILinkListener;
 
 /**
  * 
  * @author Matej Knopp
  */
-public class PageInstanceEncoderTest extends TestCase
+public class PageInstanceEncoderTest extends AbstractEncoderTest
 {
 
        /**
@@ -46,7 +39,6 @@
        {
        }
 
-       private TestEncoderContext context = new TestEncoderContext();
        private PageInstanceEncoder encoder = new PageInstanceEncoder()
        {
                @Override
@@ -55,39 +47,7 @@
                        return context;
                }
        };
-       
-       @Override
-       protected void setUp() throws Exception
-       {
-               // inititalize the interface
-               RequestListenerInterface i = ILinkListener.INTERFACE;
-       }
-
-       private Request getRequest(final Url url)
-       {
-               return new Request()
-               {
-                       @Override
-                       public RequestParameters getRequestParameters()
-                       {
-                               return new UrlRequestParameters(getUrl());
-                       }
-
-                       @Override
-                       public Url getUrl()
-                       {
-                               return url;
-                       }
-               };
-       }
-
-       private void checkPage(IPage page, int id, int version, String 
pageMapName)
-       {
-               assertEquals(id, page.getPageId());
-               assertEquals(version, page.getPageVersionNumber());
-               assertEquals(pageMapName, page.getPageMapName());
-       }
-       
+               
        /**
         * 
         */
@@ -173,9 +133,7 @@
         */
        public void test7()
        {
-               MockPage page = new MockPage(15);
-               page.setPageMapName("pm1");
-               page.setPageVersionNumber(4);
+               MockPage page = new MockPage(15, 4, "pm1");
                RequestHandler handler = new RenderPageRequestHandler(page);
                
                Url url = encoder.encode(handler);
@@ -187,9 +145,7 @@
         */
        public void test8()
        {
-               MockPage page = new MockPage(15);
-               page.setPageMapName(null);
-               page.setPageVersionNumber(0);
+               MockPage page = new MockPage(15, 0, null);
                RequestHandler handler = new RenderPageRequestHandler(page);
                
                Url url = encoder.encode(handler);
@@ -201,9 +157,7 @@
         */
        public void test9()
        {
-               MockPage page = new MockPage(15);
-               page.setPageMapName(null);
-               page.setPageVersionNumber(0);
+               MockPage page = new MockPage(15, 0, null);
                
                IComponent c = page.get("a:b:c");
                

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java?rev=696353&r1=696352&r2=696353&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
 Wed Sep 17 09:09:52 2008
@@ -20,6 +20,7 @@
 import org.apache._wicket.MockPage;
 import org.apache._wicket.PageParameters;
 import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.WicketRuntimeException;
 
 /**
  * Simple [EMAIL PROTECTED] EncoderContext} implementation for testing purposes
@@ -77,7 +78,8 @@
 
        public IPage getPageInstance(String pageMapName, int pageId, int 
versionNumber)
        {
-               MockPage page = new MockPage(pageId);
+               MockPage page = new MockPage();
+               page.setPageId(pageId);
                page.setPageMapName(pageMapName);
                page.setPageVersionNumber(versionNumber);
                page.setBookmarkable(bookmarkable);
@@ -89,13 +91,22 @@
 
        public IPage newPageInstance(String pageMapName, Class<? extends IPage> 
pageClass,
                PageParameters pageParameters)
-       {
-               MockPage page = new MockPage(++idCounter);
-               page.setPageMapName(pageMapName);
-               page.setBookmarkable(true);
-               page.setCreatedBookmarkable(true);
-               page.getPageParameters().assign(pageParameters);
-               return page;
+       {               
+               try
+               {
+                       MockPage page;
+                       page = (MockPage)pageClass.newInstance();
+                       page.setPageId(++idCounter);
+                       page.setPageMapName(pageMapName);
+                       page.setBookmarkable(true);
+                       page.setCreatedBookmarkable(true);
+                       page.getPageParameters().assign(pageParameters);
+                       return page;
+               }
+               catch (Exception e)
+               {
+                       throw new WicketRuntimeException(e);
+               }
        }
 
        public RequestListenerInterface 
requestListenerInterfaceFromString(String interfaceName)


Reply via email to