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 2012/03/07 09:39:03 UTC

[10/19] WICKET-4439 Move classes around so that there are no two packages with the same name in different modules

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractComponentMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractComponentMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractComponentMapper.java
deleted file mode 100644
index 095463b..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractComponentMapper.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.IRequestMapper;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.Url.QueryParameter;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.lang.WicketObjects;
-import org.apache.wicket.util.string.Strings;
-
-/**
- * Convenience class for implementing page/components related encoders.
- * 
- * @author Matej Knopp
- */
-public abstract class AbstractComponentMapper extends AbstractMapper implements IRequestMapper
-{
-	/**
-	 * Construct.
-	 */
-	public AbstractComponentMapper()
-	{
-	}
-
-	protected IMapperContext getContext()
-	{
-		return Application.get().getMapperContext();
-	}
-
-	/**
-	 * Converts the specified listener interface to String.
-	 * 
-	 * @param listenerInterface
-	 * @return listenerInterface name as string
-	 */
-	protected String requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
-	{
-		Args.notNull(listenerInterface, "listenerInterface");
-
-		return getContext().requestListenerInterfaceToString(listenerInterface);
-	}
-
-	/**
-	 * Creates listener interface from the specified string
-	 * 
-	 * @param interfaceName
-	 * @return listener interface
-	 */
-	protected RequestListenerInterface requestListenerInterfaceFromString(String interfaceName)
-	{
-		Args.notEmpty(interfaceName, "interfaceName");
-
-		return getContext().requestListenerInterfaceFromString(interfaceName);
-	}
-
-	/**
-	 * Extracts the {@link PageComponentInfo} from the URL. The {@link PageComponentInfo} is encoded
-	 * as the very first query parameter and the parameter consists of name only (no value).
-	 * 
-	 * @param url
-	 * 
-	 * @return PageComponentInfo instance if one was encoded in URL, <code>null</code> otherwise.
-	 */
-	protected PageComponentInfo getPageComponentInfo(final Url url)
-	{
-		if (url == null)
-		{
-			throw new IllegalStateException("Argument 'url' may not be null.");
-		}
-		else
-		{
-			for (QueryParameter queryParameter : url.getQueryParameters())
-			{
-				if (Strings.isEmpty(queryParameter.getValue()))
-				{
-					PageComponentInfo pageComponentInfo = PageComponentInfo.parse(queryParameter.getName());
-					if (pageComponentInfo != null)
-					{
-						return pageComponentInfo;
-					}
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Encodes the {@link PageComponentInfo} instance as the first query string parameter to the
-	 * URL.
-	 * 
-	 * @param url
-	 * @param info
-	 */
-	protected void encodePageComponentInfo(Url url, PageComponentInfo info)
-	{
-		Args.notNull(url, "url");
-
-		if (info != null)
-		{
-			String s = info.toString();
-			if (!Strings.isEmpty(s))
-			{
-				QueryParameter parameter = new QueryParameter(s, "");
-				url.getQueryParameters().add(parameter);
-			}
-		}
-	}
-
-	/**
-	 * Loads page class with given name.
-	 * 
-	 * @param name
-	 * @return class
-	 */
-	protected Class<? extends IRequestablePage> getPageClass(String name)
-	{
-		Args.notEmpty(name, "name");
-
-		return WicketObjects.resolveClass(name);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * Removes the first query parameter only if {@link PageComponentInfo#parse(String)} returns
-	 * non-null instance
-	 */
-	@Override
-	protected void removeMetaParameter(final Url urlCopy)
-	{
-		String pageComponentInfoCandidate = urlCopy.getQueryParameters().get(0).getName();
-		if (PageComponentInfo.parse(pageComponentInfoCandidate) != null)
-		{
-			urlCopy.getQueryParameters().remove(0);
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapper.java
deleted file mode 100644
index 674bbc0..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapper.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.util.Locale;
-
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.Url.QueryParameter;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.string.Strings;
-
-/**
- * Base class for encoding and decoding {@link ResourceReference}s
- * 
- * @author Matej Knopp
- */
-public abstract class AbstractResourceReferenceMapper extends AbstractComponentMapper
-{
-
-	protected final String encodeResourceReferenceAttributes(
-		ResourceReference.UrlAttributes attributes)
-	{
-		if (attributes == null ||
-			(attributes.getLocale() == null && attributes.getStyle() == null && attributes.getVariation() == null))
-		{
-			return null;
-		}
-		else
-		{
-			StringBuilder res = new StringBuilder();
-			if (attributes.getLocale() != null)
-			{
-				res.append(attributes.getLocale().toString());
-			}
-			boolean styleEmpty = Strings.isEmpty(attributes.getStyle());
-			if (!styleEmpty)
-			{
-				res.append('-');
-				res.append(attributes.getStyle());
-			}
-			if (!Strings.isEmpty(attributes.getVariation()))
-			{
-				if (styleEmpty)
-				{
-					res.append("--");
-				}
-				else
-				{
-					res.append('-');
-				}
-				res.append(attributes.getVariation());
-			}
-			return res.toString();
-		}
-	}
-
-	private static String nonEmpty(String s)
-	{
-		if (Strings.isEmpty(s))
-		{
-			return null;
-		}
-		else
-		{
-			return s;
-		}
-	}
-
-	protected final ResourceReference.UrlAttributes decodeResourceReferenceAttributes(
-		String attributes)
-	{
-		Locale locale = null;
-		String style = null;
-		String variation = null;
-
-		if (!Strings.isEmpty(attributes))
-		{
-			String split[] = attributes.split("-", 3);
-			locale = parseLocale(split[0]);
-			if (split.length == 2)
-			{
-				style = nonEmpty(split[1]);
-			}
-			else if (split.length == 3)
-			{
-				style = nonEmpty(split[1]);
-				variation = nonEmpty(split[2]);
-			}
-		}
-		return new ResourceReference.UrlAttributes(locale, style, variation);
-	}
-
-	private static Locale parseLocale(String locale)
-	{
-		if (Strings.isEmpty(locale))
-		{
-			return null;
-		}
-		else
-		{
-			String parts[] = locale.toLowerCase().split("_", 3);
-			if (parts.length == 1)
-			{
-				return new Locale(parts[0]);
-			}
-			else if (parts.length == 2)
-			{
-				return new Locale(parts[0], parts[1]);
-			}
-			else if (parts.length == 3)
-			{
-				return new Locale(parts[0], parts[1], parts[2]);
-			}
-			else
-			{
-				return null;
-			}
-		}
-	}
-
-	protected void encodeResourceReferenceAttributes(Url url, ResourceReference reference)
-	{
-		String encoded = encodeResourceReferenceAttributes(reference.getUrlAttributes());
-		if (!Strings.isEmpty(encoded))
-		{
-			url.getQueryParameters().add(new Url.QueryParameter(encoded, ""));
-		}
-	}
-
-	protected ResourceReference.UrlAttributes getResourceReferenceAttributes(Url url)
-	{
-		Args.notNull(url, "url");
-
-		if (url.getQueryParameters().size() > 0)
-		{
-			QueryParameter param = url.getQueryParameters().get(0);
-			if (Strings.isEmpty(param.getValue()))
-			{
-				return decodeResourceReferenceAttributes(param.getName());
-			}
-		}
-		return new ResourceReference.UrlAttributes(null, null, null);
-	}
-
-
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * Remove the first parameter because it brings meta information like locale
-	 */
-	@Override
-	protected void removeMetaParameter(final Url urlCopy)
-	{
-		urlCopy.getQueryParameters().remove(0);
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
deleted file mode 100755
index bb4414e..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.resource.IResource;
-import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
-import org.apache.wicket.request.resource.MetaInfStaticResourceReference;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
-import org.apache.wicket.request.resource.caching.ResourceUrl;
-import org.apache.wicket.util.IProvider;
-import org.apache.wicket.util.lang.WicketObjects;
-import org.apache.wicket.util.string.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Generic {@link ResourceReference} encoder that encodes and decodes non-mounted
- * {@link ResourceReference}s.
- * <p>
- * Decodes and encodes the following URLs:
- * 
- * <pre>
- *    /wicket/resource/org.apache.wicket.ResourceScope/name
- *    /wicket/resource/org.apache.wicket.ResourceScope/name?en
- *    /wicket/resource/org.apache.wicket.ResourceScope/name?-style
- *    /wicket/resource/org.apache.wicket.ResourceScope/resource/name.xyz?en_EN-style
- * </pre>
- * 
- * @author Matej Knopp
- * @author igor.vaynberg
- * @author Peter Ertl
- */
-class BasicResourceReferenceMapper extends AbstractResourceReferenceMapper
-{
-	private static final Logger log = LoggerFactory.getLogger(BasicResourceReferenceMapper.class);
-
-	private final IPageParametersEncoder pageParametersEncoder;
-
-	/** resource caching strategy */
-	private final IProvider<? extends IResourceCachingStrategy> cachingStrategy;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param pageParametersEncoder
-	 * @param cachingStrategy
-	 */
-	public BasicResourceReferenceMapper(IPageParametersEncoder pageParametersEncoder,
-		IProvider<? extends IResourceCachingStrategy> cachingStrategy)
-	{
-		this.pageParametersEncoder = pageParametersEncoder;
-		this.cachingStrategy = cachingStrategy;
-	}
-
-	@Override
-	public IRequestHandler mapRequest(Request request)
-	{
-		Url url = request.getUrl();
-
-		// extract the PageParameters from URL if there are any
-		PageParameters pageParameters = extractPageParameters(request, url.getSegments().size(),
-			pageParametersEncoder);
-
-		if (url.getSegments().size() >= 4 &&
-			urlStartsWith(url, getContext().getNamespace(), getContext().getResourceIdentifier()))
-		{
-			String className = url.getSegments().get(2);
-			StringBuilder name = new StringBuilder();
-			int segmentsSize = url.getSegments().size();
-			for (int i = 3; i < segmentsSize; ++i)
-			{
-				String segment = url.getSegments().get(i);
-
-				// skip possibly malicious segments
-				if (segment.contains("/"))
-				{
-					return null;
-				}
-
-				// remove caching information
-				if (i + 1 == segmentsSize && Strings.isEmpty(segment) == false)
-				{
-					// The filename + parameters eventually contain caching
-					// related information which needs to be removed
-					ResourceUrl resourceUrl = new ResourceUrl(segment, pageParameters);
-					getCachingStrategy().undecorateUrl(resourceUrl);
-					segment = resourceUrl.getFileName();
-
-					if (Strings.isEmpty(segment))
-					{
-						throw new IllegalStateException("caching strategy returned empty name for " + resourceUrl);
-					}
-				}
-				if (name.length() > 0)
-				{
-					name.append("/");
-				}
-				name.append(segment);
-			}
-
-			ResourceReference.UrlAttributes attributes = getResourceReferenceAttributes(url);
-
-			Class<?> scope = resolveClass(className);
-			
-			if (scope != null && scope.getPackage() != null)
-			{
-				ResourceReference res = getContext().getResourceReferenceRegistry()
-					.getResourceReference(scope, name.toString(), attributes.getLocale(),
-						attributes.getStyle(), attributes.getVariation(), true, true);
-
-				if (res != null)
-				{
-					return new ResourceReferenceRequestHandler(res, pageParameters);
-				}
-			}
-		}
-		return null;
-	}
-
-	private IResourceCachingStrategy getCachingStrategy()
-	{
-		return cachingStrategy.get();
-	}
-
-	protected Class<?> resolveClass(String name)
-	{
-		return WicketObjects.resolveClass(name);
-	}
-
-	protected String getClassName(Class<?> scope)
-	{
-		return scope.getName();
-	}
-
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		if (requestHandler instanceof ResourceReferenceRequestHandler)
-		{
-			ResourceReferenceRequestHandler referenceRequestHandler = (ResourceReferenceRequestHandler)requestHandler;
-			ResourceReference reference = referenceRequestHandler.getResourceReference();
-
-			Url url;
-
-			if (reference instanceof MetaInfStaticResourceReference)
-			{
-				url = ((MetaInfStaticResourceReference)reference).mapHandler(referenceRequestHandler);
-				// if running on Servlet 3.0 engine url is not null
-				if (url != null)
-				{
-					return url;
-				}
-				// otherwise it has to be served by the standard wicket way
-			}
-
-			url = new Url();
-
-			List<String> segments = url.getSegments();
-			segments.add(getContext().getNamespace());
-			segments.add(getContext().getResourceIdentifier());
-			segments.add(getClassName(reference.getScope()));
-
-			// setup resource parameters
-			PageParameters parameters = referenceRequestHandler.getPageParameters();
-
-			if (parameters == null)
-			{
-				parameters = new PageParameters();
-			}
-			else
-			{
-				parameters = new PageParameters(parameters);
-
-				// need to remove indexed parameters otherwise the URL won't be able to decode
-				parameters.clearIndexed();
-			}
-			encodeResourceReferenceAttributes(url, reference);
-
-			StringTokenizer tokens = new StringTokenizer(reference.getName(), "/");
-
-			while (tokens.hasMoreTokens())
-			{
-				String token = tokens.nextToken();
-
-				// on the last component of the resource path
-				if (tokens.hasMoreTokens() == false && Strings.isEmpty(token) == false)
-				{
-					final IResource resource = reference.getResource();
-
-					// apply caching if required
-					if (resource instanceof IStaticCacheableResource)
-					{
-						// add caching related information to filename + query parameters
-						final IStaticCacheableResource cacheable = (IStaticCacheableResource)resource;
-						final ResourceUrl resourceUrl = new ResourceUrl(token, parameters);
-						getCachingStrategy().decorateUrl(resourceUrl, cacheable);
-						token = resourceUrl.getFileName();
-
-						if (Strings.isEmpty(token))
-						{
-							throw new IllegalStateException("caching strategy returned empty name for " + resource);
-						}
-					}
-				}
-				segments.add(token);
-			}
-
-			if (parameters.isEmpty() == false)
-			{
-				url = encodePageParameters(url, parameters, pageParametersEncoder);
-			}
-
-			return url;
-		}
-		return null;
-	}
-
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		Url url = request.getUrl();
-
-		int score = -1;
-		if (url.getSegments().size() >= 4 &&
-			urlStartsWith(url, getContext().getNamespace(), getContext().getResourceIdentifier()))
-		{
-			score = 1;
-		}
-
-		return score;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
deleted file mode 100644
index 759f389..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.util.lang.Args;
-
-/**
- * Decodes and encodes the following URLs:
- * 
- * <pre>
- *  Page Class - Render (BookmarkablePageRequestHandler)
- *  /wicket/bookmarkable/org.apache.wicket.MyPage
- *  (will redirect to hybrid alternative if page is not stateless)
- * 
- *  Page Instance - Render Hybrid (RenderPageRequestHandler for pages that were created using bookmarkable URLs)
- *  /wicket/bookmarkable/org.apache.wicket.MyPage?2
- * 
- *  Page Instance - Bookmarkable Listener (BookmarkableListenerInterfaceRequestHandler)
- *  /wicket/bookmarkable/org.apache.wicket.MyPage?2-click-foo-bar-baz
- *  /wicket/bookmarkable/org.apache.wicket.MyPage?2-click.1-foo-bar-baz (1 is behavior index)
- *  (these will redirect to hybrid if page is not stateless)
- * </pre>
- * 
- * @author Matej Knopp
- */
-public class BookmarkableMapper extends AbstractBookmarkableMapper
-{
-	private final IPageParametersEncoder pageParametersEncoder;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param pageParametersEncoder
-	 */
-	public BookmarkableMapper(IPageParametersEncoder pageParametersEncoder)
-	{
-		Args.notNull(pageParametersEncoder, "pageParametersEncoder");
-
-		this.pageParametersEncoder = pageParametersEncoder;
-	}
-
-	/**
-	 * Construct.
-	 */
-	public BookmarkableMapper()
-	{
-		this(new PageParametersEncoder());
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#buildUrl(org.apache.wicket.request.mapper.AbstractBookmarkableMapper.UrlInfo)
-	 */
-	@Override
-	protected Url buildUrl(UrlInfo info)
-	{
-		Url url = new Url();
-		url.getSegments().add(getContext().getNamespace());
-		url.getSegments().add(getContext().getBookmarkableIdentifier());
-		url.getSegments().add(info.getPageClass().getName());
-
-		encodePageComponentInfo(url, info.getPageComponentInfo());
-
-		return encodePageParameters(url, info.getPageParameters(), pageParametersEncoder);
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	protected UrlInfo parseRequest(Request request)
-	{
-		if (Application.exists())
-		{
-			if (Application.get().getSecuritySettings().getEnforceMounts())
-			{
-				return null;
-			}
-		}
-
-		Url url = request.getUrl();
-		if (matches(url))
-		{
-			// try to extract page and component information from URL
-			PageComponentInfo info = getPageComponentInfo(url);
-
-			// load the page class
-			String className = url.getSegments().get(2);
-			Class<? extends IRequestablePage> pageClass = getPageClass(className);
-
-			if (pageClass != null && IRequestablePage.class.isAssignableFrom(pageClass))
-			{
-
-				// extract the PageParameters from URL if there are any
-				PageParameters pageParameters = extractPageParameters(request, 3,
-					pageParametersEncoder);
-
-				return new UrlInfo(info, pageClass, pageParameters);
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#pageMustHaveBeenCreatedBookmarkable()
-	 */
-	@Override
-	protected boolean pageMustHaveBeenCreatedBookmarkable()
-	{
-		return true;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		int score = 0;
-		Url url = request.getUrl();
-		if (matches(url))
-		{
-			score = Integer.MAX_VALUE;
-		}
-		return score;
-	}
-
-	private boolean matches(final Url url)
-	{
-		return (url.getSegments().size() >= 3 && urlStartsWith(url, getContext().getNamespace(),
-			getContext().getBookmarkableIdentifier()));
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java
deleted file mode 100644
index 66bbfd7..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.Session;
-import org.apache.wicket.protocol.http.BufferedWebResponse;
-import org.apache.wicket.protocol.http.WebApplication;
-import org.apache.wicket.request.IRequestCycle;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.IRequestMapper;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.handler.BufferedResponseRequestHandler;
-import org.apache.wicket.session.ISessionStore;
-import org.apache.wicket.util.string.Strings;
-
-/**
- * Encoder that intercepts requests for which there is already stored buffer with rendered data.
- * 
- * @author Matej Knopp
- */
-public class BufferedResponseMapper implements IRequestMapper
-{
-	/**
-	 * Construct.
-	 */
-	public BufferedResponseMapper()
-	{
-	}
-
-	/**
-	 * @return the current session id for stateful pages and <code>null</code> for stateless pages
-	 *         and non-http threads
-	 */
-	protected String getSessionId()
-	{
-		String sessionId = null;
-
-		if (Application.exists() && RequestCycle.get() != null)
-		{
-			ISessionStore sessionStore = Application.get().getSessionStore();
-			IRequestCycle requestCycle = RequestCycle.get();
-			Session session = sessionStore.lookup(requestCycle.getRequest());
-			if (session != null)
-			{
-				sessionId = session.getId();
-			}
-		}
-
-		return sessionId;
-	}
-
-	protected boolean hasBufferedResponse(Url url)
-	{
-		String sessionId = getSessionId();
-		boolean hasResponse = false;
-		if (Strings.isEmpty(sessionId) == false)
-		{
-			hasResponse = WebApplication.get().hasBufferedResponse(sessionId, url);
-		}
-		return hasResponse;
-	}
-
-	protected BufferedWebResponse getAndRemoveBufferedResponse(Url url)
-	{
-		String sessionId = getSessionId();
-		BufferedWebResponse response = null;
-		if (Strings.isEmpty(sessionId) == false)
-		{
-			response = WebApplication.get().getAndRemoveBufferedResponse(sessionId, url);
-		}
-		return response;
-	}
-
-	private Request getRequest(Request original)
-	{
-		// The buffers are stored under "real" URL which can be different
-		// than the URL handlers get due to global URL pre/postprocessing
-		// (i.e. prepending URL with language segment).
-		// Because of that we need find out the real URL from request cycle
-
-		if (RequestCycle.get() != null)
-		{
-			return RequestCycle.get().getRequest();
-		}
-		else
-		{
-			return original;
-		}
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#mapRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public IRequestHandler mapRequest(Request request)
-	{
-		request = getRequest(request);
-
-		BufferedWebResponse response = getAndRemoveBufferedResponse(request.getUrl());
-		if (response != null)
-		{
-			return new BufferedResponseRequestHandler(response);
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#mapHandler(org.apache.wicket.request.IRequestHandler)
-	 */
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		return null;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		request = getRequest(request);
-
-		if (hasBufferedResponse(request.getUrl()))
-		{
-			return Integer.MAX_VALUE;
-		}
-		else
-		{
-			return 0;
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
deleted file mode 100755
index f0e4c20..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.util.List;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.IRequestMapper;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.util.IProvider;
-import org.apache.wicket.util.crypt.ICrypt;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.string.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Request mapper that encrypts urls generated by another mapper. The original URL (both segments
- * and parameters) is encrypted and is represented as URL segment. To be able to handle relative
- * URLs for images in .css file the same amount of URL segments that the original URL had are
- * appended to the encrypted URL. Each segment has a precise 5 character value, calculated using a
- * checksum. This helps in calculating the relative distance from the original URL. When a URL is
- * returned by the browser, we iterate through these checksummed placeholder URL segments. If the
- * segment matches the expected checksum, then the segment it deemed to be the corresponding segment
- * in the encrypted URL. If the segment does not match the expected checksum, then the segment is
- * deemed a plain text sibling of the corresponding segment in the encrypted URL, and all subsequent
- * segments are considered plain text children of the current segment.
- * 
- * 
- * @author igor.vaynberg
- * @author Jesse Long
- * @author svenmeier
- */
-public class CryptoMapper implements IRequestMapper
-{
-	private static final Logger log = LoggerFactory.getLogger(CryptoMapper.class);
-
-	private final IRequestMapper wrappedMapper;
-	private final IProvider<ICrypt> cryptProvider;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param wrappedMapper
-	 *            the non-crypted request mapper
-	 * @param application
-	 *            the current application
-	 */
-	public CryptoMapper(final IRequestMapper wrappedMapper, final Application application)
-	{
-		this(wrappedMapper, new ApplicationCryptProvider(application));
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param wrappedMapper
-	 *            the non-crypted request mapper
-	 * @param cryptProvider
-	 *            the custom crypt provider
-	 */
-	public CryptoMapper(final IRequestMapper wrappedMapper, final IProvider<ICrypt> cryptProvider)
-	{
-		this.wrappedMapper = Args.notNull(wrappedMapper, "wrappedMapper");
-		this.cryptProvider = Args.notNull(cryptProvider, "cryptProvider");
-	}
-
-	@Override
-	public int getCompatibilityScore(final Request request)
-	{
-		return 0;
-	}
-
-	@Override
-	public Url mapHandler(final IRequestHandler requestHandler)
-	{
-		final Url url = wrappedMapper.mapHandler(requestHandler);
-
-		if (url == null)
-		{
-			return null;
-		}
-
-		return encryptUrl(url);
-	}
-
-	@Override
-	public IRequestHandler mapRequest(final Request request)
-	{
-		Url url = decryptUrl(request, request.getUrl());
-
-		if (url == null)
-		{
-			return null;
-		}
-
-		return wrappedMapper.mapRequest(request.cloneWithUrl(url));
-	}
-
-	/**
-	 * @return the {@link ICrypt} implementation that may be used to encrypt/decrypt {@link Url}'s
-	 *         segments and/or query string
-	 */
-	protected final ICrypt getCrypt()
-	{
-		return cryptProvider.get();
-	}
-
-	/**
-	 * @return the wrapped root request mapper
-	 */
-	protected final IRequestMapper getWrappedMapper()
-	{
-		return wrappedMapper;
-	}
-
-	private Url encryptUrl(final Url url)
-	{
-		if (url.getSegments().isEmpty() && url.getQueryParameters().isEmpty())
-		{
-			return url;
-		}
-		String encryptedUrlString = getCrypt().encryptUrlSafe(url.toString());
-
-		Url encryptedUrl = new Url(url.getCharset());
-		encryptedUrl.getSegments().add(encryptedUrlString);
-
-		int numberOfSegments = url.getSegments().size();
-		HashedSegmentGenerator generator = new HashedSegmentGenerator(encryptedUrlString);
-		for (int segNo = 0; segNo < numberOfSegments; segNo++)
-		{
-			encryptedUrl.getSegments().add(generator.next());
-		}
-		return encryptedUrl;
-	}
-
-	private Url decryptUrl(final Request request, final Url encryptedUrl)
-	{
-		if (encryptedUrl.getSegments().isEmpty())
-		{
-			return encryptedUrl;
-		}
-
-		List<String> encryptedSegments = encryptedUrl.getSegments();
-		if (encryptedSegments.size() < 1)
-		{
-			return null;
-		}
-
-		Url url = new Url(request.getCharset());
-		try
-		{
-			String encryptedUrlString = encryptedSegments.get(0);
-			if (Strings.isEmpty(encryptedUrlString))
-			{
-				return null;
-			}
-
-			String decryptedUrl = getCrypt().decryptUrlSafe(encryptedUrlString);
-			if (decryptedUrl == null)
-			{
-				return null;
-			}
-			Url originalUrl = Url.parse(decryptedUrl, request.getCharset());
-
-			int originalNumberOfSegments = originalUrl.getSegments().size();
-			int encryptedNumberOfSegments = encryptedUrl.getSegments().size();
-
-			HashedSegmentGenerator generator = new HashedSegmentGenerator(encryptedUrlString);
-			int segNo = 1;
-			for (; segNo < encryptedNumberOfSegments; segNo++)
-			{
-				if (segNo > originalNumberOfSegments)
-				{
-					break;
-				}
-
-				String next = generator.next();
-				String encryptedSegment = encryptedSegments.get(segNo);
-				if (!next.equals(encryptedSegment))
-				{
-					break;
-				}
-
-				// unmodified segment
-				url.getSegments().add(originalUrl.getSegments().get(segNo - 1));
-			}
-			for (; segNo < encryptedNumberOfSegments; segNo++)
-			{
-				// modified or additional segment
-				url.getSegments().add(encryptedUrl.getSegments().get(segNo));
-			}
-
-			url.getQueryParameters().addAll(originalUrl.getQueryParameters());
-		}
-		catch (Exception e)
-		{
-			log.error("Error decrypting URL", e);
-			url = null;
-		}
-
-		return url;
-	}
-
-	private static class ApplicationCryptProvider implements IProvider<ICrypt>
-	{
-		private final Application application;
-
-		public ApplicationCryptProvider(final Application application)
-		{
-			this.application = application;
-		}
-
-		@Override
-		public ICrypt get()
-		{
-			return application.getSecuritySettings().getCryptFactory().newCrypt();
-		}
-	}
-
-	/**
-	 * A generator of hashed segments.
-	 */
-	private static class HashedSegmentGenerator
-	{
-		private char[] characters;
-
-		private int hash = 0;
-
-		public HashedSegmentGenerator(String string)
-		{
-			characters = string.toCharArray();
-		}
-
-		/**
-		 * Generate the next segment
-		 * 
-		 * @return segment
-		 */
-		public String next()
-		{
-			char a = characters[Math.abs(hash % characters.length)];
-			hash++;
-			char b = characters[Math.abs(hash % characters.length)];
-			hash++;
-			char c = characters[Math.abs(hash % characters.length)];
-
-			String segment = "" + a + b + c;
-			hash = hashString(segment);
-
-			segment += String.format("%02x", Math.abs(hash % 256));
-			hash = hashString(segment);
-
-			return segment;
-		}
-
-		private int hashString(final String str)
-		{
-			int hash = 97;
-
-			for (char c : str.toCharArray())
-			{
-				int i = c;
-				hash = 47 * hash + i;
-			}
-
-			return hash;
-		}
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/HomePageMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/HomePageMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/HomePageMapper.java
deleted file mode 100644
index f5f549a..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/HomePageMapper.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.util.ClassProvider;
-
-/**
- * A mapper that is used when a request to the home page ("/") is made
- */
-public class HomePageMapper extends MountedMapper
-{
-
-	/**
-	 * Construct.
-	 * 
-	 * @param pageClass
-	 *            the class of the page which should handle requests to "/"
-	 */
-	public HomePageMapper(final Class<? extends IRequestablePage> pageClass)
-	{
-		super("/", pageClass);
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param pageClassProvider
-	 *            the class of the page which should handle requests to "/"
-	 */
-	public HomePageMapper(ClassProvider<? extends IRequestablePage> pageClassProvider)
-	{
-		super("/", pageClassProvider);
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param pageClass
-	 *            the class of the page which should handle requests to "/"
-	 * @param pageParametersEncoder
-	 *            the encoder that will be used to encode/decode the page parameters
-	 */
-	public HomePageMapper(Class<? extends IRequestablePage> pageClass,
-		IPageParametersEncoder pageParametersEncoder)
-	{
-		super("/", pageClass, pageParametersEncoder);
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param pageClassProvider
-	 *            the class of the page which should handle requests to "/"
-	 * @param pageParametersEncoder
-	 *            the encoder that will be used to encode/decode the page parameters
-	 */
-	public HomePageMapper(final ClassProvider<? extends IRequestablePage> pageClassProvider,
-		IPageParametersEncoder pageParametersEncoder)
-	{
-		super("/", pageClassProvider, pageParametersEncoder);
-	}
-
-	/**
-	 * Matches only when there are no segments/indexed parameters
-	 * 
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	protected UrlInfo parseRequest(Request request)
-	{
-		// get canonical url
-		final Url url = request.getUrl().canonical();
-		
-		if (url.getSegments().size() > 0)
-		{
-			// home page cannot have segments/indexed parameters
-			return null;
-		}
-
-		return super.parseRequest(request);
-	}
-
-	/**
-	 * Use this mapper as a last option. Let all other mappers to try to handle the request
-	 * 
-	 * @see org.apache.wicket.request.mapper.MountedMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		return Integer.MIN_VALUE + 1;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/IMapperContext.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/IMapperContext.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/IMapperContext.java
deleted file mode 100644
index 02fb065..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/IMapperContext.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.resource.ResourceReferenceRegistry;
-
-/**
- * Utility interface for providing and creating new page instances.
- * 
- * @author Matej Knopp
- */
-public interface IMapperContext extends IPageSource
-{
-	/**
-	 * @return the namespace for Wicket URLs.
-	 */
-	String getNamespace();
-
-	/**
-	 * @return identifier for non bookmarkable URLs
-	 */
-	String getPageIdentifier();
-
-	/**
-	 * @return identifier for bookmarkable URLs
-	 */
-	String getBookmarkableIdentifier();
-
-	/**
-	 * @return identifier for resources
-	 */
-	String getResourceIdentifier();
-
-	/**
-	 * @return {@link ResourceReferenceRegistry}
-	 */
-	ResourceReferenceRegistry getResourceReferenceRegistry();
-
-	/**
-	 * Returns the listener interface name as string.
-	 * 
-	 * @param listenerInterface
-	 * @return listener interface name as string
-	 */
-	String requestListenerInterfaceToString(RequestListenerInterface listenerInterface);
-
-	/**
-	 * Returns listener interface for the name
-	 * 
-	 * @param interfaceName
-	 * @return listener interface
-	 */
-	RequestListenerInterface requestListenerInterfaceFromString(String interfaceName);
-
-	/**
-	 * Returns the home page class.
-	 * 
-	 * @return home page class
-	 */
-	Class<? extends IRequestablePage> getHomePageClass();
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/IPageSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/IPageSource.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/IPageSource.java
deleted file mode 100644
index 8adf9a9..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/IPageSource.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-/**
- * Interface for objects that are capable of getting and creating page instance.
- * 
- * @author Matej Knopp
- */
-public interface IPageSource
-{
-	/**
-	 * Returns existing page instance if the page exists.
-	 * 
-	 * @param pageId
-	 * @return page instance or <code>null</code> if the page does not exist.
-	 */
-	IRequestablePage getPageInstance(int pageId);
-
-	/**
-	 * Creates new page instance of page with given class. The page should be marked as create
-	 * bookmarkable, so subsequent calls to {@link IRequestablePage#wasCreatedBookmarkable()} must
-	 * return <code>true</code>
-	 * 
-	 * @param pageMapName
-	 * @param pageClass
-	 * @param pageParameters
-	 * @return new page instance
-	 */
-	IRequestablePage newPageInstance(Class<? extends IRequestablePage> pageClass,
-		PageParameters pageParameters);
-
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
deleted file mode 100644
index 864859a..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/MountedMapper.java
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.handler.ListenerInterfaceRequestHandler;
-import org.apache.wicket.request.mapper.info.ComponentInfo;
-import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.info.PageInfo;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.util.ClassProvider;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.string.Strings;
-
-/**
- * Encoder for mounted URL. The mount path can contain parameter placeholders, i.e.
- * <code>/mount/${foo}/path</code>. In that case the appropriate segment from the URL will be
- * accessible as named parameter "foo" in the {@link PageParameters}. Similarly when the URL is
- * constructed, the second segment will contain the value of the "foo" named page parameter.
- * Optional parameters are denoted by using a # instead of $: <code>/mount/#{foo}/path/${bar}</code>
- * has an optional {@code foo} parameter, a fixed {@code /path/} part and a required {@code bar}
- * parameter. When in doubt, parameters are matched from left to right, where required parameters
- * are matched before optional parameters, and optional parameters eager (from left to right).
- * <p>
- * Decodes and encodes the following URLs:
- * 
- * <pre>
- *  Page Class - Render (BookmarkablePageRequestHandler for mounted pages)
- *  /mount/point
- *  (these will redirect to hybrid alternative if page is not stateless)
- * 
- *  IPage Instance - Render Hybrid (RenderPageRequestHandler for mounted pages) 
- *  /mount/point?2
- * 
- *  IPage Instance - Bookmarkable Listener (BookmarkableListenerInterfaceRequestHandler for mounted pages) 
- *  /mount/point?2-click-foo-bar-baz
- *  /mount/point?2-5.click.1-foo-bar-baz (1 is behavior index, 5 is render count)
- *  (these will redirect to hybrid if page is not stateless)
- * </pre>
- * 
- * @author Matej Knopp
- */
-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;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param mountPath
-	 * @param pageClass
-	 */
-	public MountedMapper(String mountPath, Class<? extends IRequestablePage> pageClass)
-	{
-		this(mountPath, pageClass, new PageParametersEncoder());
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param mountPath
-	 * @param pageClassProvider
-	 */
-	public MountedMapper(String mountPath,
-		ClassProvider<? extends IRequestablePage> pageClassProvider)
-	{
-		this(mountPath, pageClassProvider, new PageParametersEncoder());
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param mountPath
-	 * @param pageClass
-	 * @param pageParametersEncoder
-	 */
-	public MountedMapper(String mountPath, Class<? extends IRequestablePage> pageClass,
-		IPageParametersEncoder pageParametersEncoder)
-	{
-		this(mountPath, ClassProvider.of(pageClass), pageParametersEncoder);
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param mountPath
-	 * @param pageClassProvider
-	 * @param pageParametersEncoder
-	 */
-	public MountedMapper(String mountPath,
-		ClassProvider<? extends IRequestablePage> pageClassProvider,
-		IPageParametersEncoder pageParametersEncoder)
-	{
-		Args.notEmpty(mountPath, "mountPath");
-		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 org.apache.wicket.request.mapper.AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	protected UrlInfo parseRequest(Request request)
-	{
-		Url url = request.getUrl();
-
-		// when redirect to buffer/render is active and redirectFromHomePage returns true
-		// check mounted class against the home page class. if it matches let wicket redirect
-		// to the mounted URL
-		if (redirectFromHomePage() && checkHomePage(url))
-		{
-			return new UrlInfo(null, getContext().getHomePageClass(), newPageParameters());
-		}
-		// check if the URL starts with the proper segments
-		else if (urlStartsWith(url, mountSegments))
-		{
-			// try to extract page and component information from URL
-			PageComponentInfo info = getPageComponentInfo(url);
-			Class<? extends IRequestablePage> pageClass = getPageClass();
-			PageParameters pageParameters = extractPageParameters(request, url);
-
-			return new UrlInfo(info, pageClass, pageParameters);
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	/*
-	 * extract the PageParameters from URL if there are any
-	 */
-	private PageParameters extractPageParameters(Request request, Url url)
-	{
-		int[] matchedParameters = getMatchedSegmentSizes(url);
-		int total = 0;
-		for (int curMatchSize : matchedParameters)
-			total += curMatchSize;
-		PageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
-
-		int skippedParameters = 0;
-		for (int pathSegmentIndex = 0; pathSegmentIndex < pathSegments.size(); pathSegmentIndex++)
-		{
-			MountPathSegment curPathSegment = pathSegments.get(pathSegmentIndex);
-			int matchSize = matchedParameters[pathSegmentIndex] - curPathSegment.getFixedPartSize();
-			int optionalParameterMatch = matchSize - curPathSegment.getMinParameters();
-			for (int matchSegment = 0; matchSegment < matchSize; matchSegment++)
-			{
-				if (pageParameters == null)
-				{
-					pageParameters = new PageParameters();
-				}
-
-				int curSegmentIndex = matchSegment + curPathSegment.getSegmentIndex();
-				String curSegment = mountSegments[curSegmentIndex];
-				String placeholder = getPlaceholder(curSegment);
-				String optionalPlaceholder = getOptionalPlaceholder(curSegment);
-				// extract the parameter from URL
-				if (placeholder != null)
-				{
-					pageParameters.add(placeholder,
-						url.getSegments().get(curSegmentIndex - skippedParameters));
-				}
-				else if (optionalPlaceholder != null && optionalParameterMatch > 0)
-				{
-					pageParameters.add(optionalPlaceholder,
-						url.getSegments().get(curSegmentIndex - skippedParameters));
-					optionalParameterMatch--;
-				}
-			}
-			skippedParameters += curPathSegment.getMaxParameters() - matchSize;
-		}
-		return pageParameters;
-	}
-
-	@Override
-	protected boolean urlStartsWith(Url url, String... segments)
-	{
-		if (url == null)
-		{
-			return false;
-		}
-		else
-		{
-			return getMatchedSegmentSizes(url) != null;
-		}
-	}
-
-	private int[] getMatchedSegmentSizes(Url url)
-	{
-		int[] ret = new int[pathSegments.size()];
-		int segmentIndex = 0;
-		int pathSegmentIndex = 0;
-		for (MountPathSegment curPathSegment : pathSegments.subList(0, pathSegments.size() - 1))
-		{
-			boolean foundFixedPart = false;
-			segmentIndex += curPathSegment.getMinParameters();
-			int max = Math.min(curPathSegment.getOptionalParameters() + 1,
-				url.getSegments().size() - segmentIndex);
-
-			for (int count = max - 1; count >= 0; count--)
-			{
-				if (url.getSegments()
-					.get(segmentIndex + count)
-					.equals(curPathSegment.getFixedPart()))
-				{
-					foundFixedPart = true;
-					segmentIndex += count + 1;
-					ret[pathSegmentIndex] = count + curPathSegment.getMinParameters() + 1;
-					break;
-				}
-			}
-			if (!foundFixedPart)
-				return null;
-			pathSegmentIndex++;
-		}
-		MountPathSegment lastSegment = pathSegments.get(pathSegments.size() - 1);
-		segmentIndex += lastSegment.getMinParameters();
-		if (segmentIndex > url.getSegments().size())
-			return null;
-		ret[pathSegmentIndex] = Math.min(lastSegment.getMaxParameters(), url.getSegments().size() -
-			segmentIndex + lastSegment.getMinParameters());
-		return ret;
-	}
-
-	protected PageParameters newPageParameters()
-	{
-		return new PageParameters();
-	}
-
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		Url url = super.mapHandler(requestHandler);
-
-		if (url == null && requestHandler instanceof ListenerInterfaceRequestHandler &&
-			getRecreateMountedPagesAfterExpiry())
-		{
-			ListenerInterfaceRequestHandler handler = (ListenerInterfaceRequestHandler)requestHandler;
-			IRequestablePage page = handler.getPage();
-			if (checkPageInstance(page))
-			{
-				String componentPath = handler.getComponentPath();
-				RequestListenerInterface listenerInterface = handler.getListenerInterface();
-
-				Integer renderCount = null;
-				if (listenerInterface.isIncludeRenderCount())
-				{
-					renderCount = page.getRenderCount();
-				}
-
-				PageInfo pageInfo = new PageInfo(page.getPageId());
-				ComponentInfo componentInfo = new ComponentInfo(renderCount,
-					requestListenerInterfaceToString(listenerInterface), componentPath,
-					handler.getBehaviorIndex());
-				PageComponentInfo pageComponentInfo = new PageComponentInfo(pageInfo, componentInfo);
-				PageParameters parameters = new PageParameters(page.getPageParameters());
-				UrlInfo urlInfo = new UrlInfo(pageComponentInfo, page.getClass(),
-					parameters.mergeWith(handler.getPageParameters()));
-				url = buildUrl(urlInfo);
-			}
-		}
-
-		return url;
-	}
-
-	boolean getRecreateMountedPagesAfterExpiry()
-	{
-		return Application.get().getPageSettings().getRecreateMountedPagesAfterExpiry();
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#buildUrl(org.apache.wicket.request.mapper.AbstractBookmarkableMapper.UrlInfo)
-	 */
-	@Override
-	protected Url buildUrl(UrlInfo info)
-	{
-		Url url = new Url();
-		for (String s : mountSegments)
-		{
-			url.getSegments().add(s);
-		}
-		encodePageComponentInfo(url, info.getPageComponentInfo());
-
-		PageParameters copy = new PageParameters(info.getPageParameters());
-
-		int dropped = 0;
-		for (int i = 0; i < mountSegments.length; ++i)
-		{
-			String placeholder = getPlaceholder(mountSegments[i]);
-			String optionalPlaceholder = getOptionalPlaceholder(mountSegments[i]);
-			if (placeholder != 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);
-	}
-
-	/**
-	 * Check if the URL is for home page and the home page class match mounted class. If so,
-	 * redirect to mounted URL.
-	 * 
-	 * @param url
-	 * @return request handler or <code>null</code>
-	 */
-	private boolean checkHomePage(Url url)
-	{
-		if (url.getSegments().isEmpty() && url.getQueryParameters().isEmpty())
-		{
-			// this is home page
-			if (getPageClass().equals(getContext().getHomePageClass()) && redirectFromHomePage())
-			{
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * If this method returns <code>true</code> and application home page class is same as the class
-	 * mounted with this encoder, request to home page will result in a redirect to the mounted
-	 * path.
-	 * 
-	 * @return whether this encode should respond to home page request when home page class is same
-	 *         as mounted class.
-	 */
-	protected boolean redirectFromHomePage()
-	{
-		return true;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#pageMustHaveBeenCreatedBookmarkable()
-	 */
-	@Override
-	protected boolean pageMustHaveBeenCreatedBookmarkable()
-	{
-		return false;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		if (urlStartsWith(request.getUrl(), mountSegments))
-		{
-			return mountSegments.length;
-		}
-		else
-		{
-			return 0;
-		}
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#checkPageClass(java.lang.Class)
-	 */
-	@Override
-	protected boolean checkPageClass(Class<? extends IRequestablePage> pageClass)
-	{
-		return pageClass.equals(this.getPageClass());
-	}
-
-	private Class<? extends IRequestablePage> getPageClass()
-	{
-		return pageClassProvider.get();
-	}
-
-	@Override
-	public String toString()
-	{
-		return "MountedMapper [mountSegments=" + Strings.join("/", mountSegments) + "]";
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
deleted file mode 100644
index bfacbcb..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PackageMapper.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.lang.reflect.Modifier;
-
-import org.apache.wicket.protocol.http.WebApplication;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.lang.PackageName;
-
-/**
- * A request mapper that mounts all bookmarkable pages in a given package.
- * <p>
- * To mount this mapper onto a path use the {@link WebApplication#mountPackage(String, Class)}, ex:
- * 
- * <pre>
- * MyApp#init() {
- * 
- *   super.init();
- *   mountPackage(&quot;/my/path&quot;, MyPage.class);
- * }
- * </pre>
- * 
- * will result in urls like {@code /my/path/MyPage}
- * </p>
- * 
- * <pre>
- *  Page Class - Render (BookmarkablePageRequestHandler)
- *  /MyPage
- *  (will redirect to hybrid alternative if page is not stateless)
- * 
- *  Page Instance - Render Hybrid (RenderPageRequestHandler for pages that were created using bookmarkable URLs)
- *  /MyPage?2
- * 
- *  Page Instance - Bookmarkable Listener (BookmarkableListenerInterfaceRequestHandler)
- *  /MyPage?2-click-foo-bar-baz
- *  /MyPage?2-click.1-foo-bar-baz (1 is behavior index)
- *  (these will redirect to hybrid if page is not stateless)
- * </pre>
- */
-public class PackageMapper extends AbstractBookmarkableMapper
-{
-	/**
-	 * the name of the package for which all bookmarkable pages should be mounted
-	 */
-	private final PackageName packageName;
-
-	/** the encoder used to encode/decode the page parameters */
-	private final IPageParametersEncoder pageParametersEncoder;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param packageName
-	 */
-	public PackageMapper(final PackageName packageName)
-	{
-		this(packageName, new PageParametersEncoder());
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param packageName
-	 * @param pageParametersEncoder
-	 */
-	public PackageMapper(final PackageName packageName,
-		final IPageParametersEncoder pageParametersEncoder)
-	{
-		Args.notNull(packageName, "packageName");
-		Args.notNull(pageParametersEncoder, "pageParametersEncoder");
-
-		this.packageName = packageName;
-		this.pageParametersEncoder = pageParametersEncoder;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#buildUrl(org.apache.wicket.request.mapper.AbstractBookmarkableMapper.UrlInfo)
-	 */
-	@Override
-	protected Url buildUrl(UrlInfo info)
-	{
-		Class<? extends IRequestablePage> pageClass = info.getPageClass();
-		PackageName pageClassPackageName = PackageName.forClass(pageClass);
-		if (pageClassPackageName.equals(packageName))
-		{
-			Url url = new Url();
-
-			String fullyQualifiedClassName = pageClass.getName();
-			String packageRelativeClassName = fullyQualifiedClassName;
-			int packageNameLength = packageName.getName().length();
-			if (packageNameLength > 0)
-			{
-				packageRelativeClassName = fullyQualifiedClassName.substring(packageNameLength + 1);
-			}
-			packageRelativeClassName = transformForUrl(packageRelativeClassName);
-			url.getSegments().add(packageRelativeClassName);
-			encodePageComponentInfo(url, info.getPageComponentInfo());
-			return encodePageParameters(url, info.getPageParameters(), pageParametersEncoder);
-		}
-
-		return null;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	protected UrlInfo parseRequest(Request request)
-	{
-		Url url = request.getUrl();
-		if (url.getSegments().size() >= 1)
-		{
-			// try to extract page and component information from URL
-			PageComponentInfo info = getPageComponentInfo(url);
-
-			// load the page class
-			String className = url.getSegments().get(0);
-			
-			if (isValidClassName(className) == false)
-			{
-				return null;
-			}
-
-			className = transformFromUrl(className);
-			String fullyQualifiedClassName = packageName.getName() + '.' + className;
-			Class<? extends IRequestablePage> pageClass = getPageClass(fullyQualifiedClassName);
-
-			if (pageClass != null && Modifier.isAbstract(pageClass.getModifiers()) == false &&
-				IRequestablePage.class.isAssignableFrom(pageClass))
-			{
-				// extract the PageParameters from URL if there are any
-				PageParameters pageParameters = extractPageParameters(request, 1,
-					pageParametersEncoder);
-
-				return new UrlInfo(info, pageClass, pageParameters);
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * filter out invalid class names for package mapper. getting trash for class names
-	 * can e.g. happen when the home page is in the same package that is mounted by package mapper
-	 * but the request was previously mapped by e.g. {@link HomePageMapper}. We then get some 
-	 * strange url like '/example/..' and wicket tries to look up class name '..'.
-	 * <p/>
-	 *  @see <a href="https://issues.apache.org/jira/browse/WICKET-4303">WICKET-4303</a>
-	 *  <p/>
-	 */
-	private boolean isValidClassName(String className)
-	{
-		// darn simple check - feel free to enhance this method to your needs
-		if (className == null)
-		{
-			return false;
-		}
-		// java class names never start with '.'
-		if (className.startsWith("."))
-		{
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * Gives a chance to specializations of this mapper to transform the alias of the class name to
-	 * the real class name
-	 * 
-	 * @param classNameAlias
-	 *            the alias for the class name
-	 * @return the real class name
-	 */
-	protected String transformFromUrl(final String classNameAlias)
-	{
-		return classNameAlias;
-	}
-
-	/**
-	 * Gives a chance to specializations of this mapper to transform the real class name to an alias
-	 * which is prettier to represent in the Url
-	 * 
-	 * @param className
-	 *            the real class name
-	 * @return the class name alias
-	 */
-	protected String transformForUrl(final String className)
-	{
-		return className;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#pageMustHaveBeenCreatedBookmarkable()
-	 */
-	@Override
-	protected boolean pageMustHaveBeenCreatedBookmarkable()
-	{
-		return true;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.mapper.AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		// always return 0 here so that the mounts have higher priority
-		return 0;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java
deleted file mode 100644
index ae07088..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.handler.ListenerInterfaceRequestHandler;
-import org.apache.wicket.request.handler.PageAndComponentProvider;
-import org.apache.wicket.request.handler.PageProvider;
-import org.apache.wicket.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.request.mapper.info.ComponentInfo;
-import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.info.PageInfo;
-
-/**
- * Decodes and encodes the following URLs:
- * 
- * <pre>
- *  Page Instance - Render (RenderPageRequestHandler)
- *  /wicket/page?2
- * 
- * 
- *  Page Instance - Listener (ListenerInterfaceRequestHandler)
- *  /wicket/page?2-click-foo-bar-baz
- *  /wicket/page?2-click.1-foo-bar-baz (1 is behavior index)
- * </pre>
- * 
- * @author Matej Knopp
- */
-public class PageInstanceMapper extends AbstractComponentMapper
-{
-	/**
-	 * Construct.
-	 */
-	public PageInstanceMapper()
-	{
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#mapRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public IRequestHandler mapRequest(Request request)
-	{
-		Url url = request.getUrl();
-		if (matches(url))
-		{
-			PageComponentInfo info = getPageComponentInfo(url);
-			if (info != null && info.getPageInfo().getPageId() != null)
-			{
-				Integer renderCount = info.getComponentInfo() != null ? info.getComponentInfo()
-					.getRenderCount() : null;
-
-				if (info.getComponentInfo() == null)
-				{
-					PageProvider provider = new PageProvider(info.getPageInfo().getPageId(),
-						renderCount);
-					provider.setPageSource(getContext());
-					// render page
-					return new RenderPageRequestHandler(provider);
-				}
-				else
-				{
-					ComponentInfo componentInfo = info.getComponentInfo();
-
-					PageAndComponentProvider provider = new PageAndComponentProvider(
-						info.getPageInfo().getPageId(), renderCount,
-						componentInfo.getComponentPath());
-
-					provider.setPageSource(getContext());
-
-					// listener interface
-					RequestListenerInterface listenerInterface = requestListenerInterfaceFromString(componentInfo.getListenerInterface());
-
-					return new ListenerInterfaceRequestHandler(provider, listenerInterface,
-						componentInfo.getBehaviorId());
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#mapHandler(org.apache.org.apache.wicket.request.IRequestHandler)
-	 */
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		PageComponentInfo info = null;
-
-		if (requestHandler instanceof RenderPageRequestHandler)
-		{
-			IRequestablePage page = ((RenderPageRequestHandler)requestHandler).getPage();
-
-			PageInfo i = new PageInfo(page.getPageId());
-			info = new PageComponentInfo(i, null);
-		}
-		else if (requestHandler instanceof ListenerInterfaceRequestHandler)
-		{
-			ListenerInterfaceRequestHandler handler = (ListenerInterfaceRequestHandler)requestHandler;
-			IRequestablePage page = handler.getPage();
-			String componentPath = handler.getComponentPath();
-			RequestListenerInterface listenerInterface = handler.getListenerInterface();
-
-			Integer renderCount = null;
-			if (listenerInterface.isIncludeRenderCount())
-			{
-				renderCount = page.getRenderCount();
-			}
-
-			PageInfo pageInfo = new PageInfo(page.getPageId());
-			ComponentInfo componentInfo = new ComponentInfo(renderCount,
-				requestListenerInterfaceToString(listenerInterface), componentPath,
-				handler.getBehaviorIndex());
-			info = new PageComponentInfo(pageInfo, componentInfo);
-		}
-
-		if (info != null)
-		{
-			Url url = new Url();
-			url.getSegments().add(getContext().getNamespace());
-			url.getSegments().add(getContext().getPageIdentifier());
-			encodePageComponentInfo(url, info);
-			return url;
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(final Request request)
-	{
-		int score = 0;
-		Url url = request.getUrl();
-		if (matches(url))
-		{
-			score = Integer.MAX_VALUE;
-		}
-		return score;
-	}
-
-	private boolean matches(final Url url)
-	{
-		return urlStartsWith(url, getContext().getNamespace(), getContext().getPageIdentifier());
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
deleted file mode 100644
index 6aa1541..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.util.List;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.IRequestMapper;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.request.resource.IResource;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
-import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
-import org.apache.wicket.request.resource.caching.ResourceUrl;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.string.Strings;
-
-/**
- * A {@link IRequestMapper} to mount resources to a custom mount path
- * <ul>
- * <li>maps indexed parameters to path segments</li>
- * <li>maps named parameters to query string arguments or placeholder path segments</li>
- * </ul>
- * 
- * <strong>sample structure of url</strong>
- * 
- * <pre>
- *    /myresources/${category}/images/[indexed-param-0]/[indexed-param-1]?[named-param-1=value]&[named-param-2=value2]
- * </pre>
- * 
- * <h4>sample usage</h4>
- * 
- * in your wicket application's init() method use a statement like this
- * <p/>
- * 
- * <pre>
- * mountResource(&quot;/images&quot;, new ImagesResourceReference()));
- * </pre>
- * 
- * Note: Mounted this way the resource reference has application scope, i.e. it is shared between
- * all users of the application. It is recommended to not keep any state in it.
- * 
- * @see org.apache.wicket.protocol.http.WebApplication#mountResource(String,
- *      org.apache.wicket.request.resource.ResourceReference)
- * 
- * @author Peter Ertl
- */
-public class ResourceMapper extends AbstractMapper implements IRequestMapper
-{
-	// encode page parameters into url + decode page parameters from url
-	private final IPageParametersEncoder parametersEncoder;
-
-	// mount path (= segments) the resource is bound to
-	private final String[] mountSegments;
-
-	// resource that the mapper links to
-	private final ResourceReference resourceReference;
-
-	/**
-	 * create a resource mapper for a resource
-	 * 
-	 * @param path
-	 *            mount path for the resource
-	 * @param resourceReference
-	 *            resource reference that should be linked to the mount path
-	 * 
-	 * @see #ResourceMapper(String, org.apache.wicket.request.resource.ResourceReference,
-	 *      org.apache.wicket.request.mapper.parameter.IPageParametersEncoder)
-	 */
-	public ResourceMapper(String path, ResourceReference resourceReference)
-	{
-		this(path, resourceReference, new PageParametersEncoder());
-	}
-
-	/**
-	 * create a resource mapper for a resource
-	 * 
-	 * @param path
-	 *            mount path for the resource
-	 * @param resourceReference
-	 *            resource reference that should be linked to the mount path
-	 * @param encoder
-	 *            encoder for url parameters
-	 */
-	public ResourceMapper(String path, ResourceReference resourceReference,
-		IPageParametersEncoder encoder)
-	{
-		Args.notEmpty(path, "path");
-		Args.notNull(resourceReference, "resourceReference");
-		Args.notNull(encoder, "encoder");
-
-		this.resourceReference = resourceReference;
-		mountSegments = getMountSegments(path);
-		parametersEncoder = encoder;
-	}
-
-	@Override
-	public IRequestHandler mapRequest(final Request request)
-	{
-		final Url url = new Url(request.getUrl());
-
-		// now extract the page parameters from the request url
-		PageParameters parameters = extractPageParameters(request, mountSegments.length,
-			parametersEncoder);
-
-		// remove caching information from current request
-		removeCachingDecoration(url, parameters);
-
-		// check if url matches mount path
-		if (urlStartsWith(url, mountSegments) == false)
-		{
-			return null;
-		}
-
-		// check if there are placeholders in mount segments
-		for (int index = 0; index < mountSegments.length; ++index)
-		{
-			String placeholder = getPlaceholder(mountSegments[index]);
-
-			if (placeholder != null)
-			{
-				// extract the parameter from URL
-				if (parameters == null)
-				{
-					parameters = new PageParameters();
-				}
-				parameters.add(placeholder, url.getSegments().get(index));
-			}
-		}
-		return new ResourceReferenceRequestHandler(resourceReference, parameters);
-	}
-
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		return 0; // pages always have priority over resources
-	}
-
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		if ((requestHandler instanceof ResourceReferenceRequestHandler) == false)
-		{
-			return null;
-		}
-
-		ResourceReferenceRequestHandler handler = (ResourceReferenceRequestHandler)requestHandler;
-
-		// see if request handler addresses the resource reference we serve
-		if (resourceReference.equals(handler.getResourceReference()) == false)
-		{
-			return null;
-		}
-
-		Url url = new Url();
-
-		// add mount path segments
-		for (String segment : mountSegments)
-		{
-			url.getSegments().add(segment);
-		}
-
-		// replace placeholder parameters
-		PageParameters parameters = new PageParameters(handler.getPageParameters());
-
-		for (int index = 0; index < mountSegments.length; ++index)
-		{
-			String placeholder = getPlaceholder(mountSegments[index]);
-
-			if (placeholder != null)
-			{
-				url.getSegments().set(index, parameters.get(placeholder).toString(""));
-				parameters.remove(placeholder);
-			}
-		}
-
-		// add caching information
-		addCachingDecoration(url, parameters);
-
-		// create url
-		return encodePageParameters(url, parameters, parametersEncoder);
-	}
-
-	protected IResourceCachingStrategy getCachingStrategy()
-	{
-		return Application.get().getResourceSettings().getCachingStrategy();
-	}
-
-	protected void addCachingDecoration(Url url, PageParameters parameters)
-	{
-		final List<String> segments = url.getSegments();
-		final int lastSegmentAt = segments.size() - 1;
-		final String filename = segments.get(lastSegmentAt);
-
-		if (Strings.isEmpty(filename) == false)
-		{
-			// TODO is calling getResource() a potential performance bottleneck?
-			final IResource resource = resourceReference.getResource();
-
-			if (resource instanceof IStaticCacheableResource)
-			{
-				final IStaticCacheableResource cacheable = (IStaticCacheableResource)resource;
-				final ResourceUrl cacheUrl = new ResourceUrl(filename, parameters);
-
-				getCachingStrategy().decorateUrl(cacheUrl, cacheable);
-
-				if (Strings.isEmpty(cacheUrl.getFileName()))
-				{
-					throw new IllegalStateException("caching strategy returned empty name for " +
-						resource);
-				}
-				segments.set(lastSegmentAt, cacheUrl.getFileName());
-			}
-		}
-	}
-
-	protected void removeCachingDecoration(Url url, PageParameters parameters)
-	{
-		final List<String> segments = url.getSegments();
-
-		if (segments.isEmpty() == false)
-		{
-			// get filename (the last segment)
-			final int lastSegmentAt = segments.size() - 1;
-			String filename = segments.get(lastSegmentAt);
-
-			// ignore requests with empty filename
-			if (Strings.isEmpty(filename))
-			{
-				return;
-			}
-
-			// create resource url from filename and query parameters
-			final ResourceUrl resourceUrl = new ResourceUrl(filename, parameters);
-
-			// remove caching information from request
-			getCachingStrategy().undecorateUrl(resourceUrl);
-
-			// check for broken caching strategy (this must never happen)
-			if (Strings.isEmpty(resourceUrl.getFileName()))
-			{
-				throw new IllegalStateException("caching strategy returned empty name for " +
-					resourceUrl);
-			}
-
-			segments.set(lastSegmentAt, resourceUrl.getFileName());
-		}
-	}
-}