Author: knopp
Date: Sat Jul 28 02:52:59 2007
New Revision: 560525

URL: http://svn.apache.org/viewvc?view=rev&rev=560525
Log:
WICKET-30 - IRequestTargetUrlCodingStrategy should decide if it can handle the 
mount point

Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
 Sat Jul 28 02:52:59 2007
@@ -932,14 +932,10 @@
                                final String key = (String)entry.getKey();
                                if (path.startsWith(key))
                                {
-                                       /*
-                                        * We need to match /mount/point or
-                                        * /mount/point/with/extra/path, but 
not /mount/pointXXX
-                                        */
-                                       String remainder = 
path.substring(key.length());
-                                       if (remainder.length() == 0 || 
remainder.startsWith("/"))
+                                       IRequestTargetUrlCodingStrategy 
strategy = (IRequestTargetUrlCodingStrategy)entry.getValue();
+                                       if (strategy.matches(path))
                                        {
-                                               return 
(IRequestTargetUrlCodingStrategy)entry.getValue();
+                                               return strategy;
                                        }
                                }
                        }

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/AbstractRequestTargetUrlCodingStrategy.java
 Sat Jul 28 02:52:59 2007
@@ -236,4 +236,21 @@
                }
 
        }
+
+       public boolean matches(String path)
+       {
+               if (path.startsWith(mountPath))
+               {
+                       /*
+                        * We need to match /mount/point or
+                        * /mount/point/with/extra/path, but not /mount/pointXXX
+                        */
+                       String remainder = path.substring(mountPath.length());
+                       if (remainder.length() == 0 || 
remainder.startsWith("/"))
+                       {
+                               return true;
+                       }
+               }
+               return false;
+       }
 }

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
 Sat Jul 28 02:52:59 2007
@@ -115,8 +115,8 @@
                        }
                        else
                        {
-                               return new 
HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef.get(),
-                                               parameters);
+                               return new 
HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef
+                                               .get(), parameters);
                        }
                }
 
@@ -262,31 +262,36 @@
         */
        protected PageInfoExtraction extractPageInfo(String url)
        {
-               int lastIndexLeft = url.lastIndexOf('(');
-               int lastIndexRight = url.lastIndexOf(')');
+               int lastIndexLeft = url.lastIndexOf(getBeginSeparator());
+               int lastIndexRight = url.lastIndexOf(getEndSeparator());
                if (lastIndexLeft != -1 && lastIndexRight != -1 && 
lastIndexLeft < lastIndexRight &&
-                               lastIndexRight - lastIndexLeft > 0 && 
lastIndexRight == url.length() - 1 &&
-                               url.charAt(lastIndexLeft - 1) == '/')
+                               lastIndexRight - lastIndexLeft > 0 && 
lastIndexRight == url.length() - 1)
                {
                        String infoSubstring = url.substring(lastIndexLeft + 1, 
lastIndexRight);
                        PageInfo info = PageInfo.parsePageInfo(infoSubstring);
                        if (info != null)
                        {
-                               return new PageInfoExtraction(url.substring(0, 
lastIndexLeft - 1), info);
+                               return new PageInfoExtraction(url.substring(0, 
lastIndexLeft), info);
                        }
                }
                return new PageInfoExtraction(url, null);
        }
 
+       protected char getBeginSeparator()
+       {
+               return '(';
+       }
+
+       protected char getEndSeparator()
+       {
+               return ')';
+       }
+
        protected String addPageInfo(String url, PageInfo pageInfo)
        {
                if (pageInfo != null)
                {
-                       if (url.endsWith("/") == false)
-                       {
-                               url = url + "/";
-                       }
-                       return url + "(" + pageInfo.toString() + ")";
+                       return url + getBeginSeparator() + pageInfo.toString() 
+ getEndSeparator();
                }
                else
                {
@@ -468,22 +473,24 @@
        {
                /**
                 * Construct.
+                * 
                 * @param pageMapName
                 * @param pageClass
                 * @param pageParameters
                 */
-               public HybridBookmarkablePageRequestTarget(String pageMapName, 
Class pageClass, PageParameters pageParameters)
+               public HybridBookmarkablePageRequestTarget(String pageMapName, 
Class pageClass,
+                               PageParameters pageParameters)
                {
                        super(pageMapName, pageClass, pageParameters);
                }
-               
+
                protected Page newPage(Class pageClass, RequestCycle 
requestCycle)
                {
                        Page page = super.newPage(pageClass, requestCycle);
                        page.setMetaData(PAGE_PARAMETERS_META_DATA_KEY, 
getPageParameters());
                        return page;
                }
-               
+
                public void respond(RequestCycle requestCycle)
                {
                        super.respond(requestCycle);
@@ -497,6 +504,39 @@
                        }
                }
        };
+
+       /**
+        * @see 
org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#matches(java.lang.String)
+        */
+       public boolean matches(String path)
+       {
+               if (path.startsWith(getMountPath()))
+               {
+                       /*
+                        * We need to match /mount/point or 
/mount/point/with/extra/path,
+                        * but not /mount/pointXXX
+                        */
+                       String remainder = 
path.substring(getMountPath().length());
+                       if (remainder.length() == 0 || 
remainder.startsWith("/"))
+                       {
+                               return true;
+                       }
+                       /*
+                        * We also need to accept /mount/point(XXX)
+                        */
+                       if (remainder.length() > 2 && remainder.charAt(0) == 
getBeginSeparator() &&
+                                       remainder.charAt(remainder.length() - 
1) == getEndSeparator())
+                       {
+                               String substring = remainder.substring(1, 
remainder.length() - 1);
+                               PageInfo info = 
PageInfo.parsePageInfo(substring);
+                               if (info != null)
+                               {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
 
        public String toString()
        {

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java?view=diff&rev=560525&r1=560524&r2=560525
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/IRequestTargetUrlCodingStrategy.java
 Sat Jul 28 02:52:59 2007
@@ -66,4 +66,11 @@
         *         target
         */
        boolean matches(IRequestTarget requestTarget);
+       
+       /**
+        * Returns true if this mounter is applicable for the URL path
+        * @param path
+        * @return
+        */
+       boolean matches(String path);
 }


Reply via email to