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/12 11:23:50 UTC
[12/21] 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/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
deleted file mode 100644
index ad48cf1..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/AbstractBookmarkableMapper.java
+++ /dev/null
@@ -1,414 +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.IRequestHandlerDelegate;
-import org.apache.wicket.request.IRequestMapper;
-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.BookmarkableListenerInterfaceRequestHandler;
-import org.apache.wicket.request.handler.BookmarkablePageRequestHandler;
-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.http.WebRequest;
-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.PageParameters;
-import org.apache.wicket.util.lang.Args;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Abstract encoder for Bookmarkable, Hybrid and BookmarkableListenerInterface URLs.
- *
- * @author Matej Knopp
- */
-public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
-{
- private static Logger logger = LoggerFactory.getLogger(AbstractBookmarkableMapper.class);
-
- /**
- * Represents information stored in URL.
- *
- * @author Matej Knopp
- */
- protected static final class UrlInfo
- {
- private final PageComponentInfo pageComponentInfo;
- private final PageParameters pageParameters;
- private final Class<? extends IRequestablePage> pageClass;
-
- /**
- * Construct.
- *
- * @param pageComponentInfo
- * optional parameter providing the page instance and component information
- * @param pageClass
- * mandatory parameter
- * @param pageParameters
- * optional parameter providing pageParameters
- */
- public UrlInfo(PageComponentInfo pageComponentInfo,
- Class<? extends IRequestablePage> pageClass, PageParameters pageParameters)
- {
- Args.notNull(pageClass, "pageClass");
-
- this.pageComponentInfo = pageComponentInfo;
- this.pageParameters = cleanPageParameters(pageParameters);
-
- this.pageClass = pageClass;
- }
-
- /**
- * Cleans the original parameters from entries used by Wicket internals.
- *
- * @param originalParameters
- * the current request's non-modified parameters
- * @return all parameters but Wicket internal ones
- */
- private PageParameters cleanPageParameters(final PageParameters originalParameters)
- {
- PageParameters cleanParameters = null;
- if (originalParameters != null)
- {
- cleanParameters = new PageParameters(originalParameters);
-
- // WICKET-4038: Ajax related parameters are set by wicket-ajax.js when needed.
- // They shouldn't be propagated to the next requests
- cleanParameters.remove(WebRequest.PARAM_AJAX);
- cleanParameters.remove(WebRequest.PARAM_AJAX_BASE_URL);
- cleanParameters.remove(WebRequest.PARAM_AJAX_REQUEST_ANTI_CACHE);
-
- if (cleanParameters.isEmpty())
- {
- cleanParameters = null;
- }
- }
- return cleanParameters;
- }
-
- /**
- * @return PageComponentInfo instance or <code>null</code>
- */
- public PageComponentInfo getPageComponentInfo()
- {
- return pageComponentInfo;
- }
-
- /**
- * @return page class
- */
- public Class<? extends IRequestablePage> getPageClass()
- {
- return pageClass;
- }
-
- /**
- * @return PageParameters instance (never <code>null</code>)
- */
- public PageParameters getPageParameters()
- {
- return pageParameters;
- }
- }
-
- /**
- * Construct.
- */
- public AbstractBookmarkableMapper()
- {
- }
-
- /**
- * Parse the given request to an {@link UrlInfo} instance.
- *
- * @param request
- * @return UrlInfo instance or <code>null</code> if this encoder can not handle the request
- */
- protected abstract UrlInfo parseRequest(Request request);
-
- /**
- * Builds URL for the given {@link UrlInfo} instance. The URL this method produces must be
- * parseable by the {@link #parseRequest(Request)} method.
- *
- * @param info
- * @return Url result URL
- */
- protected abstract Url buildUrl(UrlInfo info);
-
- /**
- * Indicates whether hybrid {@link RenderPageRequestHandler} URL for page will be generated only
- * if page has been created with bookmarkable URL.
- * <p>
- * For generic bookmarkable encoders this method should return <code>true</code>. For explicit
- * (mounted) encoders this method should return <code>false</code>
- *
- * @return <code>true</code> if hybrid URL requires page created bookmarkable,
- * <code>false</code> otherwise.
- */
- protected abstract boolean pageMustHaveBeenCreatedBookmarkable();
-
- /**
- * @see IRequestMapper#getCompatibilityScore(Request)
- */
- @Override
- public abstract int getCompatibilityScore(Request request);
-
- /**
- * Creates a {@code IRequestHandler} that processes a bookmarkable request.
- *
- * @param pageClass
- * @param pageParameters
- * @return a {@code IRequestHandler} capable of processing the bookmarkable request.
- */
- protected IRequestHandler processBookmarkable(Class<? extends IRequestablePage> pageClass,
- PageParameters pageParameters)
- {
- PageProvider provider = new PageProvider(pageClass, pageParameters);
- provider.setPageSource(getContext());
- return new RenderPageRequestHandler(provider);
- }
-
- /**
- * Creates a {@code IRequestHandler} that processes a hybrid request. When the page identified
- * by {@code pageInfo} was not available, the request should be treated as a bookmarkable
- * request.
- *
- * @param pageInfo
- * @param pageClass
- * @param pageParameters
- * @param renderCount
- * @return a {@code IRequestHandler} capable of processing the hybrid request.
- */
- protected IRequestHandler processHybrid(PageInfo pageInfo,
- Class<? extends IRequestablePage> pageClass, PageParameters pageParameters,
- Integer renderCount)
- {
- PageProvider provider = new PageProvider(pageInfo.getPageId(), pageClass, pageParameters,
- renderCount);
- provider.setPageSource(getContext());
- return new RenderPageRequestHandler(provider);
- }
-
- /**
- * Creates a {@code IRequestHandler} that processes a listener request.
- *
- * @param pageComponentInfo
- * @param pageClass
- * @param pageParameters
- * @return a {@code IRequestHandler} that invokes the listener interface
- */
- protected IRequestHandler processListener(PageComponentInfo pageComponentInfo,
- Class<? extends IRequestablePage> pageClass, PageParameters pageParameters)
- {
- PageInfo pageInfo = pageComponentInfo.getPageInfo();
- ComponentInfo componentInfo = pageComponentInfo.getComponentInfo();
- Integer renderCount = null;
- RequestListenerInterface listenerInterface = null;
-
- if (componentInfo != null)
- {
- renderCount = componentInfo.getRenderCount();
- listenerInterface = requestListenerInterfaceFromString(componentInfo.getListenerInterface());
- }
-
- if (listenerInterface != null)
- {
- PageAndComponentProvider provider = new PageAndComponentProvider(pageInfo.getPageId(),
- pageClass, pageParameters, renderCount, componentInfo.getComponentPath());
-
- provider.setPageSource(getContext());
-
- return new ListenerInterfaceRequestHandler(provider, listenerInterface,
- componentInfo.getBehaviorId());
- }
- else
- {
- if (logger.isWarnEnabled())
- {
- if (componentInfo != null)
- {
- logger.warn("Unknown listener interface '{}'",
- componentInfo.getListenerInterface());
- }
- else
- {
- logger.warn("Cannot extract the listener interface for PageComponentInfo: '{}'" +
- pageComponentInfo);
- }
- }
- return null;
- }
- }
-
- /**
- * @see org.apache.wicket.request.IRequestMapper#mapRequest(org.apache.wicket.request.Request)
- */
- @Override
- public IRequestHandler mapRequest(Request request)
- {
- UrlInfo urlInfo = parseRequest(request);
-
- // check if the URL is long enough and starts with the proper segments
- if (urlInfo != null)
- {
- PageComponentInfo info = urlInfo.getPageComponentInfo();
- Class<? extends IRequestablePage> pageClass = urlInfo.getPageClass();
- PageParameters pageParameters = urlInfo.getPageParameters();
-
- if (info == null || info.getPageInfo().getPageId() == null)
- {
- // if there are is no page instance information (only page map name - optionally)
- // then this is a simple bookmarkable URL
- return processBookmarkable(pageClass, pageParameters);
- }
- else if (info.getPageInfo().getPageId() != null && info.getComponentInfo() == null)
- {
- // if there is page instance information in the URL but no component and listener
- // interface then this is a hybrid URL - we need to try to reuse existing page
- // instance
- return processHybrid(info.getPageInfo(), pageClass, pageParameters, null);
- }
- else if (info.getComponentInfo() != null)
- {
- // with both page instance and component+listener this is a listener interface URL
- return processListener(info, pageClass, pageParameters);
- }
- }
- return null;
- }
-
- protected boolean checkPageInstance(IRequestablePage page)
- {
- return page != null && checkPageClass(page.getClass());
- }
-
- protected boolean checkPageClass(Class<? extends IRequestablePage> pageClass)
- {
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Url mapHandler(IRequestHandler requestHandler)
- {
- // TODO see if we can refactor this to remove dependency on instanceof checks below and
- // eliminate the need for IRequestHandlerDelegate
- while (requestHandler instanceof IRequestHandlerDelegate)
- {
- requestHandler = ((IRequestHandlerDelegate)requestHandler).getDelegateHandler();
- }
-
- if (requestHandler instanceof BookmarkablePageRequestHandler)
- {
- // simple bookmarkable URL with no page instance information
- BookmarkablePageRequestHandler handler = (BookmarkablePageRequestHandler)requestHandler;
-
- if (!checkPageClass(handler.getPageClass()))
- {
- return null;
- }
-
- PageInfo info = new PageInfo();
- UrlInfo urlInfo = new UrlInfo(new PageComponentInfo(info, null),
- handler.getPageClass(), handler.getPageParameters());
-
- return buildUrl(urlInfo);
- }
- else if (requestHandler instanceof RenderPageRequestHandler)
- {
- // possibly hybrid URL - bookmarkable URL with page instance information
- // but only allowed if the page was created by bookmarkable URL
-
- RenderPageRequestHandler handler = (RenderPageRequestHandler)requestHandler;
-
- if (!checkPageClass(handler.getPageClass()))
- {
- return null;
- }
-
- if (handler.getPageProvider().isNewPageInstance())
- {
- // no existing page instance available, don't bother creating new page instance
- PageInfo info = new PageInfo();
- UrlInfo urlInfo = new UrlInfo(new PageComponentInfo(info, null),
- handler.getPageClass(), handler.getPageParameters());
-
- return buildUrl(urlInfo);
- }
-
- IRequestablePage page = handler.getPage();
-
- if (checkPageInstance(page) &&
- (!pageMustHaveBeenCreatedBookmarkable() || page.wasCreatedBookmarkable()))
- {
- PageInfo info = null;
- if (!page.isPageStateless())
- {
- info = new PageInfo(page.getPageId());
- }
- PageComponentInfo pageComponentInfo = info != null ? new PageComponentInfo(info,
- null) : null;
-
- UrlInfo urlInfo = new UrlInfo(pageComponentInfo, page.getClass(),
- handler.getPageParameters());
- return buildUrl(urlInfo);
- }
- else
- {
- return null;
- }
-
- }
- else if (requestHandler instanceof BookmarkableListenerInterfaceRequestHandler)
- {
- // listener interface URL with page class information
- BookmarkableListenerInterfaceRequestHandler handler = (BookmarkableListenerInterfaceRequestHandler)requestHandler;
- Class<? extends IRequestablePage> pageClass = handler.getPageClass();
-
- if (!checkPageClass(pageClass))
- {
- return null;
- }
-
- Integer renderCount = null;
- if (handler.getListenerInterface().isIncludeRenderCount())
- {
- renderCount = handler.getRenderCount();
- }
-
- PageInfo pageInfo = new PageInfo(handler.getPageId());
- ComponentInfo componentInfo = new ComponentInfo(renderCount,
- requestListenerInterfaceToString(handler.getListenerInterface()),
- handler.getComponentPath(), handler.getBehaviorIndex());
-
- UrlInfo urlInfo = new UrlInfo(new PageComponentInfo(pageInfo, componentInfo),
- pageClass, handler.getPageParameters());
- return buildUrl(urlInfo);
- }
-
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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/1257c03d/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("/my/path", 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;
- }
-}