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;
+    }
 }


Reply via email to