You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2011/01/27 18:20:12 UTC

svn commit: r1064210 - in /wicket/branches/wicket-1.4.x/wicket/src: main/java/org/apache/wicket/markup/html/link/ test/java/org/apache/wicket/

Author: pedro
Date: Thu Jan 27 17:20:11 2011
New Revision: 1064210

URL: http://svn.apache.org/viewvc?rev=1064210&view=rev
Log:
avoiding early page maps creation when link has an popup setting
Issue: WICKET-3109

Modified:
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/BookmarkablePageLink.java
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/ExternalLink.java
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/PopupSettings.java
    wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/PageMapTest.java

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/BookmarkablePageLink.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/BookmarkablePageLink.java?rev=1064210&r1=1064209&r2=1064210&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/BookmarkablePageLink.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/BookmarkablePageLink.java Thu Jan 27 17:20:11 2011
@@ -25,6 +25,7 @@ import org.apache.wicket.Page;
 import org.apache.wicket.PageMap;
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
 import org.apache.wicket.util.collections.MiniMap;
 import org.apache.wicket.util.lang.Classes;
 
@@ -269,7 +270,12 @@ public class BookmarkablePageLink<T> ext
 
 		if (getPopupSettings() != null)
 		{
-			return urlFor(getPopupSettings().getPageMap(this), getPageClass(), parameters);
+			String pageMapName = getPopupSettings().getPageMapName(this);
+			if (pageMapName == null)
+			{
+				pageMapName = PageMap.DEFAULT_NAME;
+			}
+			return urlFor(new BookmarkablePageRequestTarget(pageMapName, getPageClass(), parameters));
 		}
 		else
 		{

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/ExternalLink.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/ExternalLink.java?rev=1064210&r1=1064209&r2=1064210&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/ExternalLink.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/ExternalLink.java Thu Jan 27 17:20:11 2011
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.markup.html.link;
 
-import org.apache.wicket.IPageMap;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
@@ -201,10 +200,10 @@ public class ExternalLink extends Abstra
 
 			if (popupSettings != null)
 			{
-				IPageMap popupPageMap = popupSettings.getPageMap(this);
-				if (popupPageMap != null && popupPageMap.getName() != null)
+				String popupPageMapName = popupSettings.getPageMapName(this);
+				if (popupPageMapName != null)
 				{
-					tag.put("target", popupPageMap.getName());
+					tag.put("target", popupPageMapName);
 				}
 			}
 		}

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java?rev=1064210&r1=1064209&r2=1064210&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java Thu Jan 27 17:20:11 2011
@@ -17,7 +17,6 @@
 package org.apache.wicket.markup.html.link;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.IPageMap;
 import org.apache.wicket.Page;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.WicketRuntimeException;
@@ -217,8 +216,10 @@ public abstract class Link<T> extends Ab
 		// are created in the onClick are made in the wanted pagemap
 		if (popupSettings != null)
 		{
-			RequestCycle.get().getRequest().getRequestParameters().setPageMapName(
-				popupSettings.getPageMap(this).getName());
+			RequestCycle.get()
+				.getRequest()
+				.getRequestParameters()
+				.setPageMapName(popupSettings.getPageMapName(this));
 		}
 		// Invoke subclass handler
 		onClick();
@@ -469,10 +470,10 @@ public abstract class Link<T> extends Ab
 
 			if (popupSettings != null)
 			{
-				IPageMap popupPageMap = popupSettings.getPageMap(this);
-				if (popupPageMap != null && popupPageMap.getName() != null)
+				String popupPageMapName = popupSettings.getPageMapName(this);
+				if (popupPageMapName != null)
 				{
-					tag.put("target", popupPageMap.getName());
+					tag.put("target", popupPageMapName);
 				}
 			}
 		}

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/PopupSettings.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/PopupSettings.java?rev=1064210&r1=1064209&r2=1064210&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/PopupSettings.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/link/PopupSettings.java Thu Jan 27 17:20:11 2011
@@ -340,7 +340,11 @@ public class PopupSettings implements IC
 	 * @param callee
 	 *            Calling component
 	 * @return The pagemap where the popup page must be created in
+	 * @deprecated Use getPageMapName instead. There is no need to eager create the pagemap object
+	 *             to create URLs. The pagemap will be created during the request cycle when user
+	 *             click on the link for this popup.
 	 */
+	@Deprecated
 	public IPageMap getPageMap(Component callee)
 	{
 		if (pageMapName != null)
@@ -365,4 +369,23 @@ public class PopupSettings implements IC
 			return page.getPageMap();
 		}
 	}
+
+	/**
+	 * Gets the page map name. Used to create URLs referencing the popup on the defined page map.
+	 * 
+	 * @param callee
+	 * @return the page map name
+	 */
+	public String getPageMapName(Component callee)
+	{
+		if (pageMapName != null)
+		{
+			return pageMapName;
+		}
+		else
+		{
+			// TODO copy/past the relevant code from getPageMap if we remove it at some point
+			return getPageMap(callee).getName();
+		}
+	}
 }

Modified: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/PageMapTest.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/PageMapTest.java?rev=1064210&r1=1064209&r2=1064210&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/PageMapTest.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/PageMapTest.java Thu Jan 27 17:20:11 2011
@@ -18,10 +18,12 @@ package org.apache.wicket;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.link.PopupSettings;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.protocol.http.SecondLevelCacheSessionStore;
 import org.apache.wicket.protocol.http.WebRequestCycle;
@@ -31,6 +33,7 @@ import org.apache.wicket.session.ISessio
 import org.apache.wicket.util.lang.Objects;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.DummyHomePage;
 import org.apache.wicket.util.tester.WicketTester;
 
 /**
@@ -162,7 +165,7 @@ public class PageMapTest extends WicketT
 		assertEquals("1", tester.getWicketSession().getPageMaps().get(2).getName());
 	}
 
-	private void goToPage(Class pageClass, String pageMap)
+	private void goToPage(Class<?> pageClass, String pageMap)
 	{
 		WebRequestCycle cycle = tester.setupRequestAndResponse();
 		tester.getServletRequest().setParameter(
@@ -172,6 +175,30 @@ public class PageMapTest extends WicketT
 		tester.assertRenderedPage(TestPage.class);
 	}
 
+	/**
+	 * @see <a href="https://issues.apache.org/jira/browse/WICKET-3109">WICKET-3109</a>
+	 */
+	public void testLazyPageMapCreationForPopup()
+	{
+		TestPage testPage = new TestPage();
+		PopupSettings popupSettings = new PopupSettings();
+		popupSettings.setWindowName(WORKING_PAGE_MAP);
+		testPage.dummyPageLink.setPopupSettings(popupSettings);
+
+		tester.startPage(testPage);
+
+		for (IPageMap pageMap : tester.getWicketSession().getPageMaps())
+		{
+			assertNotSame(WORKING_PAGE_MAP, pageMap.getName());
+		}
+
+		tester.clickLink(testPage.dummyPageLink.getId());
+
+		tester.assertRenderedPage(DummyHomePage.class);
+		List<IPageMap> pageMaps = tester.getWicketSession().getPageMaps();
+		assertTrue(pageMaps.contains(PageMap.forName(WORKING_PAGE_MAP)));
+	}
+
 	private void listPageMapsAtSession()
 	{
 		System.out.println("--> listing pagemaps on session...");
@@ -181,13 +208,18 @@ public class PageMapTest extends WicketT
 		}
 	}
 
+	/** */
 	public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
 	{
+		private Link<Void> dummyPageLink;
+
+		/** */
 		public TestPage()
 		{
-			super();
-			add(new Link("removeTestPageMap")
+			add(new Link<Void>("removeTestPageMap")
 			{
+				private static final long serialVersionUID = 1L;
+
 				@Override
 				public void onClick()
 				{
@@ -201,13 +233,24 @@ public class PageMapTest extends WicketT
 					}
 				}
 			});
+			add(dummyPageLink = new Link<Void>("dummyPage")
+			{
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onClick()
+				{
+					setResponsePage(DummyHomePage.class);
+				}
+			});
+
 		}
 
 		public IResourceStream getMarkupResourceStream(MarkupContainer container,
 			Class<?> containerClass)
 		{
 			return new StringResourceStream(
-				"<html><body><a wicket:id=\"removeTestPageMap\"></a></body></html>");
+				"<html><body><a wicket:id=\"removeTestPageMap\"></a><a wicket:id=\"dummyPage\"></a></body></html>");
 		}
 	}
 }
\ No newline at end of file