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/09/15 18:49:29 UTC
svn commit: r695546 - in
/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket:
./ request/ request/encoder/ request/handler/ request/handler/impl/
Author: knopp
Date: Mon Sep 15 09:49:28 2008
New Revision: 695546
URL: http://svn.apache.org/viewvc?rev=695546&view=rev
Log:
is this going to work?
Added:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/ComponentRequestHandler.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/ListenerInterfaceRequestHandler.java (with props)
Removed:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractNotMountedEncoder.java
Modified:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IComponent.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/RequestHandlerEncoder.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/EncoderContext.java
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IComponent.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IComponent.java?rev=695546&r1=695545&r2=695546&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IComponent.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/IComponent.java Mon Sep 15 09:49:28 2008
@@ -62,6 +62,13 @@
public String getMarkupId(boolean createIfDoesNotExist);
/**
+ * Returns page this component belongs to.
+ *
+ * @return page instance or <code>null</code>
+ */
+ public IPage getPage();
+
+ /**
* Gets the component at the given path.
*
* @param path
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/RequestHandlerEncoder.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/RequestHandlerEncoder.java?rev=695546&r1=695545&r2=695546&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/RequestHandlerEncoder.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/RequestHandlerEncoder.java Mon Sep 15 09:49:28 2008
@@ -41,7 +41,7 @@
/**
* Returns the amount of matching segments for the request. When two {@link RequestHandlerEncoder}s
- * are capable of decoding a request, the one with highest maching segments count will be used.
+ * are capable of decoding a request, the one with highest matching segments count will be used.
* <p>
* For example when there are two encoders for mounted page, one mapped to <code>/foo</code> another
* to <code>/foo/bar</code> and the incomming reqest URL is </code>/foo/bar/baz</code>, the encoder
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=695546&r1=695545&r2=695546&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 Mon Sep 15 09:49:28 2008
@@ -16,50 +16,106 @@
*/
package org.apache._wicket.request.encoder;
-import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.IComponent;
+import org.apache._wicket.IPage;
import org.apache._wicket.request.RequestHandlerEncoder;
import org.apache._wicket.request.Url;
-import org.apache._wicket.request.request.Request;
+import org.apache._wicket.request.Url.QueryParameter;
import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.protocol.http.PageExpiredException;
+/**
+ * Convenience class for implementing encoders.
+ *
+ * @author Matej Knopp
+ */
public abstract class AbstractEncoder implements RequestHandlerEncoder
{
protected EncoderContext getContext()
{
+ // TODO
return null;
};
protected String requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
{
- if (listenerInterface == null)
- {
- throw new IllegalArgumentException("Argument 'listenerInterface' may not be null.");
- }
- return listenerInterface.getName();
+ return getContext().requestListenerInterfaceToString(listenerInterface);
+ }
+
+ protected RequestListenerInterface requestListenerInterfaceFromString(String interfaceName)
+ {
+ return getContext().requestListenerInterfaceFromString(interfaceName);
}
-
- protected RequestListenerInterface requestListenerIntefaceFromString(String interfaceName)
+
+ protected boolean urlStartsWith(Url url, String... segments)
{
- if (interfaceName == null)
+ if (url == null)
+ {
+ return false;
+ }
+ else
{
- throw new IllegalArgumentException("Argument 'interfaceName' may not be null.");
+ if (url.getSegments().size() < segments.length)
+ {
+ return false;
+ }
+ else
+ {
+ for (int i = 0; i < segments.length; ++i)
+ {
+ if (segments[i].equals(url.getSegments().get(i)) == false)
+ {
+ return false;
+ }
+ }
+ }
}
- return RequestListenerInterface.forName(interfaceName);
+ return true;
}
-
- public RequestHandler decode(Request request)
+
+ protected PageComponentInfo getPageComponentInfo(Url url)
{
+ if (url.getQueryParameters().size() > 0)
+ {
+ QueryParameter param = url.getQueryParameters().get(0);
+ if (param.getValue() == null)
+ {
+ return PageComponentInfo.parse(param.getName());
+ }
+ }
return null;
}
- public Url encode(RequestHandler requestHandler)
+ protected IPage getPageInstance(PageInfo info, boolean throwExpiredExceptionIfNotFound)
{
- return null;
+ IPage page = getContext().getPageInstance(info.getPageMapName(), info.getPageId(),
+ info.getVersionNumber());
+
+ if (page == null && throwExpiredExceptionIfNotFound)
+ {
+ throw new PageExpiredException("Page expired.");
+ }
+
+ return page;
}
- public int getMachingSegmentsCount(Request request)
+ protected IPage getPageInstance(PageInfo info)
{
- return 0;
+ return getPageInstance(info, true);
}
+ protected IComponent getComponent(IPage page, String componentPath)
+ {
+ IComponent component = page.get(componentPath);
+ if (component == null)
+ {
+ throw new WicketRuntimeException("Component with path " + componentPath +
+ " not found in page.");
+ }
+ else
+ {
+ return component;
+ }
+ }
}
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=695546&r1=695545&r2=695546&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 Mon Sep 15 09:49:28 2008
@@ -18,6 +18,7 @@
import org.apache._wicket.IPage;
import org.apache._wicket.PageParameters;
+import org.apache.wicket.RequestListenerInterface;
/**
* Utility interface for providing and creating new page instances.
@@ -45,5 +46,36 @@
* @return new page instance
*/
public IPage newPageInstance(String pageMapName, Class<? extends IPage> pageClass,
- PageParameters pageParameters);
+ PageParameters pageParameters);
+
+ /**
+ * @return the namespace for Wicket URLs.
+ */
+ public String getNamespace();
+
+ /**
+ * @return identifier for non bookmarkable URLs
+ */
+ public String getPageIdentifier();
+
+ /**
+ * @return identifier for bookmarkable URLs
+ */
+ public String getBookmarkableIdentifier();
+
+ /**
+ * Returns the listener interface name as string.
+ *
+ * @param listenerInterface
+ * @return listener interface name as string
+ */
+ public String requestListenerInterfaceToString(RequestListenerInterface listenerInterface);
+
+ /**
+ * Returns listener interface for the name
+ *
+ * @param interfaceName
+ * @return listener interface
+ */
+ public RequestListenerInterface requestListenerInterfaceFromString(String interfaceName);
}
Added: 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=695546&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java Mon Sep 15 09:49:28 2008
@@ -0,0 +1,133 @@
+/*
+ * 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.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;
+import org.apache.wicket.RequestListenerInterface;
+
+/**
+ * Decodes and encodes the following URLs:
+ *
+ * <pre>
+ * /wicket/page?2
+ * /wicket/page?2.4
+ * /wicket/page?abc.2.4
+ *
+ * /wicket/page?2:click:foo:bar:baz
+ * /wicket/page?2.4:click:foo:bar:baz
+ * /wicket/page?pageMap.2.4:click:foo:bar:baz
+ * </pre>
+ *
+ * @author Matej Knopp
+ */
+public class PageInstanceEncoder extends AbstractEncoder
+{
+
+ /**
+ * Construct.
+ */
+ public PageInstanceEncoder()
+ {
+ }
+
+
+ public RequestHandler decode(Request request)
+ {
+ Url url = request.getUrl();
+ if (urlStartsWith(url, getContext().getNamespace(), getContext().getPageIdentifier()))
+ {
+ PageComponentInfo info = getPageComponentInfo(url);
+ if (info != null)
+ {
+ IPage page = getPageInstance(info.getPageInfo());
+ if (info.getComponentInfo() == null)
+ {
+ // render page
+ return new RenderPageRequestHandler(page);
+ }
+ else
+ {
+ ComponentInfo componentInfo = info.getComponentInfo();
+ // listener interface
+ IComponent component = getComponent(page, componentInfo.getComponentPath());
+ RequestListenerInterface listenerInterface = requestListenerInterfaceFromString(componentInfo.getListenerInterface());
+
+ return new ListenerInterfaceRequestHandler(component, page, listenerInterface);
+ }
+ }
+ }
+ return null;
+ }
+
+ public Url encode(RequestHandler requestHandler)
+ {
+ PageComponentInfo info = null;
+
+ if (requestHandler instanceof RenderPageRequestHandler)
+ {
+ IPage page = ((RenderPageRequestHandler)requestHandler).getPage();
+ if (page.isBookmarkable() && page.wasCreatedBookmarkable())
+ {
+ // this page will be handled by bookmarkable or mounted encoder
+ return null;
+ }
+
+ PageInfo i = new PageInfo(page.getNumericId(), page.getCurrentVersionNumber(),
+ page.getPageMapName());
+ info = new PageComponentInfo(i, null);
+ }
+ else if (requestHandler instanceof ListenerInterfaceRequestHandler)
+ {
+ ListenerInterfaceRequestHandler handler = (ListenerInterfaceRequestHandler)requestHandler;
+ IPage page = handler.getPage();
+ String componentPath = handler.getComponent().getPath();
+ RequestListenerInterface listenerInterface = handler.getListenerInterface();
+
+ PageInfo pageInfo = new PageInfo(page.getNumericId(), page.getCurrentVersionNumber(),
+ page.getPageMapName());
+ 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);
+ return url;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public int getMachingSegmentsCount(Request request)
+ {
+ return 2;
+ }
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/PageInstanceEncoder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/ComponentRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/ComponentRequestHandler.java?rev=695546&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/ComponentRequestHandler.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/ComponentRequestHandler.java Mon Sep 15 09:49:28 2008
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+import org.apache._wicket.IComponent;
+import org.apache._wicket.request.RequestHandler;
+
+/**
+ * Request handler that works with a component.
+ *
+ * @author Matje Knopp
+ */
+public interface ComponentRequestHandler extends RequestHandler
+{
+ /**
+ * Returns the component instance.
+ *
+ * @return component instance
+ */
+ public IComponent getComponent();
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/ComponentRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/ListenerInterfaceRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/ListenerInterfaceRequestHandler.java?rev=695546&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/ListenerInterfaceRequestHandler.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/ListenerInterfaceRequestHandler.java Mon Sep 15 09:49:28 2008
@@ -0,0 +1,93 @@
+/*
+ * 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.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.WicketRuntimeException;
+
+public class ListenerInterfaceRequestHandler implements PageRequestHandler, ComponentRequestHandler
+{
+ private final IComponent component;
+ private final IPage page;
+ private final RequestListenerInterface listenerInterface;
+
+ public ListenerInterfaceRequestHandler(IComponent component, IPage page,
+ RequestListenerInterface listenerInterface)
+ {
+ 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();
+ }
+
+ public RequestListenerInterface getListenerInterface()
+ {
+ return listenerInterface;
+ }
+
+ public void respond(RequestCycle requestCycle)
+ {
+ if (component.getPage() == page)
+ {
+ listenerInterface.invoke((Page)page, (Component)component);
+ requestCycle.replaceCurrentRequestHandler(new RenderPageRequestHandler(page));
+ }
+ else
+ {
+ throw new WicketRuntimeException("Component " + component +
+ " has been removed from page.");
+ }
+ }
+
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/ListenerInterfaceRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain