Author: ivaynberg
Date: Tue Oct 6 21:29:34 2009
New Revision: 822516
URL: http://svn.apache.org/viewvc?rev=822516&view=rev
Log:
stab number two at mounting. now the mountmapper always chains infront of
another mapper
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/Mount.java
(with props)
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestHandler.java
(contents, props changed)
- copied, changed from r822487,
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareRequestHandler2.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestMapper.java
(with props)
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
(with props)
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
(with props)
Removed:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareMapper.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareMapper2.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareRequestHandler.java
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareRequestHandler2.java
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/Mount.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/Mount.java?rev=822516&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/Mount.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/Mount.java
Tue Oct 6 21:29:34 2009
@@ -0,0 +1,31 @@
+package org.apache.wicket.request.mapper.mount;
+
+import org.apache.wicket.request.Url;
+
+public class Mount
+{
+ private final Url url;
+ private MountParameters mountParameters = new MountParameters();
+
+ public Mount(Url url)
+ {
+ this.url = url;
+ }
+
+ public void setMountParameters(MountParameters mountParameters)
+ {
+ this.mountParameters = mountParameters;
+ }
+
+ public MountParameters getMountParameters()
+ {
+ return mountParameters;
+ }
+
+ public Url getUrl()
+ {
+ return url;
+ }
+
+
+}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/Mount.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java?rev=822516&r1=822515&r2=822516&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
Tue Oct 6 21:29:34 2009
@@ -15,19 +15,41 @@
*/
public abstract class MountMapper extends AbstractMapper
{
- private String[] mountSegments;
+ private final String[] mountSegments;
+ private final MountedRequestMapper mapper;
- public MountMapper(String mountPath)
+ public MountMapper(String mountPath, MountedRequestMapper mapper)
{
Check.argumentNotEmpty(mountPath, "mountPath");
+ Check.argumentNotNull(mapper, "mapper");
+
this.mountSegments = getMountSegments(mountPath);
+ this.mapper = mapper;
+ }
+
+ public MountMapper(String mountPath, RequestMapper mapper)
+ {
+ Check.argumentNotEmpty(mountPath, "mountPath");
+ Check.argumentNotNull(mapper, "mapper");
+
+ this.mountSegments = getMountSegments(mountPath);
+ this.mapper = new UnmountedMapperAdapter(mapper);
+ }
+
+ public MountMapper(String mountPath, RequestHandler handler)
+ {
+ Check.argumentNotEmpty(mountPath, "mountPath");
+ Check.argumentNotNull(handler, "handler");
+
+ this.mountSegments = getMountSegments(mountPath);
+ this.mapper = new UnmountedRequestHandlerAdapter(handler);
}
public int getCompatibilityScore(Request request)
{
if (urlStartsWith(request.getUrl(), mountSegments))
{
- return mountSegments.length;
+ return mountSegments.length +
mapper.getCompatibilityScore(dismountRequest(request));
}
else
{
@@ -35,6 +57,14 @@
}
}
+ private Request dismountRequest(Request request)
+ {
+ Url dismountedUrl = new Url(request.getUrl());
+ dismountedUrl.removeLeadingSegments(mountSegments.length);
+ return request.requestWithUrl(dismountedUrl);
+ }
+
+
public final RequestHandler mapRequest(Request request)
{
final Url url = request.getUrl();
@@ -51,48 +81,39 @@
}
}
- Url dismountedUrl = new Url(request.getUrl());
- dismountedUrl.removeLeadingSegments(mountSegments.length);
-
- return map(request.requestWithUrl(dismountedUrl), params);
+ return mapper.mapRequest(dismountRequest(request), params);
}
return null;
}
- protected abstract RequestHandler map(Request request, MountParameters
params);
-
public Url mapHandler(RequestHandler handler)
{
- if (supportsHandler(handler))
- {
- final MountParameters mountParameters =
mapMountParameters(handler);
- Url url = mapUnmountedUrl(handler);
- for (int i = mountSegments.length; i > 0; i--)
- {
- String segment = mountSegments[i];
- String placeholder = getPlaceholder(segment);
- String replacement =
mountParameters.getValue(placeholder).toString();
- // TODO factor out
- if (replacement == null)
- {
- replacement = placeholder;
- }
- url.getSegments().add(0, replacement);
- }
+ Mount mount = mapper.mapHandler(handler);
- return url;
+ if (mount == null)
+ {
+ return null;
}
- return null;
- }
- protected abstract boolean supportsHandler(RequestHandler handler);
+ // TODO
+ // Check.notNull(mount.getUrl());
+ // Check.notNull(mount.getMountParameters());
- protected abstract MountParameters mapMountParameters(RequestHandler
handler);
+ for (int i = mountSegments.length; i > 0; i--)
+ {
+ String segment = mountSegments[i];
+ String placeholder = getPlaceholder(segment);
+ String replacement =
mount.getMountParameters().getValue(placeholder).toString();
- protected Url mapUnmountedUrl(RequestHandler handler)
- {
- return new Url();
+ if (replacement == null)
+ {
+ throw new IllegalStateException();// TODO message
+ }
+ mount.getUrl().getSegments().add(0, replacement);
+ }
+
+ return mount.getUrl();
}
Copied:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestHandler.java
(from r822487,
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareRequestHandler2.java)
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestHandler.java?p2=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestHandler.java&p1=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareRequestHandler2.java&r1=822487&r2=822516&rev=822516&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountAwareRequestHandler2.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestHandler.java
Tue Oct 6 21:29:34 2009
@@ -10,7 +10,7 @@
* @author igor.vaynberg
*
*/
-public interface MountAwareRequestHandler2 extends RequestHandler
+public interface MountedRequestHandler extends RequestHandler
{
/**
* @return mount parameters
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestMapper.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestMapper.java?rev=822516&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestMapper.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestMapper.java
Tue Oct 6 21:29:34 2009
@@ -0,0 +1,53 @@
+package org.apache.wicket.request.mapper.mount;
+
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.RequestHandler;
+
+/**
+ * TODO javadoc, explain "parameters resolved from the mount"
+ *
+ * @author igor.vaynberg
+ *
+ */
+public interface MountedRequestMapper
+{
+ /**
+ * Returns {...@link RequestHandler} for the request or <code>null</code>
if the encoder does not
+ * recognize the URL.
+ *
+ * @param request
+ * provides access to request data (i.e. Url and Parameters)
+ * @param mountParams
+ * parameters resolved from the mount
+ * @return RequestHandler instance or <code>null</code>
+ */
+ RequestHandler mapRequest(Request request, MountParameters mountParams);
+
+ /**
+ * Returns the score representing how compatible this request mapper is to
processing the given
+ * request. When a request comes in all mappers are scored and are tried
in order from highest
+ * score to lowest.
+ * <p>
+ * A good criteria for calculating the score is the number of matched url
segments. 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
+ * mapped to <code>/foo/bar</code> will handle the request first as it has
matching segments
+ * count of 2 while the first one has only matching segments count of 1.
+ * <p>
+ * Note that the method can return value greater then zero even if the
encoder can not decode
+ * the request.
+ *
+ * @param request
+ * @return count of matching segments
+ */
+ int getCompatibilityScore(Request request);
+
+ /**
+ * Returns the {...@link Mount} for given {...@link RequestHandler} or
<code>null</code> if the
+ * encoder does not recognize the request handler.
+ *
+ * @param requestHandler
+ * @return Url instance or <code>null</code>.
+ */
+ Mount mapHandler(RequestHandler requestHandler);
+}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/MountedRequestMapper.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java?rev=822516&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
Tue Oct 6 21:29:34 2009
@@ -0,0 +1,41 @@
+package org.apache.wicket.request.mapper.mount;
+
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.RequestHandler;
+import org.apache.wicket.request.RequestMapper;
+import org.apache.wicket.request.Url;
+
+/**
+ * Adapts a {...@link RequestMapper} to be used as a {...@link
MountedRequestMapper}
+ *
+ * TODO javadoc
+ *
+ * @author igor.vaynberg
+ *
+ */
+class UnmountedMapperAdapter implements MountedRequestMapper
+{
+ private final RequestMapper mapper;
+
+ public UnmountedMapperAdapter(RequestMapper mapper)
+ {
+ super();
+ this.mapper = mapper;
+ }
+
+ public int getCompatibilityScore(Request request)
+ {
+ return mapper.getCompatibilityScore(request);
+ }
+
+ public Mount mapHandler(RequestHandler requestHandler)
+ {
+ Url url = mapper.mapHandler(requestHandler);
+ return new Mount(url);
+ }
+
+ public RequestHandler mapRequest(Request request, MountParameters
mountParams)
+ {
+ return mapper.mapRequest(request);
+ }
+}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java?rev=822516&view=auto
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
(added)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
Tue Oct 6 21:29:34 2009
@@ -0,0 +1,39 @@
+package org.apache.wicket.request.mapper.mount;
+
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.RequestHandler;
+import org.apache.wicket.request.Url;
+
+/**
+ * Adapts a singleton {...@link RequestHandler} instance to {...@link
MountedRequestMapper}
+ *
+ * TODO javadoc
+ *
+ * @author igor.vaynberg
+ *
+ */
+class UnmountedRequestHandlerAdapter implements MountedRequestMapper
+{
+ private final RequestHandler handler;
+
+ public UnmountedRequestHandlerAdapter(RequestHandler handler)
+ {
+ this.handler = handler;
+ }
+
+ public int getCompatibilityScore(Request request)
+ {
+ return 0;
+ }
+
+ public Mount mapHandler(RequestHandler requestHandler)
+ {
+ return new Mount(new Url());
+ }
+
+ public RequestHandler mapRequest(Request request, MountParameters
mountParams)
+ {
+ return handler;
+ }
+
+}
Propchange:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain