Author: knopp
Date: Thu Sep 18 03:48:56 2008
New Revision: 696625
URL: http://svn.apache.org/viewvc?rev=696625&view=rev
Log:
more goodies
Added:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java
(contents, props changed)
- copied, changed from r695936,
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ComponentInfo.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageComponentInfo.java
(contents, props changed)
- copied, changed from r695934,
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageComponentInfo.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageInfo.java
(contents, props changed)
- copied, changed from r696356,
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/parameters/
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/PageParametersEncoder.java
(contents, props changed)
- copied, changed from r696353,
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/SimplePageParametersEncoder.java
(contents, props changed)
- copied, changed from r696353,
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
Removed:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ComponentInfo.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageComponentInfo.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/PageParametersEncoder.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
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/BookmarkableEncoder.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.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/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/ComponentInfoTest.java
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageComponentInfoTest.java
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageInstanceEncoderTest.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=696625&r1=696624&r2=696625&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
Thu Sep 18 03:48:56 2008
@@ -23,6 +23,9 @@
import org.apache._wicket.request.RequestParameters;
import org.apache._wicket.request.Url;
import org.apache._wicket.request.Url.QueryParameter;
+import org.apache._wicket.request.encoder.info.PageComponentInfo;
+import org.apache._wicket.request.encoder.info.PageInfo;
+import org.apache._wicket.request.encoder.parameters.PageParametersEncoder;
import org.apache.wicket.Page;
import org.apache.wicket.RequestListenerInterface;
import org.apache.wicket.Session;
@@ -31,7 +34,7 @@
import org.apache.wicket.util.string.Strings;
/**
- * Convenience class for implementing encoders.
+ * Convenience class for implementing page/components related encoders.
*
* @author Matej Knopp
*/
@@ -43,16 +46,44 @@
return null;
};
+ /**
+ * Converts the specified listener interface to String.
+ *
+ * @param listenerInterface
+ * @return listenerInterface name as string
+ */
protected String
requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
{
+ if (listenerInterface == null)
+ {
+ throw new IllegalArgumentException("Argument
'listenerInterface' may not be null.");
+ }
return
getContext().requestListenerInterfaceToString(listenerInterface);
}
+ /**
+ * Creates listener interface from the specified string
+ *
+ * @param interfaceName
+ * @return listener interface
+ */
protected RequestListenerInterface
requestListenerInterfaceFromString(String interfaceName)
{
+ if (interfaceName == null)
+ {
+ throw new IllegalArgumentException("Argument
'interfaceName' may not be null.");
+ }
return
getContext().requestListenerInterfaceFromString(interfaceName);
}
+ /**
+ * Returns true if the given url starts with specified segments
+ *
+ * @param url
+ * @param segments
+ * @return <code>true</code> if the URL starts with the specified
segments, <code>false</code>
+ * otherwise
+ */
protected boolean urlStartsWith(Url url, String... segments)
{
if (url == null)
@@ -79,8 +110,20 @@
return true;
}
+ /**
+ * Extracts the [EMAIL PROTECTED] PageComponentInfo} from the URL. The
[EMAIL PROTECTED] PageComponentInfo} is encoded
+ * as the very first query parameter and the parameter consists of name
only (no value).
+ *
+ * @param url
+ *
+ * @return PageComponentInfo instance if one was encoded in URL,
<code>null</code> otherwise.
+ */
protected PageComponentInfo getPageComponentInfo(Url url)
{
+ if (url == null)
+ {
+ throw new IllegalStateException("Argument 'url' may not
be null.");
+ }
if (url.getQueryParameters().size() > 0)
{
QueryParameter param = url.getQueryParameters().get(0);
@@ -92,8 +135,45 @@
return null;
}
+ /**
+ * Encodes the [EMAIL PROTECTED] PageComponentInfo} instance as the
first query string parameter to the
+ * URL.
+ *
+ * @param url
+ * @param info
+ */
+ protected void encodePageComponentInfo(Url url, PageComponentInfo info)
+ {
+ if (url == null)
+ {
+ throw new IllegalStateException("Argument 'url' may not
be null.");
+ }
+ if (info != null)
+ {
+ String s = info.toString();
+ if (!Strings.isEmpty(s))
+ {
+ QueryParameter parameter = new
QueryParameter(s, "");
+ url.getQueryParameters().add(parameter);
+ }
+ }
+ }
+
+ /**
+ * Returns the page instance specified by the [EMAIL PROTECTED]
PageInfo} object. When there is no such
+ * page instance this method either throws [EMAIL PROTECTED]
PageExpiredException} (if the
+ * <code>throwExpiredExceptionIfNotFound</code> parameter is true) or
return <code>null>/code>
+ *
+ * @param info
+ * @param throwExpiredExceptionIfNotFound
+ * @return page instance or <code>null</code>
+ */
protected IPage getPageInstance(PageInfo info, boolean
throwExpiredExceptionIfNotFound)
{
+ if (info == null)
+ {
+ throw new IllegalArgumentException("Argument 'info' may
not be null.");
+ }
IPage page =
getContext().getPageInstance(info.getPageMapName(), info.getPageId(),
info.getVersionNumber());
@@ -105,13 +185,36 @@
return page;
}
+ /**
+ * Returns the page instance specified by the [EMAIL PROTECTED]
PageInfo} object. If there is no such page
+ * instance [EMAIL PROTECTED] PageExpiredException} is thrown.
+ *
+ * @param info
+ * @return page instance
+ */
protected IPage getPageInstance(PageInfo info)
{
return getPageInstance(info, true);
}
+ /**
+ * Returns component on page with given path. If the component is not
found an exception is
+ * thrown.
+ *
+ * @param page
+ * @param componentPath
+ * @return component instance
+ */
protected IComponent getComponent(IPage page, String componentPath)
{
+ if (page == null)
+ {
+ throw new IllegalArgumentException("Argument 'page' may
not be nul.");
+ }
+ if (componentPath == null)
+ {
+ throw new IllegalArgumentException("Argument
'componentPath' may not be null.");
+ }
IComponent component = page.get(componentPath);
if (component == null)
{
@@ -124,12 +227,22 @@
}
}
+ /**
+ * Loads page class with given name.
+ *
+ * @param name
+ * @return class
+ */
@SuppressWarnings("unchecked")
protected Class<? extends IPage> getPageClass(String name)
{
+ if (name == null)
+ {
+ throw new IllegalArgumentException("Argument 'name' may
not be null");
+ }
try
- {
- if (Session.exists())
+ {
+ if (Session.exists())
{
Session s = Session.get();
return (Class<? extends
IPage>)s.getClassResolver().resolveClass(name);
@@ -146,9 +259,29 @@
}
}
+ /**
+ * Extracts [EMAIL PROTECTED] PageParameters} from the URL using the
given [EMAIL PROTECTED] PageParametersEncoder}.
+ *
+ * @param url
+ * @param requestParameters
+ * @param segmentsToSkip
+ * how many URL segments should be skipped because they
"belong" to the
+ * [EMAIL PROTECTED] RequestHandlerEncoder}
+ * @param encoder
+ * @return PageParameters instance
+ */
protected PageParameters extractPageParameters(Url url,
RequestParameters requestParameters,
int segmentsToSkip, PageParametersEncoder encoder)
{
+ if (url == null)
+ {
+ throw new IllegalArgumentException("Argument 'url' may
not be null.");
+ }
+ if (encoder == null)
+ {
+ throw new IllegalArgumentException("Argument 'encoder'
may not be null.");
+ }
+
// strip the segments and first query parameter from URL
Url urlCopy = new Url(url);
while (segmentsToSkip > 0 && urlCopy.getSegments().isEmpty() ==
false)
@@ -162,24 +295,43 @@
urlCopy.getQueryParameters().remove(0);
}
- PageParameters decoded = encoder.decodePageParameters(urlCopy);
+ PageParameters decoded = encoder.decodePageParameters(urlCopy,
requestParameters);
return decoded != null ? decoded : new PageParameters();
}
+ /**
+ * Encodes the given [EMAIL PROTECTED] PageParameters} to the URL using
the given
+ * [EMAIL PROTECTED] PageParametersEncoder}. The original URL object is
unchanged.
+ *
+ * @param url
+ * @param pageParameters
+ * @param encoder
+ * @return URL with encoded parameters
+ */
protected Url encodePageParameters(Url url, PageParameters
pageParameters,
PageParametersEncoder encoder)
{
+ if (url == null)
+ {
+ throw new IllegalArgumentException("Argument 'url' may
no be null.");
+ }
+
if (pageParameters == null)
{
pageParameters = new PageParameters();
}
+ if (encoder == null)
+ {
+ throw new IllegalArgumentException("Argument 'encoder'
may not be null.");
+ }
+
Url parametersUrl =
encoder.encodePageParameters(pageParameters);
if (parametersUrl != null)
{
// copy the url
url = new Url(url);
-
+
for (String s : parametersUrl.getSegments())
{
url.getSegments().add(s);
@@ -189,25 +341,73 @@
url.getQueryParameters().add(p);
}
}
-
+
return url;
}
+ /**
+ * Creates new page instance with the specified attributes.
+ *
+ * @param pageMapName
+ * @param pageClass
+ * @param pageParameters
+ * @return new page instance
+ */
protected IPage newPageInstance(String pageMapName, Class<? extends
IPage> pageClass,
PageParameters pageParameters)
{
return getContext().newPageInstance(pageMapName, pageClass,
pageParameters);
}
+ /**
+ * Tries to get existing page instance specified by the [EMAIL
PROTECTED] PageInfo} object. If there is no
+ * such instance or there instance class doesn't match the
<code>pageClass</code> argument,
+ * new page instance is created.
+ *
+ * @param pageInfo
+ * @param pageClass
+ * @param pageParameters
+ *
+ * @return page instance
+ */
protected IPage getPageInstance(PageInfo pageInfo, Class<? extends
IPage> pageClass,
PageParameters pageParameters)
{
return getPageInstance(pageInfo, pageClass, pageParameters,
false);
}
+ /**
+ * Tries to get existing page instance specified by the [EMAIL
PROTECTED] PageInfo} object. If there is no
+ * such instance or there instance class doesn't match the
<code>pageClass</code> argument,
+ * new page instance is created.
+ * <p>
+ * If new page was created (no existing page was found) and the the
+ * <code>prepareForRenderNewPage</code> flag is set,
<code>page.repareForRender(false)</code>
+ * is called on the page. This is necessary to do when looking on a
component on stateless page
+ * as the component hierarchy has to be built.
+ *
+ * @param pageInfo
+ * @param pageClass
+ * @param pageParameters
+ * @param prepareForRenderNewPage
+ *
+ * @return page instance
+ */
protected IPage getPageInstance(PageInfo pageInfo, Class<? extends
IPage> pageClass,
PageParameters pageParameters, boolean prepareForRenderNewPage)
{
+ if (pageInfo == null)
+ {
+ throw new IllegalArgumentException("Argument 'pageInfo'
may not be null.");
+ }
+ if (pageClass == null)
+ {
+ throw new IllegalArgumentException("Argument
'pageClass' may not be null.");
+ }
+ if (pageParameters == null)
+ {
+ throw new IllegalArgumentException("Argument
'pageParameters' may not be null.");
+ }
IPage page =
getContext().getPageInstance(pageInfo.getPageMapName(), pageInfo.getPageId(),
pageInfo.getVersionNumber());
if (page != null && page.getClass().equals(pageClass) == false)
@@ -231,14 +431,4 @@
}
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);
- }
- }
}
Modified:
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=696625&r1=696624&r2=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
Thu Sep 18 03:48:56 2008
@@ -21,6 +21,11 @@
import org.apache._wicket.PageParameters;
import org.apache._wicket.request.RequestHandler;
import org.apache._wicket.request.Url;
+import org.apache._wicket.request.encoder.info.ComponentInfo;
+import org.apache._wicket.request.encoder.info.PageComponentInfo;
+import org.apache._wicket.request.encoder.info.PageInfo;
+import org.apache._wicket.request.encoder.parameters.PageParametersEncoder;
+import
org.apache._wicket.request.encoder.parameters.SimplePageParametersEncoder;
import
org.apache._wicket.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
import org.apache._wicket.request.handler.impl.BookmarkablePageRequestHandler;
import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
@@ -32,17 +37,17 @@
* Decodes and encodes the following URLs:
*
* <pre>
- * Page Instance - Render
+ * Page Class - Render (BookmarkablePageRequestHandler)
* /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
+ * Page Instance - Render Hybrid (RenderPageRequestHandler for pages that
were created using bookmarkable URLs)
* /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
+ * Page Instance - Bookmarkable Listener
(BookmarkableListenerInterfaceRequestHandler)
* /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
@@ -54,16 +59,17 @@
public class BookmarkableEncoder extends AbstractEncoder
{
private final PageParametersEncoder pageParametersEncoder;
-
+
/**
* Construct.
- * @param pageParametersEncoder
+ *
+ * @param pageParametersEncoder
*/
public BookmarkableEncoder(PageParametersEncoder pageParametersEncoder)
{
this.pageParametersEncoder = pageParametersEncoder;
}
-
+
/**
* Construct.
*/
@@ -102,28 +108,39 @@
public RequestHandler decode(Request request)
{
Url url = request.getUrl();
+
+ // check if the URL is long enough and starts with the proper
segments
if (url.getSegments().size() >= 3 &&
urlStartsWith(url, getContext().getNamespace(),
getContext().getBookmarkableIdentifier()))
{
+ // try to extract page and component information from
URL
PageComponentInfo info = getPageComponentInfo(url);
+ // load the page class
String className = url.getSegments().get(2);
Class<? extends IPage> pageClass =
getPageClass(className);
+
+ // extract the PageParameters from URL if there are any
PageParameters pageParameters =
extractPageParameters(url,
request.getRequestParameters(), 3,
pageParametersEncoder);
if (info == null || info.getPageInfo().getPageId() ==
null)
{
+ // if there are is no page instance information
(only page map name - optionally)
+ // then this is a simple bookmarkable URL
String pageMap = info != null ?
info.getPageInfo().getPageMapName() : null;
return processBookmarkable(pageMap, pageClass,
pageParameters);
}
else if (info.getPageInfo().getPageId() != null &&
info.getComponentInfo() == null)
{
+ // if there is page instance ifnromation in the
URL but no component and listener
+ // interface then this is a hybrid URL - we
need to try to reuse existing cpage instance
return processHybrid(info.getPageInfo(),
pageClass, pageParameters);
}
else if (info.getComponentInfo() != null)
{
+ // with both page instance and
component+listener this is a listener interface URL
return processListener(info, pageClass,
pageParameters);
}
}
@@ -145,6 +162,7 @@
{
if (requestHandler instanceof BookmarkablePageRequestHandler)
{
+ // simple bookmarkable URL with no page instance
information
BookmarkablePageRequestHandler handler =
(BookmarkablePageRequestHandler)requestHandler;
Url url = newUrl(handler.getPageClass());
@@ -154,19 +172,27 @@
}
else if (requestHandler instanceof RenderPageRequestHandler)
{
+ // possibly hybrid URL - bookmarkable URL with page
instance information
+ // but only allowed if the page was created by
bookamarkable URL
+
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));
+ PageInfo info = null;
+ if (!page.isPageStateless())
+ {
+ info = new PageInfo(page);
+ encodePageComponentInfo(url, new
PageComponentInfo(info, null));
+ }
return encodePageParameters(url,
page.getPageParameters(), pageParametersEncoder);
}
}
else if (requestHandler instanceof
BookmarkableListenerInterfaceRequestHandler)
{
+ // listener interface URL with page class information
BookmarkableListenerInterfaceRequestHandler handler =
(BookmarkableListenerInterfaceRequestHandler)requestHandler;
IPage page = handler.getPage();
PageInfo pageInfo = new PageInfo(page);
@@ -183,6 +209,7 @@
public int getMachingSegmentsCount(Request request)
{
+ // always return 0 here so that the mounts have higher priority
return 0;
}
Modified:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java?rev=696625&r1=696624&r2=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
Thu Sep 18 03:48:56 2008
@@ -38,7 +38,9 @@
public IPage getPageInstance(String pageMapName, int pageId, int
versionNumber);
/**
- * Creates new page instance of page with given class.
+ * Creates new page instance of page with given class. The page should
be marked as
+ * create bookmarkable, so subsequent calls to [EMAIL PROTECTED]
IPage#wasCreatedBookmarkable()}
+ * must return <code>true</code>
*
* @param pageMapName
* @param pageClass
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=696625&r1=696624&r2=696625&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
Thu Sep 18 03:48:56 2008
@@ -20,6 +20,9 @@
import org.apache._wicket.IPage;
import org.apache._wicket.request.RequestHandler;
import org.apache._wicket.request.Url;
+import org.apache._wicket.request.encoder.info.ComponentInfo;
+import org.apache._wicket.request.encoder.info.PageComponentInfo;
+import org.apache._wicket.request.encoder.info.PageInfo;
import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
import org.apache._wicket.request.request.Request;
@@ -29,15 +32,15 @@
* Decodes and encodes the following URLs:
*
* <pre>
- * Page Instance - Render
+ * Page Instance - Render (RenderPageRequestHandler)
* /wicket/page?2
* /wicket/page?2.4
* /wicket/page?abc.2.4
*
- * Page Instance - Listener
+ * Page Instance - Listener (ListenerInterfaceRequestHandler)
* /wicket/page?2-click-foo-bar-baz
* /wicket/page?2.4-click-foo-bar-baz
- * /wicket/page?pageMap.2.4-click-foo-bar-baz
+ * /wicket/page?pageMap.2.4-click-foo-bar-bazr-baz
* </pre>
*
* @author Matej Knopp
Copied:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java
(from r695936,
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ComponentInfo.java)
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java?p2=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java&p1=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ComponentInfo.java&r1=695936&r2=696625&rev=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ComponentInfo.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java
Thu Sep 18 03:48:56 2008
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache._wicket.request.encoder;
+package org.apache._wicket.request.encoder.info;
import org.apache.wicket.util.string.Strings;
@@ -25,24 +25,35 @@
*
* @author Matej Knopp
*/
-class ComponentInfo
+public class ComponentInfo
{
private final String listenerInterface;
private final String componentPath;
private static final char SEPARATOR = '-';
+ /**
+ * Construct.
+ * @param listenerInterface
+ * @param componentPath
+ */
public ComponentInfo(String listenerInterface, String componentPath)
{
this.listenerInterface = listenerInterface;
this.componentPath = componentPath;
}
+ /**
+ * @return component path
+ */
public String getComponentPath()
{
return componentPath;
}
+ /**
+ * @return listener interface name
+ */
public String getListenerInterface()
{
return listenerInterface;
Propchange:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/ComponentInfo.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageComponentInfo.java
(from r695934,
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageComponentInfo.java)
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageComponentInfo.java?p2=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageComponentInfo.java&p1=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageComponentInfo.java&r1=695934&r2=696625&rev=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageComponentInfo.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageComponentInfo.java
Thu Sep 18 03:48:56 2008
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache._wicket.request.encoder;
+package org.apache._wicket.request.encoder.info;
import org.apache.wicket.util.string.Strings;
@@ -24,13 +24,18 @@
*
* @author Matej Knopp
*/
-class PageComponentInfo
+public class PageComponentInfo
{
private final PageInfo pageInfo;
private final ComponentInfo componentInfo;
private static final char SEPARATOR = '-';
+ /**
+ * Construct.
+ * @param pageInfo
+ * @param componentInfo
+ */
public PageComponentInfo(PageInfo pageInfo, ComponentInfo componentInfo)
{
if (pageInfo == null)
@@ -40,12 +45,18 @@
this.pageInfo = pageInfo;
this.componentInfo = componentInfo;
}
-
+
+ /**
+ * @return page info instance
+ */
public PageInfo getPageInfo()
{
return pageInfo;
}
+ /**
+ * @return component info instance or <code>null</code>
+ */
public ComponentInfo getComponentInfo()
{
return componentInfo;
Propchange:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageComponentInfo.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageInfo.java
(from r696356,
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/info/PageInfo.java?p2=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageInfo.java&p1=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInfo.java&r1=696356&r2=696625&rev=696625&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/info/PageInfo.java
Thu Sep 18 03:48:56 2008
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache._wicket.request.encoder;
+package org.apache._wicket.request.encoder.info;
import org.apache._wicket.IPage;
import org.apache.wicket.Application;
@@ -34,7 +34,7 @@
*
* @author Matej Knopp
*/
-class PageInfo
+public class PageInfo
{
private final Integer pageId;
private final Integer versionNumber;
@@ -60,6 +60,11 @@
this.pageMapName = pageMapName;
}
+ /**
+ * Construct.
+
+ * @param page
+ */
public PageInfo(IPage page)
{
if (page == null)
Propchange:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/info/PageInfo.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/PageParametersEncoder.java
(from r696353,
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/parameters/PageParametersEncoder.java?p2=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/PageParametersEncoder.java&p1=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java&r1=696353&r2=696625&rev=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageParametersEncoder.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/PageParametersEncoder.java
Thu Sep 18 03:48:56 2008
@@ -14,10 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache._wicket.request.encoder;
+package org.apache._wicket.request.encoder.parameters;
import org.apache._wicket.PageParameters;
import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.RequestParameters;
import org.apache._wicket.request.Url;
/**
@@ -41,7 +42,10 @@
* [EMAIL PROTECTED] RequestHandler} specified segments/parameters
stripped.
*
* @param url
+ * @param parameters
+ * provides all request (GET and POST) parameters. Some
encoders might require the
+ * POST parameters which are not part of the URL
* @return [EMAIL PROTECTED] PageParameters} instance
*/
- public PageParameters decodePageParameters(Url url);
+ public PageParameters decodePageParameters(Url url, RequestParameters
parameters);
}
Propchange:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/PageParametersEncoder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/SimplePageParametersEncoder.java
(from r696353,
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/parameters/SimplePageParametersEncoder.java?p2=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/SimplePageParametersEncoder.java&p1=wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java&r1=696353&r2=696625&rev=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/SimplePageParametersEncoder.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/SimplePageParametersEncoder.java
Thu Sep 18 03:48:56 2008
@@ -14,11 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache._wicket.request.encoder;
+package org.apache._wicket.request.encoder.parameters;
import java.util.List;
import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestParameters;
import org.apache._wicket.request.Url;
import org.apache._wicket.request.Url.QueryParameter;
import org.apache.wicket.util.string.StringValue;
@@ -37,7 +38,7 @@
{
}
- public PageParameters decodePageParameters(Url url)
+ public PageParameters decodePageParameters(Url url, RequestParameters
requestParameters)
{
PageParameters parameters = new PageParameters();
Propchange:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/parameters/SimplePageParametersEncoder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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=696625&r1=696624&r2=696625&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
Thu Sep 18 03:48:56 2008
@@ -3,17 +3,18 @@
In order for Wicket to produce valid URLs I've decided to use - as
separator instead
This will only affect listener URLs anyway, which are not shown in
location bar
(except for bookmarkable listeners on stateless pages)
+ '-' in component name is encoded as '--'.
NOT BOOKMARKABLE
----------------
-Page Instance - Render
+Page Instance - Render (RenderPageRequestHandler)
/wicket/page?2
/wicket/page?2.4
/wicket/page?abc.2.4
-Page Instance - Listener
+Page Instance - Listener (ListenerInterfaceRequestHandler)
/wicket/page?2-click-foo-bar-baz
/wicket/page?2.4-click-foo-bar-baz
/wicket/page?pageMap.2.4-click-foo-bar-baz
@@ -21,17 +22,17 @@
BOOKMARKABLE - NOT MOUNTED
--------------------------
-Page Instance - Render
+Page Class - Render (BookmarkablePageRequestHandler)
/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
+Page Instance - Render Hybrid (RenderPageRequestHandler for pages that were
created using bookmarkable URLs)
/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
+Page Instance - Bookmarkable Listener
(BookmarkableListenerInterfaceRequestHandler)
/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
@@ -40,17 +41,17 @@
BOOKMARKABLE - MOUNTED
----------------------
-Page Instance - Render
+Page Class - Render (BookmarkablePageRequestHandler for mounted pages)
/mount/point
/mount/point?pageMap
(these will redirect to hybrid alternative if page is not stateless)
-Page Instance - Render Hybrid
+Page Instance - Render Hybrid (RenderPageRequestHandler for mounted pages)
/mount/point?2
/mount/point?2.4
/mount/point?pageMap.2.4
-Page instance - Bookmarkable Listener
+Page Instance - Bookmarkable Listener
(BookmarkableListenerInterfaceRequestHandler for mounted pages)
/mount/point?2-click-foo-bar-baz
/mount/point?2.4-click-foo-bar-baz
/mount/point?pageMap.2.4-click-foo-bar-baz
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=696625&r1=696624&r2=696625&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
Thu Sep 18 03:48:56 2008
@@ -138,9 +138,23 @@
return this;
}
+ private boolean stateless = false;
+
+ /**
+ * Sets the stateless flag
+ *
+ * @param stateless
+ * @return <code>this</code>
+ */
+ public MockPage setPageStateless(boolean stateless)
+ {
+ this.stateless = stateless;
+ return this;
+ }
+
public boolean isPageStateless()
{
- return false;
+ return stateless;
}
public void renderPage()
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=696625&r1=696624&r2=696625&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
Thu Sep 18 03:48:56 2008
@@ -56,7 +56,7 @@
/**
*
*/
- public void test1()
+ public void testDecode1()
{
Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME);
RequestHandler handler = encoder.decode(getRequest(url));
@@ -71,7 +71,7 @@
/**
*
*/
- public void test2()
+ public void testDecode2()
{
Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
"/indexed1?a=b&b=c");
RequestHandler handler = encoder.decode(getRequest(url));
@@ -92,7 +92,7 @@
/**
*
*/
- public void test3()
+ public void testDecode3()
{
Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
"?15");
RequestHandler handler = encoder.decode(getRequest(url));
@@ -105,7 +105,7 @@
/**
*
*/
- public void test4()
+ public void testDecode4()
{
Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
"/i1/i2?abc.15.5&a=b&b=c");
RequestHandler handler = encoder.decode(getRequest(url));
@@ -127,7 +127,7 @@
/**
*
*/
- public void test5()
+ public void testDecode5()
{
Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
"?15-ILinkListener-foo-bar");
RequestHandler handler = encoder.decode(getRequest(url));
@@ -145,7 +145,7 @@
/**
*
*/
- public void test6()
+ public void testDecode6()
{
Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
"/i1/i2?abc.15.5-ILinkListener-foo-bar&a=b&b=c");
@@ -173,7 +173,7 @@
/**
*
*/
- public void test7()
+ public void testEncode1()
{
RequestHandler handler = new
BookmarkablePageRequestHandler(MockPage.class, null,
new PageParameters());
@@ -184,7 +184,7 @@
/**
*
*/
- public void test8()
+ public void testEncode2()
{
PageParameters parameters = new PageParameters();
parameters.setIndexedParameter(0, "i1");
@@ -200,7 +200,7 @@
/**
*
*/
- public void test9()
+ public void testEncode3()
{
PageParameters parameters = new PageParameters();
parameters.setIndexedParameter(0, "i1");
@@ -219,7 +219,7 @@
/**
*
*/
- public void test10()
+ public void testEncode4()
{
MockPage page = new MockPage(15, 5, "abc");
page.getPageParameters().setIndexedParameter(0, "i1");
@@ -238,7 +238,7 @@
/**
*
*/
- public void test11()
+ public void testEncode5()
{
MockPage page = new MockPage(15, 5, "abc");
page.getPageParameters().setIndexedParameter(0, "i1");
@@ -260,7 +260,7 @@
/**
*
*/
- public void test12()
+ public void testEncode6()
{
MockPage page = new MockPage(15, 5, "abc");
page.getPageParameters().setIndexedParameter(0, "i1");
@@ -282,4 +282,21 @@
assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME +
"/i1/i2?abc.15.5-ILinkListener-foo-bar&a=b&b=c",
url.toString());
}
+
+ /**
+ *
+ */
+ public void testEncode7()
+ {
+ MockPage page = new MockPage(15, 5, "abc");
+ page.setBookmarkable(true);
+ page.setCreatedBookmarkable(true);
+ page.setPageStateless(true);
+
+ RequestHandler handler = new RenderPageRequestHandler(page);
+
+ Url url = encoder.encode(handler);
+
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME,
url.toString());
+ }
}
Modified:
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ComponentInfoTest.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ComponentInfoTest.java?rev=696625&r1=696624&r2=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ComponentInfoTest.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ComponentInfoTest.java
Thu Sep 18 03:48:56 2008
@@ -16,6 +16,8 @@
*/
package org.apache._wicket.request.encoder;
+import org.apache._wicket.request.encoder.info.ComponentInfo;
+
import junit.framework.TestCase;
/**
Modified:
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageComponentInfoTest.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageComponentInfoTest.java?rev=696625&r1=696624&r2=696625&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageComponentInfoTest.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/PageComponentInfoTest.java
Thu Sep 18 03:48:56 2008
@@ -16,6 +16,8 @@
*/
package org.apache._wicket.request.encoder;
+import org.apache._wicket.request.encoder.info.PageComponentInfo;
+
import junit.framework.TestCase;
/**
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=696625&r1=696624&r2=696625&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
Thu Sep 18 03:48:56 2008
@@ -51,7 +51,7 @@
/**
*
*/
- public void test1()
+ public void testDecode1()
{
Url url = Url.parse("wicket/page?4");
@@ -65,7 +65,7 @@
/**
*
*/
- public void test2()
+ public void testDecode2()
{
Url url = Url.parse("wicket/page?4.5");
@@ -79,7 +79,7 @@
/**
*
*/
- public void test3()
+ public void testDecode3()
{
Url url = Url.parse("wicket/page/ingore/me?abc.4.5&a=3&b=3");
@@ -93,7 +93,7 @@
/**
*
*/
- public void test4()
+ public void testDecode4()
{
Url url = Url.parse("wicket/page?abc.4.5-ILinkListener-a-b-c");
@@ -109,7 +109,7 @@
/**
*
*/
- public void test5()
+ public void testDecode5()
{
Url url =
Url.parse("wickett/pagee?abc.4.5-ILinkListener-a:b-c");
@@ -120,7 +120,7 @@
/**
*
*/
- public void test6()
+ public void testDecode6()
{
Url url = Url.parse("wicket/page?abc");
@@ -131,7 +131,7 @@
/**
*
*/
- public void test7()
+ public void testEncode1()
{
MockPage page = new MockPage(15, 4, "pm1");
RequestHandler handler = new RenderPageRequestHandler(page);
@@ -143,7 +143,7 @@
/**
*
*/
- public void test8()
+ public void testEncode2()
{
MockPage page = new MockPage(15, 0, null);
RequestHandler handler = new RenderPageRequestHandler(page);
@@ -155,7 +155,7 @@
/**
*
*/
- public void test9()
+ public void testEncode3()
{
MockPage page = new MockPage(15, 0, null);