Author: jdonnerstag
Date: Wed Apr 15 18:37:09 2009
New Revision: 765297

URL: http://svn.apache.org/viewvc?rev=765297&view=rev
Log:
eliminate warnings

Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java?rev=765297&r1=765296&r2=765297&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
 Wed Apr 15 18:37:09 2009
@@ -58,11 +58,54 @@
 public class HybridUrlCodingStrategy extends 
AbstractRequestTargetUrlCodingStrategy
 {
        /** bookmarkable page class. */
-       protected final WeakReference/* <Class> */pageClassRef;
+       protected final WeakReference<Class<? extends Page>> pageClassRef;
 
        private final boolean redirectOnBookmarkableRequest;
 
        /**
+        * Meta data key to store PageParameters in page instance. This is used 
to save the
+        * PageParameters that were used to create the page instance so that 
later they can be used when
+        * generating page URL
+        */
+       public static final PageParametersMetaDataKey 
PAGE_PARAMETERS_META_DATA_KEY = new PageParametersMetaDataKey();
+
+       private static class PageParametersMetaDataKey extends 
MetaDataKey<PageParameters>
+       {
+               private static final long serialVersionUID = 1L;
+       }
+
+       // used to store number of trailing slashes in page url (prior the 
PageInfo) part. This is
+       // necessary to maintain the exact number of slashes after page 
redirect, so that we don't break
+       // things that rely on URL depth (other mounted URLs)
+       private static final OriginalUrlTrailingSlashesCountMetaDataKey 
ORIGINAL_TRAILING_SLASHES_COUNT_METADATA_KEY = new 
OriginalUrlTrailingSlashesCountMetaDataKey();
+
+       private static class OriginalUrlTrailingSlashesCountMetaDataKey extends 
MetaDataKey<Integer>
+       {
+               private static final long serialVersionUID = 1L;
+       }
+
+       /**
+        * Sets the initial page parameters for page instance. Use this only if 
you know what you are
+        * doing.
+        * 
+        * @param page
+        * @param pageParameters
+        */
+       public static void setInitialPageParameters(final Page page, final 
PageParameters pageParameters)
+       {
+               page.setMetaData(PAGE_PARAMETERS_META_DATA_KEY, pageParameters);
+       }
+
+       /**
+        * @param page
+        * @return initial page parameters
+        */
+       public static PageParameters getInitialPagePageParameters(final Page 
page)
+       {
+               return page.getMetaData(PAGE_PARAMETERS_META_DATA_KEY);
+       }
+
+       /**
         * Construct.
         * 
         * @param mountPath
@@ -71,8 +114,8 @@
         *            whether after hitting the page with URL in bookmarkable 
form it should be
         *            redirected to hybrid URL - needed for ajax to work 
properly after page refresh
         */
-       public HybridUrlCodingStrategy(String mountPath, Class pageClass,
-               boolean redirectOnBookmarkableRequest)
+       public HybridUrlCodingStrategy(final String mountPath, final Class<? 
extends Page> pageClass,
+               final boolean redirectOnBookmarkableRequest)
        {
                super(mountPath);
 
@@ -81,7 +124,7 @@
                        throw new IllegalArgumentException("mountPath can not 
end with a '/': " + mountPath);
                }
 
-               pageClassRef = new WeakReference(pageClass);
+               pageClassRef = new WeakReference<Class<? extends 
Page>>(pageClass);
                this.redirectOnBookmarkableRequest = 
redirectOnBookmarkableRequest;
        }
 
@@ -91,18 +134,17 @@
         * @param mountPath
         * @param pageClass
         */
-       public HybridUrlCodingStrategy(String mountPath, Class pageClass)
+       public HybridUrlCodingStrategy(final String mountPath, final Class<? 
extends Page> pageClass)
        {
                this(mountPath, pageClass, true);
        }
 
        /**
-        * Returns the amount of trailing slashes in the given string
         * 
         * @param seq
-        * @return
+        * @return Returns the amount of trailing slashes in the given string
         */
-       private int getTrailingSlashesCount(CharSequence seq)
+       private int getTrailingSlashesCount(final CharSequence seq)
        {
                int count = 0;
                for (int i = seq.length() - 1; i >= 0; --i)
@@ -123,7 +165,7 @@
         * Returns whether after hitting bookmarkable url the request should be 
redirected to a hybrid
         * URL. This is recommended for pages with Ajax.
         * 
-        * @return
+        * @return true if redirect on bookmarkable request
         */
        protected boolean isRedirectOnBookmarkableRequest()
        {
@@ -133,7 +175,7 @@
        /**
         * Returns whether to redirect when there is pageMap specified in 
bookmarkable URL
         * 
-        * @return
+        * @return true if always redirect when page map is specified
         */
        protected boolean alwaysRedirectWhenPageMapIsSpecified()
        {
@@ -146,7 +188,7 @@
        /**
         * @see 
org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy#decode(org.apache.wicket.request.RequestParameters)
         */
-       public IRequestTarget decode(RequestParameters requestParameters)
+       public IRequestTarget decode(final RequestParameters requestParameters)
        {
                String parametersFragment = 
requestParameters.getPath().substring(getMountPath().length());
 
@@ -181,7 +223,7 @@
                int originalUrlTrailingSlashesCount = 
getTrailingSlashesCount(extraction.getUrlAfterExtraction());
 
                boolean redirect = isRedirectOnBookmarkableRequest();
-               if (Strings.isEmpty(pageMapName) != true && 
alwaysRedirectWhenPageMapIsSpecified())
+               if ((Strings.isEmpty(pageMapName) != true) && 
alwaysRedirectWhenPageMapIsSpecified())
                {
                        redirect = true;
                }
@@ -190,14 +232,14 @@
                {
                        // stateless listener interface
                        
WebRequestCodingStrategy.addInterfaceParameters(interfaceParameter, 
requestParameters);
-                       return new 
BookmarkableListenerInterfaceRequestTarget(pageMapName,
-                               (Class)pageClassRef.get(), parameters, 
requestParameters.getComponentPath(),
+                       return new 
BookmarkableListenerInterfaceRequestTarget(pageMapName, pageClassRef.get(),
+                               parameters, 
requestParameters.getComponentPath(),
                                requestParameters.getInterfaceName(), 
requestParameters.getVersionNumber());
                }
                else if (pageId == null)
                {
                        // bookmarkable page request
-                       return new 
HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef.get(),
+                       return new 
HybridBookmarkablePageRequestTarget(pageMapName, pageClassRef.get(),
                                parameters, originalUrlTrailingSlashesCount, 
redirect);
                }
                else
@@ -218,7 +260,7 @@
                        }
 
                        // check if the found page match the required class
-                       if (page != null && 
page.getClass().equals(pageClassRef.get()))
+                       if ((page != null) && 
page.getClass().equals(pageClassRef.get()))
                        {
                                
requestParameters.setInterfaceName(IRedirectListener.INTERFACE.getName());
                                RequestCycle.get().getRequest().setPage(page);
@@ -230,15 +272,13 @@
                                // create new instance, but only if there is no 
callback to a non-existing page
                                if (requestParameters.getInterface() != null)
                                {
-                                       handleExpiredPage(pageMapName, 
(Class)pageClassRef.get(),
+                                       handleExpiredPage(pageMapName, 
pageClassRef.get(),
                                                
originalUrlTrailingSlashesCount, redirect);
                                }
-                               return new 
HybridBookmarkablePageRequestTarget(pageMapName,
-                                       (Class)pageClassRef.get(), parameters, 
originalUrlTrailingSlashesCount,
-                                       redirect);
+                               return new 
HybridBookmarkablePageRequestTarget(pageMapName, pageClassRef.get(),
+                                       parameters, 
originalUrlTrailingSlashesCount, redirect);
                        }
                }
-
        }
 
        /**
@@ -260,8 +300,9 @@
         *            whether or not a redirect should be issued
         * @return request target used to handle this situation
         */
-       protected IRequestTarget handleExpiredPage(String pageMapName, Class 
pageClass,
-               int trailingSlashesCount, boolean redirect)
+       protected IRequestTarget handleExpiredPage(final String pageMapName,
+               final Class<? extends Page> pageClass, final int 
trailingSlashesCount,
+               final boolean redirect)
        {
                throw new PageExpiredException(
                        "Request cannot be processed. The target page does not 
exist anymore.");
@@ -272,9 +313,9 @@
         * or null if the number can't be determined.
         * 
         * @param requestTarget
-        * @return
+        * @return the number of trailing slashes
         */
-       private Integer getOriginalOriginalTrailingSlashesCount(IRequestTarget 
requestTarget)
+       private Integer getOriginalOriginalTrailingSlashesCount(final 
IRequestTarget requestTarget)
        {
                if (requestTarget instanceof ListenerInterfaceRequestTarget)
                {
@@ -289,9 +330,9 @@
         * Extracts the PageParameters from given request target
         * 
         * @param requestTarget
-        * @return
+        * @return page parameters
         */
-       private PageParameters getPageParameters(IRequestTarget requestTarget)
+       private PageParameters getPageParameters(final IRequestTarget 
requestTarget)
        {
                if (requestTarget instanceof BookmarkablePageRequestTarget)
                {
@@ -314,9 +355,9 @@
         * Extracts the PageInfo from given request target
         * 
         * @param requestTarget
-        * @return
+        * @return page info
         */
-       private PageInfo getPageInfo(IRequestTarget requestTarget)
+       private PageInfo getPageInfo(final IRequestTarget requestTarget)
        {
                if (requestTarget instanceof BookmarkablePageRequestTarget)
                {
@@ -344,57 +385,12 @@
        }
 
        /**
-        * Sets the initial page parameters for page instance. Use this only if 
you know what you are
-        * doing.
-        * 
-        * @param page
-        * @param pageParameters
-        */
-       public static void setInitialPageParameters(Page page, PageParameters 
pageParameters)
-       {
-               page.setMetaData(PAGE_PARAMETERS_META_DATA_KEY, pageParameters);
-       }
-
-       /**
-        * @param page
-        * @return
-        */
-       public static PageParameters getInitialPagePageParameters(Page page)
-       {
-               return page.getMetaData(PAGE_PARAMETERS_META_DATA_KEY);
-       }
-
-       /**
-        * Meta data key to store PageParameters in page instance. This is used 
to save the
-        * PageParameters that were used to create the page instance so that 
later they can be used when
-        * generating page URL
-        */
-       public static final PageParametersMetaDataKey 
PAGE_PARAMETERS_META_DATA_KEY = new PageParametersMetaDataKey();
-
-       private static class PageParametersMetaDataKey extends 
MetaDataKey<PageParameters>
-       {
-               private static final long serialVersionUID = 1L;
-       };
-
-       // used to store number of trailing slashes in page url (prior the 
PageInfo)
-       // part. This is necessary to maintain
-       // the exact number of slashes after page redirect, so that we don't 
break
-       // things that rely on URL depth
-       // (other mounted URLs)
-       private static final OriginalUrlTrailingSlashesCountMetaDataKey 
ORIGINAL_TRAILING_SLASHES_COUNT_METADATA_KEY = new 
OriginalUrlTrailingSlashesCountMetaDataKey();
-
-       private static class OriginalUrlTrailingSlashesCountMetaDataKey extends 
MetaDataKey<Integer>
-       {
-               private static final long serialVersionUID = 1L;
-       }
-
-       /**
         * Fix the amount of trailing slashes in the specified buffer.
         * 
         * @param buffer
         * @param desiredCount
         */
-       private void fixTrailingSlashes(AppendingStringBuffer buffer, int 
desiredCount)
+       private void fixTrailingSlashes(final AppendingStringBuffer buffer, 
final int desiredCount)
        {
                int current = getTrailingSlashesCount(buffer);
                if (current > desiredCount)
@@ -415,7 +411,7 @@
        /**
         * @see 
org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy#encode(org.apache.wicket.IRequestTarget)
         */
-       public CharSequence encode(IRequestTarget requestTarget)
+       public CharSequence encode(final IRequestTarget requestTarget)
        {
                if (matches(requestTarget) == false)
                {
@@ -447,7 +443,7 @@
        /**
         * @see 
org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy#matches(org.apache.wicket.IRequestTarget)
         */
-       public boolean matches(IRequestTarget requestTarget)
+       public boolean matches(final IRequestTarget requestTarget)
        {
                if (requestTarget instanceof BookmarkablePageRequestTarget)
                {
@@ -464,52 +460,12 @@
        }
 
        /**
-        * Class that encapsulates {...@link PageInfo} instance and the URL 
part prior the PageInfo part
-        * 
-        * @author Matej Knopp
-        */
-       protected static class PageInfoExtraction
-       {
-               private final String urlAfterExtraction;
-
-               private final PageInfo pageInfo;
-
-               /**
-                * Construct.
-                * 
-                * @param urlAfterExtraction
-                * @param pageInfo
-                */
-               public PageInfoExtraction(String urlAfterExtraction, PageInfo 
pageInfo)
-               {
-                       this.urlAfterExtraction = urlAfterExtraction;
-                       this.pageInfo = pageInfo;
-               }
-
-               /**
-                * @return
-                */
-               public PageInfo getPageInfo()
-               {
-                       return pageInfo;
-               }
-
-               /**
-                * @return
-                */
-               public String getUrlAfterExtraction()
-               {
-                       return urlAfterExtraction;
-               }
-       }
-
-       /**
         * Extracts the PageInfo string.
         * 
         * @param url
-        * @return
+        * @return extract page info
         */
-       protected PageInfoExtraction extractPageInfo(String url)
+       protected PageInfoExtraction extractPageInfo(final String url)
        {
                int begin = url.lastIndexOf(getBeginSeparator());
                PageInfo last = null;
@@ -517,7 +473,7 @@
                while (begin != -1)
                {
                        String substring = url.substring(begin);
-                       if (substring.length() > getBeginSeparator().length() + 
getEndSeparator().length() &&
+                       if ((substring.length() > getBeginSeparator().length() 
+ getEndSeparator().length()) &&
                                substring.startsWith(getBeginSeparator()) && 
substring.endsWith(getEndSeparator()))
                        {
                                String pageInfoString = 
substring.substring(getBeginSeparator().length(), //
@@ -535,6 +491,7 @@
                        }
                        begin = url.lastIndexOf(getBeginSeparator(), begin - 1);
                }
+
                if (last != null)
                {
                        return new PageInfoExtraction(url.substring(0, 
url.length() - lastSubstring.length()),
@@ -546,11 +503,17 @@
                }
        }
 
+       /**
+        * @return begin separator
+        */
        protected String getBeginSeparator()
        {
                return ".";
        }
 
+       /**
+        * @return end separator
+        */
        protected String getEndSeparator()
        {
                return "";
@@ -561,9 +524,9 @@
         * 
         * @param url
         * @param pageInfo
-        * @return
+        * @return URL
         */
-       protected String addPageInfo(String url, PageInfo pageInfo)
+       protected String addPageInfo(final String url, final PageInfo pageInfo)
        {
                if (pageInfo != null)
                {
@@ -576,6 +539,61 @@
        }
 
        /**
+        * @see 
org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#matches(java.lang.String)
+        */
+       @Override
+       public boolean matches(final String path, final boolean caseSensitive)
+       {
+               RequestCycle rc = RequestCycle.get();
+
+               // the null check is necessary, as this method is first time 
called from WicketFilter when
+               // no RequestCycle exists yet
+               if ((rc != null) && ((WebRequest)rc.getRequest()).isAjax())
+               {
+                       // HybridUrlCodingStrategy doesn't make sense for ajax 
request
+                       return false;
+               }
+
+               if (Strings.startsWith(path, getMountPath(), caseSensitive))
+               {
+                       /*
+                        * 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() > getBeginSeparator().length() 
+ getEndSeparator().length()) &&
+                               remainder.startsWith(getBeginSeparator()) && 
remainder.endsWith(getEndSeparator()))
+                       {
+                               String substring = 
remainder.substring(getBeginSeparator().length(), //
+                                       remainder.length() - 
getEndSeparator().length());
+                               PageInfo info = 
PageInfo.parsePageInfo(substring);
+                               if (info != null)
+                               {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * 
+        * @see java.lang.Object#toString()
+        */
+       @Override
+       public String toString()
+       {
+               return "HybridUrlCodingStrategy[page=" + pageClassRef.get() + 
"]";
+       }
+
+       /**
         * Possible string representation of PageInfo:
         * <ul>
         * <li>pageId
@@ -601,10 +619,10 @@
                 * @param versionNumber
                 * @param pageMapName
                 */
-               public PageInfo(Integer pageId, Integer versionNumber, String 
pageMapName)
+               public PageInfo(final Integer pageId, final Integer 
versionNumber, final String pageMapName)
                {
-                       if ((pageId == null && (versionNumber != null || 
pageMapName == null)) ||
-                               (versionNumber == null && (pageId != null || 
pageMapName == null)))
+                       if (((pageId == null) && ((versionNumber != null) || 
(pageMapName == null))) ||
+                               ((versionNumber == null) && ((pageId != null) 
|| (pageMapName == null))))
                        {
                                throw new IllegalArgumentException(
                                        "Either both pageId and versionNumber 
must be null or none of them.");
@@ -615,7 +633,7 @@
                }
 
                /**
-                * @return
+                * @return page id
                 */
                public Integer getPageId()
                {
@@ -623,7 +641,7 @@
                }
 
                /**
-                * @return
+                * @return version number
                 */
                public Integer getVersionNumber()
                {
@@ -631,13 +649,17 @@
                }
 
                /**
-                * @return
+                * @return page map name
                 */
                public String getPageMapName()
                {
                        return pageMapName;
                }
 
+               /**
+                * 
+                * @return page info separator
+                */
                private static char getPageInfoSeparator()
                {
                        return '.';
@@ -660,7 +682,7 @@
 
                        // we don't need to encode the pageMapName when the 
pageId is unique
                        // per session
-                       if (pageMapName != null && pageId != null && 
Application.exists() &&
+                       if ((pageMapName != null) && (pageId != null) && 
Application.exists() &&
                                
Application.get().getSessionSettings().isPageIdUniquePerSession())
                        {
                                pageMapName = null;
@@ -672,37 +694,37 @@
                        final boolean pmContainsLetter = !pmEmpty && 
!isNumber(pageMapName);
 
 
-                       if (pageId != null && pmEmpty && 
versionNumber.intValue() == 0)
+                       if ((pageId != null) && pmEmpty && 
(versionNumber.intValue() == 0))
                        {
                                // pageId
                                buffer.append(pageId);
                        }
-                       else if (pageId != null && pmEmpty && 
versionNumber.intValue() != 0)
+                       else if ((pageId != null) && pmEmpty && 
(versionNumber.intValue() != 0))
                        {
                                // pageId.version
                                buffer.append(pageId);
                                buffer.append(getPageInfoSeparator());
                                buffer.append(versionNumber);
                        }
-                       else if (pageId == null && pmContainsLetter)
+                       else if ((pageId == null) && pmContainsLetter)
                        {
                                // pageMap (must start with letter)
                                buffer.append(pageMapName);
                        }
-                       else if (pageId == null && !pmEmpty && 
!pmContainsLetter)
+                       else if ((pageId == null) && !pmEmpty && 
!pmContainsLetter)
                        {
                                // .pageMap
                                buffer.append(getPageInfoSeparator());
                                buffer.append(pageMapName);
                        }
-                       else if (pmContainsLetter && pageId != null && 
versionNumber.intValue() == 0)
+                       else if (pmContainsLetter && (pageId != null) && 
(versionNumber.intValue() == 0))
                        {
                                // pageMap.pageId (pageMap must start with a 
letter)
                                buffer.append(pageMapName);
                                buffer.append(getPageInfoSeparator());
                                buffer.append(pageId);
                        }
-                       else if (!pmEmpty && pageId != null)
+                       else if (!pmEmpty && (pageId != null))
                        {
                                // pageMap.pageId.pageVersion
                                buffer.append(pageMapName);
@@ -719,11 +741,11 @@
                 * Method that rigidly checks if the string consists of digits 
only.
                 * 
                 * @param string
-                * @return
+                * @return true if is a number
                 */
-               private static boolean isNumber(String string)
+               private static boolean isNumber(final String string)
                {
-                       if (string == null || string.length() == 0)
+                       if ((string == null) || (string.length() == 0))
                        {
                                return false;
                        }
@@ -748,11 +770,11 @@
                 * </ul>
                 * 
                 * @param src
-                * @return
+                * @return page info
                 */
-               public static PageInfo parsePageInfo(String src)
+               public static PageInfo parsePageInfo(final String src)
                {
-                       if (src == null || src.length() == 0)
+                       if ((src == null) || (src.length() == 0))
                        {
                                return null;
                        }
@@ -770,42 +792,42 @@
                                for (int j = 0; j < segments[i].length(); ++j)
                                {
                                        char c = segments[i].charAt(j);
-                                       if (!Character.isLetterOrDigit(c) && c 
!= '-' && c != '_')
+                                       if (!Character.isLetterOrDigit(c) && (c 
!= '-') && (c != '_'))
                                        {
                                                return null;
                                        }
                                }
                        }
 
-                       if (segments.length == 1 && isNumber(segments[0]))
+                       if ((segments.length == 1) && isNumber(segments[0]))
                        {
                                // pageId
                                return new 
PageInfo(Integer.valueOf(segments[0]), new Integer(0), null);
                        }
-                       else if (segments.length == 2 && isNumber(segments[0]) 
&& isNumber(segments[1]))
+                       else if ((segments.length == 2) && 
isNumber(segments[0]) && isNumber(segments[1]))
                        {
                                // pageId:pageVersion
                                return new 
PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
                                        null);
                        }
-                       else if (segments.length == 1 && !isNumber(segments[0]))
+                       else if ((segments.length == 1) && 
!isNumber(segments[0]))
                        {
                                // pageMap (starts with letter)
                                return new PageInfo(null, null, segments[0]);
                        }
-                       else if (segments.length == 2 && segments[0].length() 
== 0)
+                       else if ((segments.length == 2) && 
(segments[0].length() == 0))
                        {
                                // .pageMap
                                return new PageInfo(null, null, segments[1]);
                        }
-                       else if (segments.length == 2 && !isNumber(segments[0]) 
&& isNumber(segments[1]))
+                       else if ((segments.length == 2) && 
!isNumber(segments[0]) && isNumber(segments[1]))
                        {
                                // pageMap.pageId (pageMap starts with letter)
                                return new 
PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
                        }
                        else if (segments.length == 3)
                        {
-                               if (segments[2].length() == 0 && 
isNumber(segments[1]))
+                               if ((segments[2].length() == 0) && 
isNumber(segments[1]))
                                {
                                        // we don't encode it like this, but we 
still should be able
                                        // to parse it
@@ -845,16 +867,22 @@
                 * @param originalUrlTrailingSlashesCount
                 * @param redirect
                 */
-               public HybridBookmarkablePageRequestTarget(String pageMapName, 
Class pageClass,
-                       PageParameters pageParameters, int 
originalUrlTrailingSlashesCount, boolean redirect)
+               public HybridBookmarkablePageRequestTarget(final String 
pageMapName,
+                       final Class<? extends Page> pageClass, final 
PageParameters pageParameters,
+                       final int originalUrlTrailingSlashesCount, final 
boolean redirect)
                {
                        super(pageMapName, pageClass, pageParameters);
                        this.originalUrlTrailingSlashesCount = 
originalUrlTrailingSlashesCount;
                        this.redirect = redirect;
                }
 
+               /**
+                * @see 
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget#newPage(java.lang.Class,
+                *      org.apache.wicket.RequestCycle)
+                */
                @Override
-               protected Page newPage(Class pageClass, RequestCycle 
requestCycle)
+               protected <C extends Page> Page newPage(final Class<C> 
pageClass,
+                       final RequestCycle requestCycle)
                {
                        Page page = super.newPage(pageClass, requestCycle);
                        page.setMetaData(PAGE_PARAMETERS_META_DATA_KEY, new 
PageParameters(getPageParameters()));
@@ -863,11 +891,14 @@
                        return page;
                }
 
+               /**
+                * @see 
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget#respond(org.apache.wicket.RequestCycle)
+                */
                @Override
-               public void respond(RequestCycle requestCycle)
+               public void respond(final RequestCycle requestCycle)
                {
                        Page page = getPage(requestCycle);
-                       if (page.isPageStateless() == false && redirect)
+                       if ((page.isPageStateless() == false) && redirect)
                        {
                                requestCycle.redirectTo(page);
                        }
@@ -876,57 +907,45 @@
                                super.respond(requestCycle);
                        }
                }
-       };
+       }
 
        /**
-        * @see 
org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#matches(java.lang.String)
+        * Class that encapsulates {...@link PageInfo} instance and the URL 
part prior the PageInfo part
+        * 
+        * @author Matej Knopp
         */
-       @Override
-       public boolean matches(String path, boolean caseSensitive)
+       protected static class PageInfoExtraction
        {
-               RequestCycle rc = RequestCycle.get();
+               private final String urlAfterExtraction;
 
-               // the null check is necessary, as this method is first time 
called from WicketFilter when
-               // no RequestCycle exists yet
-               if (rc != null && ((WebRequest)rc.getRequest()).isAjax())
+               private final PageInfo pageInfo;
+
+               /**
+                * Construct.
+                * 
+                * @param urlAfterExtraction
+                * @param pageInfo
+                */
+               public PageInfoExtraction(final String urlAfterExtraction, 
final PageInfo pageInfo)
                {
-                       // HybridUrlCodingStrategy doesn't make sense for ajax 
request
-                       return false;
+                       this.urlAfterExtraction = urlAfterExtraction;
+                       this.pageInfo = pageInfo;
                }
 
-               if (Strings.startsWith(path, getMountPath(), caseSensitive))
+               /**
+                * @return page info
+                */
+               public PageInfo getPageInfo()
                {
-                       /*
-                        * 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() > getBeginSeparator().length() + 
getEndSeparator().length() &&
-                               remainder.startsWith(getBeginSeparator()) && 
remainder.endsWith(getEndSeparator()))
-                       {
-                               String substring = 
remainder.substring(getBeginSeparator().length(), //
-                                       remainder.length() - 
getEndSeparator().length());
-                               PageInfo info = 
PageInfo.parsePageInfo(substring);
-                               if (info != null)
-                               {
-                                       return true;
-                               }
-                       }
+                       return pageInfo;
                }
-               return false;
-       }
 
-       @Override
-       public String toString()
-       {
-               return "HybridUrlCodingStrategy[page=" + pageClassRef.get() + 
"]";
+               /**
+                * @return url after extraction
+                */
+               public String getUrlAfterExtraction()
+               {
+                       return urlAfterExtraction;
+               }
        }
-
 }


Reply via email to