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


Reply via email to