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