Author: mgrigorov
Date: Mon Aug 22 15:12:04 2011
New Revision: 1160294

URL: http://svn.apache.org/viewvc?rev=1160294&view=rev
Log:
WICKET-3978 Delegate the Page#isBookmarkable() to the IPageFactory 
implementation


Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java?rev=1160294&r1=1160293&r2=1160294&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java 
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/IPageFactory.java 
Mon Aug 22 15:12:04 2011
@@ -66,4 +66,16 @@ public interface IPageFactory
         */
        <C extends IRequestablePage> IRequestablePage newPage(final Class<C> 
pageClass,
                final PageParameters parameters);
+
+       /**
+        * Checks whether a page can be instantiated using a bookmarkable URL.
+        * 
+        * @param C
+        *            the type of the page class
+        * @param pageClass
+        *            The class of page to check for bookmarkability
+        * 
+        * @return {@code true} if the page can be instantiated by this {@link 
IPageFactory}
+        */
+       <C extends IRequestablePage> boolean isBookmarkable(final Class<C> 
pageClass);
 }

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java?rev=1160294&r1=1160293&r2=1160294&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java 
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java Mon Aug 
22 15:12:04 2011
@@ -21,7 +21,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.authorization.UnauthorizedActionException;
@@ -134,11 +133,6 @@ public abstract class Page extends Marku
        /** Log. */
        private static final Logger log = LoggerFactory.getLogger(Page.class);
 
-       /**
-        * {@link #isBookmarkable()} is expensive, we cache the result here
-        */
-       private static final ConcurrentHashMap<String, Boolean> 
pageClassToBookmarkableCache = new ConcurrentHashMap<String, Boolean>();
-
        private static final long serialVersionUID = 1L;
 
        /** Used to create page-unique numbers */
@@ -438,38 +432,7 @@ public abstract class Page extends Marku
         */
        public boolean isBookmarkable()
        {
-               Boolean bookmarkable = 
pageClassToBookmarkableCache.get(getClass().getName());
-               if (bookmarkable == null)
-               {
-                       try
-                       {
-                               if (getClass().getConstructor(new Class[] { }) 
!= null)
-                               {
-                                       bookmarkable = Boolean.TRUE;
-                               }
-                       }
-                       catch (Exception ignore)
-                       {
-                               try
-                               {
-                                       if (getClass().getConstructor(new 
Class[] { PageParameters.class }) != null)
-                                       {
-                                               bookmarkable = Boolean.TRUE;
-                                       }
-                               }
-                               catch (Exception ignored)
-                               {
-                               }
-                       }
-
-                       if (bookmarkable == null)
-                       {
-                               bookmarkable = Boolean.FALSE;
-                       }
-                       pageClassToBookmarkableCache.put(getClass().getName(), 
bookmarkable);
-               }
-
-               return bookmarkable;
+               return 
getApplication().getPageFactory().isBookmarkable(getClass());
        }
 
        /**

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java?rev=1160294&r1=1160293&r2=1160294&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
 Mon Aug 22 15:12:04 2011
@@ -19,6 +19,8 @@ package org.apache.wicket.session;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.wicket.IPageFactory;
 import org.apache.wicket.Page;
@@ -50,6 +52,11 @@ public final class DefaultPageFactory im
        /** Map of Constructors for Page subclasses */
        private final Map<Class<?>, Constructor<?>> constructorForClass = 
Generics.newConcurrentHashMap();
 
+       /**
+        * {@link #isBookmarkable()} is expensive, we cache the result here
+        */
+       private final ConcurrentMap<String, Boolean> pageToBookmarkableCache = 
new ConcurrentHashMap<String, Boolean>();
+
        public final <C extends IRequestablePage> Page newPage(final Class<C> 
pageClass)
        {
                try
@@ -219,4 +226,40 @@ public final class DefaultPageFactory im
 
                return msg + "'. Might be it doesn't exist, may be it is not 
visible (public).";
        }
+
+       public <C extends IRequestablePage> boolean isBookmarkable(Class<C> 
pageClass)
+       {
+               Boolean bookmarkable = 
pageToBookmarkableCache.get(pageClass.getName());
+               if (bookmarkable == null)
+               {
+                       try
+                       {
+                               if (pageClass.getConstructor(new Class[] { }) 
!= null)
+                               {
+                                       bookmarkable = Boolean.TRUE;
+                               }
+                       }
+                       catch (Exception ignore)
+                       {
+                               try
+                               {
+                                       if (pageClass.getConstructor(new 
Class[] { PageParameters.class }) != null)
+                                       {
+                                               bookmarkable = Boolean.TRUE;
+                                       }
+                               }
+                               catch (Exception ignored)
+                               {
+                               }
+                       }
+
+                       if (bookmarkable == null)
+                       {
+                               bookmarkable = Boolean.FALSE;
+                       }
+                       pageToBookmarkableCache.put(pageClass.getName(), 
bookmarkable);
+               }
+
+               return bookmarkable;
+       }
 }
\ No newline at end of file


Reply via email to