Author: jcompagner
Date: Tue Nov 14 07:23:21 2006
New Revision: 474818

URL: http://svn.apache.org/viewvc?view=rev&rev=474818
Log:
session pagemap access meta should be cleared for a pagemap that gets removed

Modified:
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java?view=diff&rev=474818&r1=474817&r2=474818
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java 
(original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java 
Tue Nov 14 07:23:21 2006
@@ -21,11 +21,13 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.Map.Entry;
 
 import org.apache.commons.logging.Log;
@@ -122,8 +124,35 @@
  */
 public abstract class Session implements Serializable
 {
+       
        private static final long serialVersionUID = 1L;
 
+       /** meta data key for missing body tags logging. */
+       public static final MetaDataKey PAGEMAP_ACCESS_MDK = new MetaDataKey(
+                       PageMapAccessMetaData.class)
+       {
+               private static final long serialVersionUID = 1L;
+       };
+
+       /**
+        * meta data for recording map map access.
+        */
+       public static final class PageMapAccessMetaData implements Serializable
+       {
+               private static final long serialVersionUID = 1L;
+
+               Set pageMapNames = new HashSet(2);
+               
+               /**
+                * @param pagemap the pagemap to add as used.
+                * @return the boolean if it was added (didn't already contain 
the pagemap)
+                */
+               public boolean add(PageMap pagemap)
+               {
+                       return pageMapNames.add(pagemap.getName());
+               }
+       }
+       
        /** Name of session attribute under which this session is stored */
        public static final String SESSION_ATTRIBUTE_NAME = "session";
 
@@ -688,6 +717,8 @@
         */
        public final void removePageMap(final PageMap pageMap)
        {
+               PageMapAccessMetaData pagemapMetaData = 
(PageMapAccessMetaData)getMetaData(PAGEMAP_ACCESS_MDK);
+               if(pagemapMetaData != null) 
pagemapMetaData.pageMapNames.remove(pageMap.getName());
                usedPageMaps.remove(pageMap);
                removeAttribute(attributeForPageMapName(pageMap.getName()));
                dirty();

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java?view=diff&rev=474818&r1=474817&r2=474818
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
 Tue Nov 14 07:23:21 2006
@@ -17,16 +17,11 @@
  */
 package wicket.markup.html;
 
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import wicket.Component;
 import wicket.IRequestTarget;
-import wicket.MetaDataKey;
 import wicket.Page;
 import wicket.PageMap;
 import wicket.PageParameters;
@@ -81,23 +76,6 @@
        /** log. */
        private static final Log log = LogFactory.getLog(WebPage.class);
 
-       /** meta data key for missing body tags logging. */
-       private static final MetaDataKey PAGEMAP_ACCESS_MDK = new MetaDataKey(
-                       PageMapAccessMetaData.class)
-       {
-               private static final long serialVersionUID = 1L;
-       };
-
-       /**
-        * meta data for recording map map access.
-        */
-       private static final class PageMapAccessMetaData implements Serializable
-       {
-               private static final long serialVersionUID = 1L;
-
-               Set pageMapNames = new HashSet(1);
-       }
-
        /** The resource references used for new window/tab support */
        private static ResourceReference cookiesResource = new 
ResourceReference(WebPage.class,
                        "cookies.js");
@@ -375,37 +353,15 @@
 
                        Session session = getSession();
 
-                       PageMapAccessMetaData meta = 
(PageMapAccessMetaData)session
-                                       .getMetaData(PAGEMAP_ACCESS_MDK);
+                       Session.PageMapAccessMetaData meta = 
(Session.PageMapAccessMetaData)session
+                                       
.getMetaData(Session.PAGEMAP_ACCESS_MDK);
                        if (meta == null)
                        {
-                               meta = new PageMapAccessMetaData();
-                               session.setMetaData(PAGEMAP_ACCESS_MDK, meta);
-                       }
-                       boolean firstAccess = false;
-                       if (!meta.pageMapNames.contains(name))
-                       {
-                               firstAccess = true;
-                               meta.pageMapNames.add(name);
+                               meta = new Session.PageMapAccessMetaData();
+                               session.setMetaData(Session.PAGEMAP_ACCESS_MDK, 
meta);
                        }
+                       boolean firstAccess = meta.add(getPageMap());
 
-                       // Here is our trickery to detect whether the current 
request was
-                       // made in a new window/ tab, in which case it should 
go in a
-                       // different page map so that we don't intermangle the 
history of
-                       // those windows
-                       CharSequence url = null;
-                       if (target instanceof IBookmarkablePageRequestTarget)
-                       {
-                               IBookmarkablePageRequestTarget current = 
(IBookmarkablePageRequestTarget)target;
-                               BookmarkablePageRequestTarget redirect = new 
BookmarkablePageRequestTarget(
-                                               
getSession().createAutoPageMapName(), current.getPageClass(), current
-                                                               
.getPageParameters());
-                               url = cycle.urlFor(redirect);
-                       }
-                       else
-                       {
-                               url = 
urlFor(INewBrowserWindowListener.INTERFACE);
-                       }
                        if (firstAccess)
                        {
                                // this is the first access to the pagemap, set 
window.name
@@ -417,6 +373,23 @@
                        }
                        else
                        {
+                               // Here is our trickery to detect whether the 
current request was
+                               // made in a new window/ tab, in which case it 
should go in a
+                               // different page map so that we don't 
intermangle the history of
+                               // those windows
+                               CharSequence url = null;
+                               if (target instanceof 
IBookmarkablePageRequestTarget)
+                               {
+                                       IBookmarkablePageRequestTarget current 
= (IBookmarkablePageRequestTarget)target;
+                                       BookmarkablePageRequestTarget redirect 
= new BookmarkablePageRequestTarget(
+                                                       
getSession().createAutoPageMapName(), current.getPageClass(), current
+                                                       .getPageParameters());
+                                       url = cycle.urlFor(redirect);
+                               }
+                               else
+                               {
+                                       url = 
urlFor(INewBrowserWindowListener.INTERFACE);
+                               }
                                JavascriptUtils.writeOpenTag(response);
                                response.write("if (window.name=='') { 
window.location=\"");
                                response.write(url);


Reply via email to