You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/01/10 13:49:26 UTC

[02/10] Merge branch 'master' into sandbox/WICKET-4686

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
index 4e0c08d,2c015a4..0be5d76
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageProvider.java
@@@ -259,6 -259,6 +259,12 @@@ public class PageProvider implements IP
  		if (pageId != null)
  		{
  			page = getStoredPage(pageId);
++
++			if (page == null)
++			{
++				// WICKET-4594 - ignore the parsed parameters for stateful pages
++				pageParameters = null;
++			}
  		}
  
  		if (page == null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
index bd920de,bbe2e1c..94a4b7a
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
@@@ -138,12 -135,6 +140,12 @@@ public abstract class AbstractBookmarka
  		}
  	}
  
- 	private final List<MountPathSegment> pathSegments;
++	protected final List<MountPathSegment> pathSegments;
 +
 +	protected final String[] mountSegments;
 +
 +	protected final IPageParametersEncoder pageParametersEncoder;
 +
  	/**
  	 * Construct.
  	 */
@@@ -256,6 -250,12 +271,12 @@@
  
  		if (listenerInterface != null)
  		{
 -			if (pageInfo.getPageId() != null)
 -			{
 -				// WICKET-4594 - ignore the parsed parameters for stateful pages
 -				pageParameters = null;
 -			}
++//			if (pageInfo.getPageId() != null)
++//			{
++//				// WICKET-4594 - ignore the parsed parameters for stateful pages
++//				pageParameters = null;
++//			}
+ 
  			PageAndComponentProvider provider = new PageAndComponentProvider(pageInfo.getPageId(),
  				pageClass, pageParameters, renderCount, componentInfo.getComponentPath());
  

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
index f3e3770,f3e3770..00b72a1
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
@@@ -83,21 -83,21 +83,16 @@@ public abstract class AbstractComponent
  	 */
  	protected PageComponentInfo getPageComponentInfo(final Url url)
  	{
--		if (url == null)
--		{
--			throw new IllegalStateException("Argument 'url' may not be null.");
--		}
--		else
++		Args.notNull(url, "url");
++
++		for (QueryParameter queryParameter : url.getQueryParameters())
  		{
--			for (QueryParameter queryParameter : url.getQueryParameters())
++			if (Strings.isEmpty(queryParameter.getValue()))
  			{
--				if (Strings.isEmpty(queryParameter.getValue()))
++				PageComponentInfo pageComponentInfo = PageComponentInfo.parse(queryParameter.getName());
++				if (pageComponentInfo != null)
  				{
--					PageComponentInfo pageComponentInfo = PageComponentInfo.parse(queryParameter.getName());
--					if (pageComponentInfo != null)
--					{
--						return pageComponentInfo;
--					}
++					return pageComponentInfo;
  				}
  			}
  		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
index 37aada6,c6d3d2a..83e0374
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
@@@ -16,7 -16,9 +16,6 @@@
   */
  package org.apache.wicket.core.request.mapper;
  
- import org.apache.wicket.Application;
 -import java.util.ArrayList;
 -import java.util.List;
 -
  import org.apache.wicket.RequestListenerInterface;
  import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
  import org.apache.wicket.request.IRequestHandler;
@@@ -63,8 -66,78 +63,8 @@@ import org.apache.wicket.util.string.St
   */
  public class MountedMapper extends AbstractBookmarkableMapper
  {
 -	private final IPageParametersEncoder pageParametersEncoder;
 -
 -	private static class MountPathSegment
 -	{
 -		private int segmentIndex;
 -		private String fixedPart;
 -		private int minParameters;
 -		private int optionalParameters;
 -
 -		public MountPathSegment(int segmentIndex)
 -		{
 -			this.segmentIndex = segmentIndex;
 -		}
 -
 -		public void setFixedPart(String fixedPart)
 -		{
 -			this.fixedPart = fixedPart;
 -		}
 -
 -		public void addRequiredParameter()
 -		{
 -			minParameters++;
 -		}
 -
 -		public void addOptionalParameter()
 -		{
 -			optionalParameters++;
 -		}
 -
 -		public int getSegmentIndex()
 -		{
 -			return segmentIndex;
 -		}
 -
 -		public String getFixedPart()
 -		{
 -			return fixedPart;
 -		}
 -
 -		public int getMinParameters()
 -		{
 -			return minParameters;
 -		}
 -
 -		public int getOptionalParameters()
 -		{
 -			return optionalParameters;
 -		}
 -
 -		public int getMaxParameters()
 -		{
 -			return getOptionalParameters() + getMinParameters();
 -		}
 -
 -		public int getFixedPartSize()
 -		{
 -			return getFixedPart() == null ? 0 : 1;
 -		}
 -
 -		@Override
 -		public String toString()
 -		{
 -			return "(" + getSegmentIndex() + ") " + getMinParameters() + "-" + getMaxParameters() +
 -				" " + (getFixedPart() == null ? "(end)" : getFixedPart());
 -		}
 -	}
 -
 -	private final List<MountPathSegment> pathSegments;
 -	private final String[] mountSegments;
 -
  	/** bookmarkable page class. */
- 	private final ClassProvider<? extends IRequestablePage> pageClassProvider;
+ 	private final IProvider<Class<? extends IRequestablePage>> pageClassProvider;
  
  	/**
  	 * Construct.
@@@ -110,16 -183,54 +110,16 @@@
  	 * @param pageParametersEncoder
  	 */
  	public MountedMapper(String mountPath,
- 		ClassProvider<? extends IRequestablePage> pageClassProvider,
+ 		IProvider<Class<? extends IRequestablePage>> pageClassProvider,
  		IPageParametersEncoder pageParametersEncoder)
  	{
 -		Args.notEmpty(mountPath, "mountPath");
 +		super(mountPath, pageParametersEncoder);
 +
  		Args.notNull(pageClassProvider, "pageClassProvider");
 -		Args.notNull(pageParametersEncoder, "pageParametersEncoder");
  
 -		this.pageParametersEncoder = pageParametersEncoder;
  		this.pageClassProvider = pageClassProvider;
 -		mountSegments = getMountSegments(mountPath);
 -		pathSegments = getPathSegments(mountSegments);
  	}
  
 -	private List<MountPathSegment> getPathSegments(String[] segments)
 -	{
 -		List<MountPathSegment> ret = new ArrayList<MountPathSegment>();
 -		int segmentIndex = 0;
 -		MountPathSegment curPathSegment = new MountPathSegment(segmentIndex);
 -		ret.add(curPathSegment);
 -		for (String curSegment : segments)
 -		{
 -			if (isFixedSegment(curSegment))
 -			{
 -				curPathSegment.setFixedPart(curSegment);
 -				curPathSegment = new MountPathSegment(segmentIndex + 1);
 -				ret.add(curPathSegment);
 -			}
 -			else if (getPlaceholder(curSegment) != null)
 -			{
 -				curPathSegment.addRequiredParameter();
 -			}
 -			else
 -			{
 -				curPathSegment.addOptionalParameter();
 -			}
 -			segmentIndex++;
 -		}
 -		return ret;
 -	}
 -
 -	private boolean isFixedSegment(String segment)
 -	{
 -		return getOptionalPlaceholder(segment) == null && getPlaceholder(segment) == null;
 -	}
 -
 -	/**
 -	 * @see AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
 -	 */
  	@Override
  	protected UrlInfo parseRequest(Request request)
  	{
@@@ -221,7 -410,37 +216,38 @@@
  		encodePageComponentInfo(url, info.getPageComponentInfo());
  
  		PageParameters copy = new PageParameters(info.getPageParameters());
- 		setPlaceholders(copy, url);
++//		setPlaceholders(copy, url);
+ 
+ 		int dropped = 0;
+ 		for (int i = 0; i < mountSegments.length; ++i)
+ 		{
+ 			String placeholder = getPlaceholder(mountSegments[i]);
+ 			String optionalPlaceholder = getOptionalPlaceholder(mountSegments[i]);
+ 			if (placeholder != null)
+ 			{
+ 				if (!copy.getNamedKeys().contains(placeholder))
+ 				{
+ 					// no value for placeholder - cannot mount
+ 					return null;
+ 				}
+ 				url.getSegments().set(i - dropped, copy.get(placeholder).toString(""));
+ 				copy.remove(placeholder);
+ 			}
+ 			else if (optionalPlaceholder != null)
+ 			{
+ 				if (copy.getNamedKeys().contains(optionalPlaceholder))
+ 				{
+ 					url.getSegments().set(i - dropped, copy.get(optionalPlaceholder).toString(""));
+ 					copy.remove(optionalPlaceholder);
+ 				}
+ 				else
+ 				{
+ 					url.getSegments().remove(i - dropped);
+ 					dropped++;
+ 				}
+ 			}
+ 		}
+ 
  		return encodePageParameters(url, copy, pageParametersEncoder);
  	}
  

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
index 2e5d3fe,63e5914..2cc3e46
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
@@@ -214,9 -213,15 +214,9 @@@ public class PackageMapper extends Abst
  	@Override
  	protected boolean pageMustHaveBeenCreatedBookmarkable()
  	{
- 		return true;
+ 		return false;
  	}
  
 -	/**
 -	 * @see org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
 -	 */
  	@Override
  	public int getCompatibilityScore(Request request)
  	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/wicket/blob/7e032d21/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
----------------------------------------------------------------------
diff --cc wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
index 9aafdac,0c6332d..8ebca1d
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
@@@ -110,10 -108,10 +118,10 @@@ public class PackageMapperTest extends 
  	@Test
  	public void decode1()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME);
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME);
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof RenderPageRequestHandler);
+ 		assertThat(handler, instanceOf(RenderPageRequestHandler.class));
  		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
  		assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());
  		assertEquals(0, page.getPageParameters().getIndexedCount());
@@@ -126,10 -124,10 +134,10 @@@
  	@Test
  	public void decode2()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME + "/indexed1?a=b&b=c");
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/indexed1?a=b&b=c");
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof RenderPageRequestHandler);
+ 		assertThat(handler, instanceOf(RenderPageRequestHandler.class));
  		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
  		assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());
  
@@@ -148,10 -146,10 +156,10 @@@
  	@Test
  	public void decode3()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME + "?15");
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15");
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof RenderPageRequestHandler);
+ 		assertThat(handler, instanceOf(RenderPageRequestHandler.class));
  		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
  		checkPage(page, 15);
  	}
@@@ -162,10 -160,10 +170,10 @@@
  	@Test
  	public void decode4()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c");
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c");
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof RenderPageRequestHandler);
+ 		assertThat(handler, instanceOf(RenderPageRequestHandler.class));
  		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
  		checkPage(page, 15);
  
@@@ -181,10 -179,10 +189,10 @@@
  	@Test
  	public void decode5()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME + "?15-ILinkListener-foo-bar");
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15-ILinkListener-foo-bar");
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ 		assertThat(handler, instanceOf(ListenerInterfaceRequestHandler.class));
  
  		ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
  
@@@ -202,10 -200,10 +210,10 @@@
  	@Test
  	public void decode6()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ 		assertThat(handler, instanceOf(ListenerInterfaceRequestHandler.class));
  		ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
  
  		IRequestablePage page = h.getPage();
@@@ -226,10 -224,10 +234,10 @@@
  	@Test
  	public void decode7()
  	{
 -		Url url = Url.parse(PAGE_CLASS_NAME + "?15-ILinkListener.4-foo-bar");
 +		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15-ILinkListener.4-foo-bar");
  		IRequestHandler handler = encoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ 		assertThat(handler, instanceOf(ListenerInterfaceRequestHandler.class));
  
  		ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
  
@@@ -405,10 -376,7 +413,7 @@@
  		IRequestHandler handler = new RenderPageRequestHandler(provider);
  		Url url = encoder.mapHandler(handler);
  
- 		// never allow bookmarkable render url for page that has not been created by bookmarkable
- 		// URL
- 
- 		assertNull(url);
 -		assertEquals(Url.parse("MockPage/i1/i2?15&a=b&b=c"), url);
++		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c", url.toString());
  	}
  
  	/**
@@@ -548,10 -497,10 +555,10 @@@
  	@Test
  	public void decodeInnerClass()
  	{
 -		Url url = Url.parse("PackageMapperTest$OuterPage$InnerPage");
 +		Url url = Url.parse(MOUNT_PATH + '/' + "PackageMapperTest$OuterPage$InnerPage");
  		IRequestHandler handler = innerClassEncoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof RenderPageRequestHandler);
+ 		assertThat(handler, instanceOf(RenderPageRequestHandler.class));
  		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
  		assertEquals("InnerPage", page.getClass().getSimpleName());
  		assertEquals(0, page.getPageParameters().getIndexedCount());
@@@ -583,10 -532,10 +590,10 @@@
  	@Test
  	public void decodeAlias()
  	{
 -		Url url = Url.parse(ALIAS + "?15");
 +		Url url = Url.parse(MOUNT_PATH + '/' + ALIAS + "?15");
  		IRequestHandler handler = aliasEncoder.mapRequest(getRequest(url));
  
- 		assertTrue(handler instanceof RenderPageRequestHandler);
+ 		assertThat(handler, instanceOf(RenderPageRequestHandler.class));
  		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
  		checkPage(page, 15);
  		assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());