Author: ivaynberg
Date: Tue Oct 6 18:47:20 2009
New Revision: 822423
URL: http://svn.apache.org/viewvc?rev=822423&view=rev
Log:
added a todo
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
Modified:
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
URL:
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java?rev=822423&r1=822422&r2=822423&view=diff
==============================================================================
---
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
(original)
+++
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java
Tue Oct 6 18:47:20 2009
@@ -37,221 +37,231 @@
*/
public abstract class AbstractMapper implements RequestMapper
{
- protected MapperContext getContext()
- {
- return Application.get().getEncoderContext();
- }
-
- /**
- * Converts the specified listener interface to String.
- *
- * @param listenerInterface
- * @return listenerInterface name as string
- */
- protected String
requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
- {
- Check.argumentNotNull(listenerInterface, "listenerInterface");
-
- return
getContext().requestListenerInterfaceToString(listenerInterface);
- }
-
- /**
- * Creates listener interface from the specified string
- *
- * @param interfaceName
- * @return listener interface
- */
- protected RequestListenerInterface
requestListenerInterfaceFromString(String interfaceName)
- {
- Check.argumentNotEmpty(interfaceName, "interfaceName");
-
- return
getContext().requestListenerInterfaceFromString(interfaceName);
- }
-
- /**
- * If the string is in a placeholder format ${key} this method returns
the
- * key.
- *
- * @param s
- * @return placeholder key or <code>null</code> if string is not in
right format
- */
- protected static String getPlaceholder(String s)
- {
- if (s == null || s.length() < 4 || !s.startsWith("${") ||
!s.endsWith("}"))
- {
- return null;
- }
- else
- {
- return s.substring(2, s.length() - 1);
- }
- }
-
- /**
- * Returns true if the given url starts with specified segments.
Segments that contain
- * placelhoders are not compared.
- *
- * @param url
- * @param segments
- * @return <code>true</code> if the URL starts with the specified
segments, <code>false</code>
- * otherwise
- */
- protected boolean urlStartsWith(Url url, String... segments)
- {
- if (url == null)
- {
- return false;
- }
- else
- {
- if (url.getSegments().size() < segments.length)
- {
- return false;
- }
- else
- {
- for (int i = 0; i < segments.length; ++i)
- {
- if
(segments[i].equals(url.getSegments().get(i)) == false &&
getPlaceholder(segments[i]) == null)
- {
- return false;
- }
- }
- }
- }
- return true;
- }
-
- /**
- * 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(Url url)
- {
- if (url == null)
- {
- throw new IllegalStateException("Argument 'url' may not
be null.");
- }
- if (url.getQueryParameters().size() > 0)
- {
- QueryParameter param = url.getQueryParameters().get(0);
- if (Strings.isEmpty(param.getValue()))
- {
- return PageComponentInfo.parse(param.getName());
- }
- }
- 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)
- {
- if (url == null)
- {
- throw new IllegalStateException("Argument 'url' may not
be null.");
- }
- 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 RequestablePage> getPageClass(String name)
- {
- Check.argumentNotEmpty(name, "name");
-
- return Classes.resolveClass(name);
- }
-
- /**
- * Extracts {...@link PageParameters} from the URL using the given
{...@link PageParametersEncoder}.
- *
- * @param request
- * @param segmentsToSkip
- * how many URL segments should be skipped because they
"belong" to the
- * {...@link RequestMapper}
- * @param encoder
- * @return PageParameters instance
- */
- protected PageParameters extractPageParameters(Request request, int
segmentsToSkip,
- PageParametersEncoder encoder)
- {
- Check.argumentNotNull(request, "request");
- Check.argumentNotNull(encoder, "encoder");
-
- // strip the segments and first query parameter from URL
- Url urlCopy = new Url(request.getUrl());
- while (segmentsToSkip > 0 && urlCopy.getSegments().isEmpty() ==
false)
- {
- urlCopy.getSegments().remove(0);
- --segmentsToSkip;
- }
-
- if (!urlCopy.getQueryParameters().isEmpty() &&
Strings.isEmpty(urlCopy.getQueryParameters().get(0).getValue()))
- {
- urlCopy.getQueryParameters().remove(0);
- }
-
- PageParameters decoded =
encoder.decodePageParameters(request.requestWithUrl(urlCopy));
- return decoded != null ? decoded : new PageParameters();
- }
-
- /**
- * Encodes the given {...@link PageParameters} to the URL using the
given
- * {...@link PageParametersEncoder}. The original URL object is
unchanged.
- *
- * @param url
- * @param pageParameters
- * @param encoder
- * @return URL with encoded parameters
- */
- protected Url encodePageParameters(Url url, PageParameters
pageParameters, PageParametersEncoder encoder)
- {
- Check.argumentNotNull(url, "url");
- Check.argumentNotNull(encoder, "encoder");
-
- if (pageParameters == null)
- {
- pageParameters = new PageParameters();
- }
-
- Url parametersUrl =
encoder.encodePageParameters(pageParameters);
- if (parametersUrl != null)
- {
- // copy the url
- url = new Url(url);
-
- for (String s : parametersUrl.getSegments())
- {
- url.getSegments().add(s);
- }
- for (QueryParameter p :
parametersUrl.getQueryParameters())
- {
- url.getQueryParameters().add(p);
- }
- }
+ protected MapperContext getContext()
+ {
+ return Application.get().getEncoderContext();
+ }
+
+ /**
+ * Converts the specified listener interface to String.
+ *
+ * @param listenerInterface
+ * @return listenerInterface name as string
+ */
+ protected String requestListenerInterfaceToString(RequestListenerInterface
listenerInterface)
+ {
+ Check.argumentNotNull(listenerInterface, "listenerInterface");
+
+ return
getContext().requestListenerInterfaceToString(listenerInterface);
+ }
+
+ /**
+ * Creates listener interface from the specified string
+ *
+ * @param interfaceName
+ * @return listener interface
+ */
+ protected RequestListenerInterface
requestListenerInterfaceFromString(String interfaceName)
+ {
+ Check.argumentNotEmpty(interfaceName, "interfaceName");
+
+ return getContext().requestListenerInterfaceFromString(interfaceName);
+ }
+
+ /**
+ * If the string is in a placeholder format ${key} this method returns the
key.
+ *
+ * @param s
+ * @return placeholder key or <code>null</code> if string is not in right
format
+ */
+ protected static String getPlaceholder(String s)
+ {
+ if (s == null || s.length() < 4 || !s.startsWith("${") ||
!s.endsWith("}"))
+ {
+ return null;
+ }
+ else
+ {
+ return s.substring(2, s.length() - 1);
+ }
+ }
+
+ /**
+ * Returns true if the given url starts with specified segments. Segments
that contain
+ * placelhoders are not compared.
+ *
+ * @param url
+ * @param segments
+ * @return <code>true</code> if the URL starts with the specified
segments, <code>false</code>
+ * otherwise
+ */
+ /*
+ * TODO its funny to have a dependency in this method on the
#getPlaceHolder method because we
+ * are forcing everyone who extends this to use the ${placeholder} syntax.
We should move
+ * #getPlaceHolder out and rewrite this method to have no dependency on it
and match only exact
+ * paths. The mappers that use the syntax will have to provide their own
implementations.
+ *
+ * Either that or have a pluggable placeholder syntax Placeholder { string
start, string end}
+ */
+ protected boolean urlStartsWith(Url url, String... segments)
+ {
+ if (url == null)
+ {
+ return false;
+ }
+ else
+ {
+ if (url.getSegments().size() < segments.length)
+ {
+ return false;
+ }
+ else
+ {
+ for (int i = 0; i < segments.length; ++i)
+ {
+ if (segments[i].equals(url.getSegments().get(i)) == false
&&
+ getPlaceholder(segments[i]) == null)
+ {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 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(Url url)
+ {
+ if (url == null)
+ {
+ throw new IllegalStateException("Argument 'url' may not be null.");
+ }
+ if (url.getQueryParameters().size() > 0)
+ {
+ QueryParameter param = url.getQueryParameters().get(0);
+ if (Strings.isEmpty(param.getValue()))
+ {
+ return PageComponentInfo.parse(param.getName());
+ }
+ }
+ 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)
+ {
+ if (url == null)
+ {
+ throw new IllegalStateException("Argument 'url' may not be null.");
+ }
+ 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 RequestablePage> getPageClass(String name)
+ {
+ Check.argumentNotEmpty(name, "name");
+
+ return Classes.resolveClass(name);
+ }
+
+ /**
+ * Extracts {...@link PageParameters} from the URL using the given
{...@link PageParametersEncoder}.
+ *
+ * @param request
+ * @param segmentsToSkip
+ * how many URL segments should be skipped because they
"belong" to the
+ * {...@link RequestMapper}
+ * @param encoder
+ * @return PageParameters instance
+ */
+ protected PageParameters extractPageParameters(Request request, int
segmentsToSkip,
+ PageParametersEncoder encoder)
+ {
+ Check.argumentNotNull(request, "request");
+ Check.argumentNotNull(encoder, "encoder");
+
+ // strip the segments and first query parameter from URL
+ Url urlCopy = new Url(request.getUrl());
+ while (segmentsToSkip > 0 && urlCopy.getSegments().isEmpty() == false)
+ {
+ urlCopy.getSegments().remove(0);
+ --segmentsToSkip;
+ }
+
+ if (!urlCopy.getQueryParameters().isEmpty() &&
+
Strings.isEmpty(urlCopy.getQueryParameters().get(0).getValue()))
+ {
+ urlCopy.getQueryParameters().remove(0);
+ }
+
+ PageParameters decoded =
encoder.decodePageParameters(request.requestWithUrl(urlCopy));
+ return decoded != null ? decoded : new PageParameters();
+ }
+
+ /**
+ * Encodes the given {...@link PageParameters} to the URL using the given
+ * {...@link PageParametersEncoder}. The original URL object is unchanged.
+ *
+ * @param url
+ * @param pageParameters
+ * @param encoder
+ * @return URL with encoded parameters
+ */
+ protected Url encodePageParameters(Url url, PageParameters pageParameters,
+ PageParametersEncoder encoder)
+ {
+ Check.argumentNotNull(url, "url");
+ Check.argumentNotNull(encoder, "encoder");
+
+ if (pageParameters == null)
+ {
+ pageParameters = new PageParameters();
+ }
+
+ Url parametersUrl = encoder.encodePageParameters(pageParameters);
+ if (parametersUrl != null)
+ {
+ // copy the url
+ url = new Url(url);
+
+ for (String s : parametersUrl.getSegments())
+ {
+ url.getSegments().add(s);
+ }
+ for (QueryParameter p : parametersUrl.getQueryParameters())
+ {
+ url.getQueryParameters().add(p);
+ }
+ }
- return url;
- }
+ return url;
+ }
}