You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/12/01 00:03:12 UTC
svn commit: r721924 - in /wicket/sandbox/knopp/experimental/wicket/src:
main/java/org/apache/_wicket/ main/java/org/apache/_wicket/request/
main/java/org/apache/_wicket/request/encoder/
main/java/org/apache/_wicket/request/encoder/info/ test/java/org/a...
Author: knopp
Date: Sun Nov 30 15:03:12 2008
New Revision: 721924
URL: http://svn.apache.org/viewvc?rev=721924&view=rev
Log:
page.renderCount
Added:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/StalePageException.java (with props)
Modified:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IPage.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractBookmarkableEncoder.java
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/PageInstanceEncoder.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/url-format.txt
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/BookmarkableEncoderTest.java
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.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
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/info/ComponentInfoTest.java
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IPage.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IPage.java?rev=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IPage.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IPage.java Sun Nov 30 15:03:12 2008
@@ -43,6 +43,18 @@
public boolean isBookmarkable();
/**
+ * Returns the number of times this page has been rendered. The number will be appended to
+ * listener interface links in order to prevent invoking listeners from staled page version.
+ * <p>
+ * For example a same page might have been rendered in two separate tabs. Page render doesn't
+ * change page id but it can modify component hierarchy. Listener interface links on such page
+ * should only work in tab where the page was rendered most recently.
+ *
+ * @return render count
+ */
+ public int getRenderCount();
+
+ /**
* Returns whether the page instance was created by a bookmarkable URL. Non mounted pages have
* to be created using bookmarkable URL in order to have hybrid URLs later. Otherwise it would
* be a potential security risk.
@@ -59,7 +71,7 @@
*
* @return Whether this page is stateless
*/
- // noe that this has different semantics than Component#isStateless()
+ // noe that this has different semantics than Component#isStateless()
public boolean isPageStateless();
/**
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractBookmarkableEncoder.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractBookmarkableEncoder.java?rev=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractBookmarkableEncoder.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractBookmarkableEncoder.java Sun Nov 30 15:03:12 2008
@@ -53,9 +53,9 @@
}
private RequestHandler processHybrid(PageInfo pageInfo, Class<? extends IPage> pageClass,
- PageParameters pageParameters)
+ PageParameters pageParameters, Integer renderCount)
{
- IPage page = getPageInstance(pageInfo, pageClass, pageParameters);
+ IPage page = getPageInstance(pageInfo, pageClass, pageParameters, renderCount);
return new RenderPageRequestHandler(page);
}
@@ -64,8 +64,9 @@
{
PageInfo pageInfo = pageComponentInfo.getPageInfo();
ComponentInfo componentInfo = pageComponentInfo.getComponentInfo();
-
- IPage page = getPageInstance(pageInfo, pageClass, pageParameters, true);
+ Integer renderCount = componentInfo != null ? componentInfo.getRenderCount() : null;
+
+ IPage page = getPageInstance(pageInfo, pageClass, pageParameters, true, renderCount);
IComponent component = getComponent(page, componentInfo.getComponentPath());
RequestListenerInterface listenerInterface = requestListenerInterfaceFromString(componentInfo.getListenerInterface());
@@ -170,7 +171,7 @@
// if there is page instance information in the URL but no component and listener
// interface then this is a hybrid URL - we need to try to reuse existing page
// instance
- return processHybrid(info.getPageInfo(), pageClass, pageParameters);
+ return processHybrid(info.getPageInfo(), pageClass, pageParameters, null);
}
else if (info.getComponentInfo() != null)
{
@@ -241,7 +242,7 @@
IPage page = handler.getPage();
PageInfo pageInfo = new PageInfo(page);
ComponentInfo componentInfo = new ComponentInfo(
- requestListenerInterfaceToString(handler.getListenerInterface()),
+ page.getRenderCount(), requestListenerInterfaceToString(handler.getListenerInterface()),
handler.getComponent().getPath(), handler.getBehaviorIndex());
UrlInfo urlInfo = new UrlInfo(new PageComponentInfo(pageInfo, componentInfo),
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=721924&r1=721923&r2=721924&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 Sun Nov 30 15:03:12 2008
@@ -180,9 +180,10 @@
*
* @param info
* @param throwExpiredExceptionIfNotFound
+ * @param renderCount
* @return page instance or <code>null</code>
*/
- protected IPage getPageInstance(PageInfo info, boolean throwExpiredExceptionIfNotFound)
+ protected IPage getPageInstance(PageInfo info, boolean throwExpiredExceptionIfNotFound, Integer renderCount)
{
if (info == null)
{
@@ -194,6 +195,11 @@
{
throw new PageExpiredException("Page expired.");
}
+
+ if (page != null && renderCount != null && page.getRenderCount() != renderCount)
+ {
+ throw new StalePageException(page);
+ }
return page;
}
@@ -203,11 +209,12 @@
* instance {@link PageExpiredException} is thrown.
*
* @param info
+ * @param renderCount
* @return page instance
*/
- protected IPage getPageInstance(PageInfo info)
+ protected IPage getPageInstance(PageInfo info, Integer renderCount)
{
- return getPageInstance(info, true);
+ return getPageInstance(info, true, renderCount);
}
/**
@@ -363,13 +370,14 @@
* @param pageInfo
* @param pageClass
* @param pageParameters
+ * @param renderCount
*
* @return page instance
*/
protected IPage getPageInstance(PageInfo pageInfo, Class<? extends IPage> pageClass,
- PageParameters pageParameters)
+ PageParameters pageParameters, Integer renderCount)
{
- return getPageInstance(pageInfo, pageClass, pageParameters, false);
+ return getPageInstance(pageInfo, pageClass, pageParameters, false, renderCount);
}
/**
@@ -386,11 +394,12 @@
* @param pageClass
* @param pageParameters
* @param prepareForRenderNewPage
+ * @param renderCount
*
* @return page instance
*/
protected IPage getPageInstance(PageInfo pageInfo, Class<? extends IPage> pageClass,
- PageParameters pageParameters, boolean prepareForRenderNewPage)
+ PageParameters pageParameters, boolean prepareForRenderNewPage, Integer renderCount)
{
if (pageInfo == null)
{
@@ -421,6 +430,10 @@
}
else
{
+ if (renderCount != null && page.getRenderCount() != renderCount)
+ {
+ throw new StalePageException(page);
+ }
page.getPageParameters().assign(pageParameters);
}
return page;
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=721924&r1=721923&r2=721924&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 Sun Nov 30 15:03:12 2008
@@ -65,7 +65,10 @@
PageComponentInfo info = getPageComponentInfo(url);
if (info != null && info.getPageInfo().getPageId() != null)
{
- IPage page = getPageInstance(info.getPageInfo());
+ Integer renderCount = info.getComponentInfo() != null ? info.getComponentInfo().getRenderCount() : null;
+
+ IPage page = getPageInstance(info.getPageInfo(), renderCount);
+
if (info.getComponentInfo() == null)
{
// render page
@@ -106,7 +109,7 @@
PageInfo pageInfo = new PageInfo(page);
ComponentInfo componentInfo = new ComponentInfo(
- requestListenerInterfaceToString(listenerInterface), componentPath,
+ page.getRenderCount(), requestListenerInterfaceToString(listenerInterface), componentPath,
handler.getBehaviorIndex());
info = new PageComponentInfo(pageInfo, componentInfo);
}
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/StalePageException.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/StalePageException.java?rev=721924&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/StalePageException.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/StalePageException.java Sun Nov 30 15:03:12 2008
@@ -0,0 +1,52 @@
+/*
+ * 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.WicketRuntimeException;
+
+/**
+ * Exception invoked when when stale link has been clicked. The page should then be rerendered
+ * with an explanatory error message.
+ *
+ * @author Matej Knopp
+ */
+public class StalePageException extends WicketRuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ private final IPage page;
+
+ /**
+ *
+ * Construct.
+ * @param page
+ */
+ public StalePageException(IPage page)
+ {
+ this.page = page;
+ }
+
+ /**
+ *
+ * @return page instance
+ */
+ public IPage getPage()
+ {
+ return page;
+ }
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/StalePageException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java?rev=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java Sun Nov 30 15:03:12 2008
@@ -20,7 +20,8 @@
/**
* Encodes listener inteface and component path in form of
- * <listenerInterface>-<componentPath> or <listenerInterface>.<behaviorIndex>-<componentPath>
+ * <listenerInterface>-<componentPath> or
+ * <listenerInterface>.<behaviorIndex>-<componentPath>
* <p>
* Component path is escaped (':' characters are replaced by '-')
*
@@ -31,6 +32,7 @@
private final String listenerInterface;
private final String componentPath;
private final Integer behaviorIndex;
+ private final Integer renderCount;
private static final char BEHAVIOR_INDEX_SEPARATOR = '.';
private static final char SEPARATOR = '-';
@@ -38,11 +40,13 @@
/**
* Construct.
*
+ * @param renderCount
* @param listenerInterface
* @param componentPath
* @param behaviorIndex
*/
- public ComponentInfo(String listenerInterface, String componentPath, Integer behaviorIndex)
+ public ComponentInfo(Integer renderCount, String listenerInterface, String componentPath,
+ Integer behaviorIndex)
{
if (listenerInterface == null)
{
@@ -55,6 +59,7 @@
this.listenerInterface = listenerInterface;
this.componentPath = componentPath;
this.behaviorIndex = behaviorIndex;
+ this.renderCount = renderCount;
}
/**
@@ -80,6 +85,15 @@
{
return behaviorIndex;
}
+
+ /**
+ *
+ * @return render count
+ */
+ public Integer getRenderCount()
+ {
+ return renderCount;
+ }
private static final String TMP_PLACEHOLDER = "[[[[[[[WICKET[[TMP]]DASH]]" + Math.random() +
"]]]]";
@@ -118,7 +132,13 @@
public String toString()
{
StringBuilder result = new StringBuilder();
-
+
+ if (renderCount != null)
+ {
+ result.append(renderCount);
+ result.append(BEHAVIOR_INDEX_SEPARATOR);
+ }
+
result.append(listenerInterface);
if (behaviorIndex != null)
@@ -133,6 +153,28 @@
}
/**
+ * Method that rigidly checks if the string consists of digits only.
+ *
+ * @param string
+ * @return whether the string consists of digits only
+ */
+ private static boolean isNumber(String string)
+ {
+ if (string == null || string.length() == 0)
+ {
+ return false;
+ }
+ for (int i = 0; i < string.length(); ++i)
+ {
+ if (Character.isDigit(string.charAt(i)) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
* Parses the given string.
*
* @param string
@@ -164,22 +206,42 @@
}
Integer behaviorIndex = null;
- i = listenerInterface.indexOf(BEHAVIOR_INDEX_SEPARATOR);
- if (i != -1)
- {
- String behavior = listenerInterface.substring(i + 1);
- listenerInterface = listenerInterface.substring(0, i);
- try
+ Integer renderCount = null;
+
+ String listenerParts[] = Strings.split(listenerInterface, BEHAVIOR_INDEX_SEPARATOR);
+ if (listenerParts.length == 2)
+ {
+ if (isNumber(listenerParts[0]))
+ {
+ renderCount = Integer.valueOf(listenerParts[0]);
+ listenerInterface = listenerParts[1];
+ }
+ else if (isNumber(listenerParts[1]))
{
- behaviorIndex = Integer.valueOf(behavior);
+ listenerInterface = listenerParts[0];
+ behaviorIndex = Integer.valueOf(listenerParts[1]);
}
- catch (Exception e)
+ else
{
return null;
}
}
+ else if (listenerParts.length == 3)
+ {
+ if (!isNumber(listenerParts[0]) && !isNumber(listenerParts[1]))
+ {
+ return null;
+ }
+ renderCount = Integer.valueOf(listenerParts[0]);
+ listenerInterface = listenerParts[1];
+ behaviorIndex = Integer.valueOf(listenerParts[2]);
+ }
+ else if (listenerParts.length != 1)
+ {
+ return null;
+ }
- return new ComponentInfo(listenerInterface, componentPath, behaviorIndex);
+ return new ComponentInfo(renderCount, listenerInterface, componentPath, behaviorIndex);
}
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/url-format.txt
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/url-format.txt?rev=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/url-format.txt (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/url-format.txt Sun Nov 30 15:03:12 2008
@@ -27,8 +27,8 @@
/wicket/bookmarkable/org.apache.wicket.MyPage?2
Page Instance - Bookmarkable Listener (BookmarkableListenerInterfaceRequestHandler)
-/wicket/bookmarkable/org.apache.wicket.MyPage?2-click-foo-bar-baz
-/wicket/bookmarkable/org.apache.wicket.MyPage?2-click.1-foo-bar-baz (1 is behavior index)
+/wicket/bookmarkable/org.apache.wicket.MyPage?2-5.click-foo-bar-baz (5 is renderCount)
+/wicket/bookmarkable/org.apache.wicket.MyPage?2-5.click.1-foo-bar-baz (5 is renderCount, 1 is behavior index)
(these will redirect to hybrid if page is not stateless)
BOOKMARKABLE - MOUNTED
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=721924&r1=721923&r2=721924&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 Sun Nov 30 15:03:12 2008
@@ -142,4 +142,19 @@
return this;
}
+ private int renderCount;
+
+ public int getRenderCount()
+ {
+ return renderCount;
+ }
+
+ /**
+ * Sets the render count
+ * @param renderCount
+ */
+ public void setRenderCount(int renderCount)
+ {
+ this.renderCount = renderCount;
+ }
}
Modified: 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=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/BookmarkableEncoderTest.java Sun Nov 30 15:03:12 2008
@@ -172,6 +172,7 @@
assertEquals("c", p.getNamedParameter("b").toString());
}
+
/**
*
*/
@@ -191,6 +192,48 @@
assertEquals("foo:bar", h.getComponent().getPath());
assertEquals((Object)4, h.getBehaviorIndex());
}
+
+ /**
+ *
+ */
+ public void testDecode8()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
+
+ context.setNextPageRenderCount(5);
+
+ RequestHandler handler = encoder.decode(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ IPage page = h.getPage();
+ assertEquals(page.getRenderCount(), 5);
+ }
+
+ /**
+ *
+ */
+ public void testDecode9()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
+
+ context.setNextPageRenderCount(6);
+
+ try
+ {
+ RequestHandler handler = encoder.decode(getRequest(url));
+
+ // should never get here
+ assertFalse(true);
+ }
+ catch (StalePageException e)
+ {
+
+ }
+ }
/**
*
@@ -302,7 +345,7 @@
Url url = encoder.encode(handler);
assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME +
- "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c", url.toString());
+ "/i1/i2?15-0.ILinkListener-foo-bar&a=b&b=c", url.toString());
}
/**
@@ -328,7 +371,7 @@
Url url = encoder.encode(handler);
assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME +
- "/i1/i2?15-ILinkListener.4-foo-bar&a=b&b=c", url.toString());
+ "/i1/i2?15-0.ILinkListener.4-foo-bar&a=b&b=c", url.toString());
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java?rev=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java Sun Nov 30 15:03:12 2008
@@ -223,6 +223,44 @@
/**
*
*/
+ public void testDecode10()
+ {
+ Url url = Url.parse("some/mount/path?15-5.ILinkListener.4-foo-bar");
+ context.setNextPageRenderCount(5);
+ RequestHandler handler = encoder.decode(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ IPage page = h.getPage();
+ assertEquals(5, page.getRenderCount());
+ }
+
+ /**
+ *
+ */
+ public void testDecode11()
+ {
+ Url url = Url.parse("some/mount/path?15-5.ILinkListener.4-foo-bar");
+ context.setNextPageRenderCount(7);
+
+ try
+ {
+ RequestHandler handler = encoder.decode(getRequest(url));
+
+ // should never get here
+ assertTrue(false);
+ }
+ catch (StalePageException e)
+ {
+
+ }
+ }
+
+ /**
+ *
+ */
public void testEncode1()
{
RequestHandler handler = new BookmarkablePageRequestHandler(MockPage.class, null,
@@ -316,6 +354,7 @@
page.getPageParameters().setIndexedParameter(1, "i2");
page.getPageParameters().setNamedParameter("a", "b");
page.getPageParameters().setNamedParameter("b", "c");
+ page.setRenderCount(4);
// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
// as this explicitely says the url must be bookmarkable
@@ -328,7 +367,7 @@
Url url = encoder.encode(handler);
- assertEquals("some/mount/path/i1/i2?15-ILinkListener-foo-bar&a=b&b=c", url.toString());
+ assertEquals("some/mount/path/i1/i2?15-4.ILinkListener-foo-bar&a=b&b=c", url.toString());
}
/**
@@ -341,6 +380,7 @@
page.getPageParameters().setIndexedParameter(1, "i2");
page.getPageParameters().setNamedParameter("a", "b");
page.getPageParameters().setNamedParameter("b", "c");
+ page.setRenderCount(5);
// shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
// as this explicitely says the url must be bookmarkable
@@ -353,7 +393,7 @@
Url url = encoder.encode(handler);
- assertEquals("some/mount/path/i1/i2?15-ILinkListener.4-foo-bar&a=b&b=c",
+ assertEquals("some/mount/path/i1/i2?15-5.ILinkListener.4-foo-bar&a=b&b=c",
url.toString());
}
@@ -374,7 +414,7 @@
assertEquals("some/mount/path", url.toString());
}
-
+
/**
*
*/
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=721924&r1=721923&r2=721924&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 Sun Nov 30 15:03:12 2008
@@ -135,6 +135,44 @@
/**
*
*/
+ public void testDecode7()
+ {
+ Url url = Url.parse("wicket/page?4-6.ILinkListener.5-a-b-c");
+
+ context.setNextPageRenderCount(6);
+
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler) handler;
+ assertEquals(6, h.getPage().getRenderCount());
+ }
+
+ /**
+ *
+ */
+ public void testDecode8()
+ {
+ Url url = Url.parse("wicket/page?4-6.ILinkListener.5-a-b-c");
+
+ context.setNextPageRenderCount(8);
+
+ try
+ {
+ RequestHandler handler = encoder.decode(getRequest(url));
+
+ // should never get here
+ assertFalse(true);
+ }
+ catch (StalePageException e)
+ {
+
+ }
+ }
+
+ /**
+ *
+ */
public void testEncode1()
{
MockPage page = new MockPage(15);
@@ -151,13 +189,14 @@
public void testEncode2()
{
MockPage page = new MockPage(15);
+ page.setRenderCount(5);
IComponent c = page.get("a:b:c");
RequestHandler handler = new ListenerInterfaceRequestHandler(page, c, ILinkListener.INTERFACE);
Url url = encoder.encode(handler);
- assertEquals("wicket/page?15-ILinkListener-a-b-c", url.toString());
+ assertEquals("wicket/page?15-5.ILinkListener-a-b-c", url.toString());
}
}
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=721924&r1=721923&r2=721924&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 Sun Nov 30 15:03:12 2008
@@ -89,12 +89,24 @@
this.createdBookmarkable = createdBookmarkable;
}
+ private int nextPageRenderCount = 0;
+
+ /**
+ *
+ * @param nextPageRenderCount
+ */
+ public void setNextPageRenderCount(int nextPageRenderCount)
+ {
+ this.nextPageRenderCount = nextPageRenderCount;
+ }
+
public IPage getPageInstance(int pageId)
{
MockPage page = new MockPage();
page.setPageId(pageId);
page.setBookmarkable(bookmarkable);
page.setCreatedBookmarkable(createdBookmarkable);
+ page.setRenderCount(nextPageRenderCount);
return page;
}
Modified: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/info/ComponentInfoTest.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/info/ComponentInfoTest.java?rev=721924&r1=721923&r2=721924&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/info/ComponentInfoTest.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/info/ComponentInfoTest.java Sun Nov 30 15:03:12 2008
@@ -127,5 +127,32 @@
assertEquals(s, info.toString());
}
+
+ /**
+ *
+ */
+ public void test9()
+ {
+ String s = "4.listener-a-b";
+ ComponentInfo info = ComponentInfo.parse(s);
+ assertEquals("listener", info.getListenerInterface());
+ assertEquals((Integer)4, info.getRenderCount());
+
+ assertEquals(s, info.toString());
+ }
+
+ /**
+ *
+ */
+ public void test10()
+ {
+ String s = "4.listener.5-a-b";
+ ComponentInfo info = ComponentInfo.parse(s);
+ assertEquals("listener", info.getListenerInterface());
+ assertEquals((Integer)4, info.getRenderCount());
+ assertEquals((Integer)5, info.getBehaviorIndex());
+
+ assertEquals(s, info.toString());
+ }
}