Author: knopp
Date: Sun Mar 29 00:17:11 2009
New Revision: 759618

URL: http://svn.apache.org/viewvc?rev=759618&view=rev
Log:
various cool stuff

Added:
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/Form.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/CombinedRequestParametersAdapter.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/EmptyRequestParameters.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParametersAdapter.java
   (contents, props changed)
      - copied, changed from r759532, 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParameters.java
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/Streams.java
   (with props)
Removed:
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParameters.java
Modified:
    
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage3.java
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/Request.java
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/ServletWebRequest.java
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/string/StringValue.java
    
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/encoder/AbstractEncoderTest.java

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage3.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage3.java?rev=759618&r1=759617&r2=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage3.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng-webapp/src/main/java/org/apache/wicket/ngwebapp/TestPage3.java
 Sun Mar 29 00:17:11 2009
@@ -2,6 +2,7 @@
 
 import org.apache.wicket.Page;
 import org.apache.wicket.RequestCycle;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.Link;
 
 public class TestPage3 extends Page
@@ -21,6 +22,9 @@
                };
                b.setLabel("Go Back");
                add(b);
+               
+               Form form = new Form("form");
+               add(form);
        }
 
 }

Added: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/Form.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/Form.java?rev=759618&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/Form.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/Form.java
 Sun Mar 29 00:17:11 2009
@@ -0,0 +1,63 @@
+package org.apache.wicket.markup.html.form;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.request.RequestHandler;
+import 
org.apache.wicket.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache.wicket.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache.wicket.request.request.Request;
+import org.apache.wicket.request.response.Response;
+
+public class Form extends Component implements IFormSubmitListener
+{
+       private static final long serialVersionUID = 1L;
+
+       public Form(String id)
+       {
+               super(id);
+       }
+
+       public void onFormSubmitted()
+       {
+               Request r = RequestCycle.get().getRequest();
+               
System.out.println(r.getRequestParameters().getParameterValue("key1"));
+       }
+       
+       @Override
+       public void renderComponent()
+       {
+               Response response = RequestCycle.get().getResponse();
+               
+               response.write("<form action=\"" + getURL() + "\" 
method=\"post\">\n");
+               response.write("<input type=\"hidden\" name=\"key1\" 
value=\"value1\">\n");
+               response.write("<input type=\"hidden\" name=\"key2\" 
value=\"value2\">\n");
+               response.write("<input type=\"submit\" value=\"Submit\">");
+               response.write("</form>");
+       }
+
+       private boolean bookmarkable;
+
+       public void setBookmarkable(boolean bookmarkable)
+       {
+               this.bookmarkable = bookmarkable;
+       }
+
+       public boolean isBookmarkable()
+       {
+               return bookmarkable;
+       }
+
+       private String getURL()
+       {
+               RequestHandler handler;
+               if (isBookmarkable())
+               {
+                       handler = new 
BookmarkableListenerInterfaceRequestHandler(getPage(), this, 
IFormSubmitListener.INTERFACE);
+               }
+               else
+               {
+                       handler = new 
ListenerInterfaceRequestHandler(getPage(), this, IFormSubmitListener.INTERFACE);
+               }
+               return RequestCycle.get().renderUrlFor(handler);
+       }
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/Form.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java?rev=759618&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
 Sun Mar 29 00:17:11 2009
@@ -0,0 +1,37 @@
+/*
+ * 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.markup.html.form;
+
+import org.apache.wicket.IRequestListener;
+import org.apache.wicket.RequestListenerInterface;
+
+/**
+ * Listener interface that is called when a form is submitted.
+ * 
+ * @author Jonathan Locke
+ */
+public interface IFormSubmitListener extends IRequestListener
+{
+       /** Listener interface */
+       public static final RequestListenerInterface INTERFACE = new 
RequestListenerInterface(
+                       IFormSubmitListener.class);
+
+       /**
+        * Called when a form is submitted
+        */
+       void onFormSubmitted();
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=759618&r1=759617&r2=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
 Sun Mar 29 00:17:11 2009
@@ -48,27 +48,37 @@
        {
                super();
        }
-       
+
        @Override
        public void internalInit()
-       {                               
+       {
                mount(new PageInstanceEncoder());
                mount(new BookmarkableEncoder());
                mount(new ResourceReferenceEncoder());
        }
+       
+
 
        protected RequestCycleContext newRequestCycleContext()
        {
                RequestCycleContext context = new RequestCycleContext()
                {
-                       public RequestHandler decodeRequestHandler(Request 
request)
+                       public RequestHandler decodeRequestHandler(final 
Request request)
                        {
-                               return 
getRequestHandlerEncoderRegistry().decode(request);
+                               String lang = null;
+                               Url url = request.getUrl();
+                               if (!url.getSegments().isEmpty())
+                               {
+                                       lang = url.getSegments().remove(0);
+                               }                               
+                               return 
getRequestHandlerEncoderRegistry().decode(request.requestWithUrl(url));
                        }
 
                        public Url encodeRequestHandler(RequestHandler handler)
                        {
-                               return 
getRequestHandlerEncoderRegistry().encode(handler);
+                               Url url = 
getRequestHandlerEncoderRegistry().encode(handler);
+                               url.getSegments().add(0, "en");
+                               return url;
                        }
 
                        public RequestHandler 
getRequestHandlerForException(Exception e)
@@ -127,7 +137,7 @@
                public String getPageIdentifier()
                {
                        return "page";
-               }               
+               }
 
                public String getResourceIdentifier()
                {
@@ -137,7 +147,7 @@
                public ResourceReferenceRegistry getResourceReferenceRegistry()
                {
                        return 
WebApplication.this.getResourceReferenceRegistry();
-               }               
+               }
 
                public RequestListenerInterface 
requestListenerInterfaceFromString(String interfaceName)
                {
@@ -148,7 +158,7 @@
                {
                        return listenerInterface.getName();
                }
-               
+
                public IPage newPageInstance(Class<? extends IPage> pageClass, 
PageParameters pageParameters)
                {
                        if (pageParameters == null)
@@ -160,25 +170,25 @@
                                return getPageFactory().newPage(pageClass, 
pageParameters);
                        }
                }
-               
+
                public IPage getPageInstance(int pageId)
                {
                        return Page.get(pageId);
                }
-               
+
                public Class<? extends IPage> getHomePageClass()
                {
                        return WebApplication.this.getHomePageClass();
                }
-       };      
-       
+       };
+
        public EncoderContext getEncoderContext()
        {
                return encoderContext;
        }
-       
+
        private ResourceReferenceRegistry resourceReferenceRegistry;
-       
+
        public ResourceReferenceRegistry getResourceReferenceRegistry()
        {
                if (resourceReferenceRegistry == null)
@@ -187,24 +197,24 @@
                }
                return resourceReferenceRegistry;
        }
-       
+
        private IPageFactory pageFactory = new DefaultPageFactory();
-       
+
        public IPageFactory getPageFactory()
        {
                return pageFactory;
        }
-       
+
        public void mount(RequestHandlerEncoder encoder)
        {
                getRequestHandlerEncoderRegistry().register(encoder);
        }
-       
+
        public abstract Class<? extends IPage> getHomePageClass();
-       
+
        // TODO: Do this properly
        private Map<String, BufferedWebResponse> storedResponses = new 
ConcurrentHashMap<String, BufferedWebResponse>();
-       
+
        public BufferedWebResponse getAndRemoveBufferedResponse(String 
sessionId, Url url)
        {
                String key = sessionId + url.toString();

Added: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/CombinedRequestParametersAdapter.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/CombinedRequestParametersAdapter.java?rev=759618&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/CombinedRequestParametersAdapter.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/CombinedRequestParametersAdapter.java
 Sun Mar 29 00:17:11 2009
@@ -0,0 +1,75 @@
+package org.apache.wicket.request;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.wicket.util.string.StringValue;
+
+public class CombinedRequestParametersAdapter implements RequestParameters
+{
+       private final RequestParameters parameters[];
+
+       public CombinedRequestParametersAdapter(RequestParameters ... 
parameters)
+       {
+               if (parameters == null)
+               {
+                       throw new IllegalStateException("Argument 'parameters' 
may not be null");
+               }
+               this.parameters = parameters;
+       }
+
+       public Set<String> getParameterNames()
+       {
+               Set<String> result = new HashSet<String>();
+               for (RequestParameters p : parameters)
+               {
+                       result.addAll(p.getParameterNames());
+               }
+               return Collections.unmodifiableSet(result);
+       }
+
+       public StringValue getParameterValue(String name)
+       {
+               for (RequestParameters p : parameters)
+               {
+                       StringValue value = p.getParameterValue(name);
+                       if (!value.isNull())
+                       {
+                               return value;
+                       }
+               }
+               return StringValue.valueOf((String)null);
+       }
+
+       public List<StringValue> getParameterValues(String name)
+       {
+               List<StringValue> result = new ArrayList<StringValue>();
+               for (RequestParameters p : parameters)
+               {
+                       List<StringValue> values = p.getParameterValues(name);
+                       if (values != null)
+                       {
+                               for (StringValue v : values)
+                               {
+                                       if (!result.contains(v))
+                                       {
+                                               result.add(v);
+                                       }
+                               }
+                       }
+               }
+               
+               if (result.isEmpty())
+               {
+                       return null;
+               }
+               else
+               {
+                       return Collections.unmodifiableList(result);
+               }
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/CombinedRequestParametersAdapter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/EmptyRequestParameters.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/EmptyRequestParameters.java?rev=759618&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/EmptyRequestParameters.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/EmptyRequestParameters.java
 Sun Mar 29 00:17:11 2009
@@ -0,0 +1,33 @@
+package org.apache.wicket.request;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.wicket.util.string.StringValue;
+
+public class EmptyRequestParameters implements RequestParameters
+{
+
+       private EmptyRequestParameters()
+       {
+       }
+       
+       public static EmptyRequestParameters INSTANCE = new 
EmptyRequestParameters();
+
+       public Set<String> getParameterNames()
+       {
+               return Collections.emptySet();
+       }
+
+       public StringValue getParameterValue(String name)
+       {
+               return StringValue.valueOf((String)null);
+       }
+
+       public List<StringValue> getParameterValues(String name)
+       {
+               return null;
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/EmptyRequestParameters.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParametersAdapter.java
 (from r759532, 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParameters.java)
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParametersAdapter.java?p2=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParametersAdapter.java&p1=wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParameters.java&r1=759532&r2=759618&rev=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParameters.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParametersAdapter.java
 Sun Mar 29 00:17:11 2009
@@ -31,7 +31,7 @@
  * 
  * @author Matej Knopp
  */
-public class UrlRequestParameters implements RequestParameters
+public class UrlRequestParametersAdapter implements RequestParameters
 {
        private final Url url;
 
@@ -39,7 +39,7 @@
         * Construct.
         * @param url
         */
-       public UrlRequestParameters(Url url)
+       public UrlRequestParametersAdapter(Url url)
        {
                if (url == null)
                {

Propchange: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/UrlRequestParametersAdapter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/Request.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/Request.java?rev=759618&r1=759617&r2=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/Request.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/Request.java
 Sun Mar 29 00:17:11 2009
@@ -16,8 +16,11 @@
  */
 package org.apache.wicket.request.request;
 
+import org.apache.wicket.request.CombinedRequestParametersAdapter;
+import org.apache.wicket.request.EmptyRequestParameters;
 import org.apache.wicket.request.RequestParameters;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.UrlRequestParametersAdapter;
 
 /**
  * Request object.
@@ -34,9 +37,52 @@
        public abstract Url getUrl();
 
        /**
-        * @return request parameters for this request (both POST and GET 
parameters)
+        * @return POST request parameters for this request.
         */
-       public abstract RequestParameters getRequestParameters();
+       public RequestParameters getPostRequestParameters()
+       {
+               return EmptyRequestParameters.INSTANCE;
+       }
 
+       /**
+        * @return GET request parameters for this request.
+        */
+       public RequestParameters getGetRequestParameters()
+       {
+               return new UrlRequestParametersAdapter(getUrl());
+       }
+
+       /**
+        * @return all request parameters for this request (both POST and GET 
parameters)
+        */
+       public RequestParameters getRequestParameters()
+       {
+               return new 
CombinedRequestParametersAdapter(getGetRequestParameters(), 
getPostRequestParameters());
+       }
+
+       /**
+        * Returns request with specified URL and same POST parameters as this 
request.
+        * 
+        * @param url
+        *            Url instance
+        * @return request with specified URL.
+        */
+       public Request requestWithUrl(final Url url)
+       {
+               return new Request()
+               {
+                       @Override
+                       public Url getUrl()
+                       {
+                               return url;
+                       }
+
+                       @Override
+                       public RequestParameters getPostRequestParameters()
+                       {
+                               return Request.this.getPostRequestParameters();
+                       }
+               };
+       }
 
 }

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/ServletWebRequest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/ServletWebRequest.java?rev=759618&r1=759617&r2=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/ServletWebRequest.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/request/request/ServletWebRequest.java
 Sun Mar 29 00:17:11 2009
@@ -16,18 +16,24 @@
  */
 package org.apache.wicket.request.request;
 
+import java.io.BufferedReader;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
-import java.util.HashSet;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.request.RequestParameters;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.Url.QueryParameter;
+import org.apache.wicket.util.io.Streams;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 
@@ -125,46 +131,76 @@
                return Collections.unmodifiableList(result);
        }
 
-       @Override
-       public RequestParameters getRequestParameters()
+       private Map<String, List<StringValue>> postParameters = null;
+       
+       public Map<String, List<StringValue>> getPostParameters()
        {
-               return new RequestParameters()
+               if (postParameters == null)
                {
-                       @SuppressWarnings("unchecked")
-                       public Set<String> getParameterNames()
+                       postParameters = new HashMap<String, 
List<StringValue>>();
+                       try
                        {
-                               Set<String> result = new HashSet<String>();
-                               Enumeration<String> e = 
httpServletRequest.getParameterNames();
-                               while (e.hasMoreElements())
+                               BufferedReader reader = 
getHttpServletRequest().getReader();
+                               String value = Streams.readString(reader);
+                               
+                               if (!Strings.isEmpty(value))
                                {
-                                       result.add(e.nextElement());
+                                       Url url = Url.parse("?" + value);
+                                       for (QueryParameter q : 
url.getQueryParameters())
+                                       {
+                                               List<StringValue> list = 
postParameters.get(q.getName());
+                                               if (list == null)
+                                               {
+                                                       list = new 
ArrayList<StringValue>();
+                                                       
postParameters.put(q.getName(), list);
+                                               }
+                                               
list.add(StringValue.valueOf(q.getValue()));
+                                       }
                                }
-                               return Collections.unmodifiableSet(result);
                        }
-
-                       public StringValue getParameterValue(String name)
+                       catch (IOException e)
                        {
-                               return 
StringValue.valueOf(httpServletRequest.getParameter(name));
+                               throw new WicketRuntimeException(e);
                        }
-
-                       public List<StringValue> getParameterValues(String name)
+                       
+               }
+               return postParameters;
+       }
+       
+       private RequestParameters postRequestParameters = new 
RequestParameters()
+       {
+               public Set<String> getParameterNames()
+               {
+                       return 
Collections.unmodifiableSet(getPostParameters().keySet());
+               }
+               
+               public StringValue getParameterValue(String name)
+               {
+                       List<StringValue> values = 
getPostParameters().get(name);
+                       if (values == null || values.isEmpty())
                        {
-                               String values[] = 
httpServletRequest.getParameterValues(name);
-                               if (values == null)
-                               {
-                                       return null;
-                               }
-                               else
-                               {
-                                       List<StringValue> result = new 
ArrayList<StringValue>();
-                                       for (String s : values)
-                                       {
-                                               
result.add(StringValue.valueOf(s));
-                                       }
-                                       return 
Collections.unmodifiableList(result);
-                               }
+                               return StringValue.valueOf((String)null);
+                       }
+                       else
+                       {
+                               return values.iterator().next();
                        }
-               };
+               }
+               public List<StringValue> getParameterValues(String name)
+               {
+                       List<StringValue> values = 
getPostParameters().get(name);
+                       if (values != null)
+                       {
+                               values = Collections.unmodifiableList(values);
+                       }
+                       return values;
+               }
+       };
+       
+       @Override
+       public RequestParameters getPostRequestParameters()
+       {
+               return postRequestParameters; 
        }
 
        @Override

Added: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/Streams.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/Streams.java?rev=759618&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/Streams.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/Streams.java
 Sun Mar 29 00:17:11 2009
@@ -0,0 +1,233 @@
+/*
+ * 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.util.io;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.wicket.WicketRuntimeException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * Utilities methods for working with input and output streams.
+ * 
+ * @author Jonathan Locke
+ */
+public final class Streams
+{
+       private static final String XML_PROPERTIES_DTD = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>"
+                       + "<!-- DTD for properties -->" + "<!ELEMENT properties 
( comment?, entry* ) >"
+                       + "<!ATTLIST properties" + " version CDATA #FIXED 
\"1.0\">"
+                       + "<!ELEMENT comment (#PCDATA) >" + "<!ELEMENT entry 
(#PCDATA) >" + "<!ATTLIST entry "
+                       + " key CDATA #REQUIRED>";
+
+       /**
+        * Writes the input stream to the output stream. Input is done without 
a Reader object, meaning
+        * that the input is copied in its raw form.
+        * 
+        * @param in
+        *            The input stream
+        * @param out
+        *            The output stream
+        * @return Number of bytes copied from one stream to the other
+        * @throws IOException
+        */
+       public static int copy(final InputStream in, final OutputStream out) 
throws IOException
+       {
+               final byte[] buffer = new byte[4096];
+               int bytesCopied = 0;
+               while (true)
+               {
+                       int byteCount = in.read(buffer, 0, buffer.length);
+                       if (byteCount <= 0)
+                       {
+                               break;
+                       }
+                       out.write(buffer, 0, byteCount);
+                       bytesCopied += byteCount;
+               }
+               return bytesCopied;
+       }
+
+       /**
+        * Loads properties from an XML input stream into the provided 
properties object.
+        * 
+        * @param properties
+        *            The object to load the properties into
+        * @param inputStream
+        * @throws IOException
+        *             When the input stream could not be read from
+        */
+       public static void loadFromXml(Properties properties, InputStream 
inputStream)
+                       throws IOException
+       {
+               if (properties == null)
+               {
+                       throw new IllegalArgumentException("properties must not 
be null");
+               }
+               if (inputStream == null)
+               {
+                       throw new IllegalArgumentException("inputStream must 
not be null");
+               }
+
+               // TODO in a Wicket version that supports Java 5 (Wicket 2.0?), 
we can
+               // just use the loadFromXml method on java.util.Properties 
directly
+               // rather than manual as we do here
+
+               DocumentBuilderFactory documentBuilderFactory = 
DocumentBuilderFactory.newInstance();
+               
documentBuilderFactory.setIgnoringElementContentWhitespace(true);
+               documentBuilderFactory.setValidating(true);
+               documentBuilderFactory.setCoalescing(true);
+               documentBuilderFactory.setIgnoringComments(true);
+               try
+               {
+                       DocumentBuilder db = 
documentBuilderFactory.newDocumentBuilder();
+                       db.setEntityResolver(new EntityResolver()
+                       {
+                               public InputSource resolveEntity(String 
publicId, String systemId)
+                                               throws SAXException
+                               {
+                                       if 
(systemId.equals("http://java.sun.com/dtd/properties.dtd";))
+                                       {
+                                               InputSource inputSource;
+                                               inputSource = new 
InputSource(new StringReader(XML_PROPERTIES_DTD));
+                                               
inputSource.setSystemId("http://java.sun.com/dtd/properties.dtd";);
+                                               return inputSource;
+                                       }
+                                       else
+                                       {
+                                               throw new SAXException("Invalid 
system identifier: " + systemId);
+                                       }
+                               }
+                       });
+                       db.setErrorHandler(new ErrorHandler()
+                       {
+                               public void error(SAXParseException e) throws 
SAXException
+                               {
+                                       throw e;
+                               }
+
+                               public void fatalError(SAXParseException e) 
throws SAXException
+                               {
+                                       throw e;
+                               }
+
+                               public void warning(SAXParseException e) throws 
SAXException
+                               {
+                                       throw e;
+                               }
+                       });
+                       InputSource is = new InputSource(inputStream);
+                       Document doc = db.parse(is);
+                       NodeList entries = 
((Element)doc.getChildNodes().item(1)).getChildNodes();
+                       int len = entries.getLength();
+                       for (int i = (len > 0 && 
entries.item(0).getNodeName().equals("comment")) ? 1 : 0; i < len; i++)
+                       {
+                               Element entry = (Element)entries.item(i);
+                               if (entry.hasAttribute("key"))
+                               {
+                                       Node node = entry.getFirstChild();
+                                       String val = (node == null) ? "" : 
node.getNodeValue();
+                                       
properties.setProperty(entry.getAttribute("key"), val);
+                               }
+                       }
+               }
+               catch (ParserConfigurationException e)
+               {
+                       throw new WicketRuntimeException(e);
+               }
+               catch (SAXException e)
+               {
+                       throw new WicketRuntimeException("invalid XML 
properties format", e);
+               }
+       }
+
+       /**
+        * Reads a stream as a string.
+        * 
+        * @param in
+        *            The input stream
+        * @return The string
+        * @throws IOException
+        */
+       public static String readString(final InputStream in) throws IOException
+       {
+               return readString(new BufferedReader(new 
InputStreamReader(in)));
+       }
+
+       /**
+        * Reads a string using a character encoding.
+        * 
+        * @param in
+        *            The input
+        * @param encoding
+        *            The character encoding of the input data
+        * @return The string
+        * @throws IOException
+        */
+       public static String readString(final InputStream in, final 
CharSequence encoding)
+                       throws IOException
+       {
+               return readString(new BufferedReader(new InputStreamReader(in, 
encoding.toString())));
+       }
+
+       /**
+        * Reads all input from a reader into a string.
+        * 
+        * @param in
+        *            The input
+        * @return The string
+        * @throws IOException
+        */
+       public static String readString(final Reader in) throws IOException
+       {
+               final StringBuffer buffer = new StringBuffer(2048);
+               int value;
+
+               while ((value = in.read()) != -1)
+               {
+                       buffer.append((char)value);
+               }
+
+               return buffer.toString();
+       }
+
+       /**
+        * Private to prevent instantiation.
+        */
+       private Streams()
+       {
+       }
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/io/Streams.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/string/StringValue.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/string/StringValue.java?rev=759618&r1=759617&r2=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/string/StringValue.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/util/string/StringValue.java
 Sun Mar 29 00:17:11 2009
@@ -23,6 +23,8 @@
 import java.text.ParseException;
 import java.util.Locale;
 
+import org.apache.wicket.util.lang.Objects;
+
 
 /**
  * Holds an immutable String value and optionally a Locale, with methods to 
convert to various
@@ -662,4 +664,24 @@
                return Strings.isEmpty(text);
        }
 
+       public boolean equals(Object value)
+       {
+               if (this == value)
+               {
+                       return true;
+               }
+               if (value instanceof StringValue == false)
+               {
+                       return false;
+               }
+               StringValue rhs = (StringValue) value;
+               return Objects.equal(text, rhs.text) && Objects.equal(locale, 
rhs.locale);
+       }
+       
+       @Override
+       public int hashCode()
+       {
+               return Objects.hashCode(text, locale);
+       }
+       
 }

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/encoder/AbstractEncoderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/encoder/AbstractEncoderTest.java?rev=759618&r1=759617&r2=759618&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/encoder/AbstractEncoderTest.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/test/java/org/apache/wicket/request/encoder/AbstractEncoderTest.java
 Sun Mar 29 00:17:11 2009
@@ -23,7 +23,7 @@
 import org.apache.wicket.markup.html.link.ILinkListener;
 import org.apache.wicket.request.RequestParameters;
 import org.apache.wicket.request.Url;
-import org.apache.wicket.request.UrlRequestParameters;
+import org.apache.wicket.request.UrlRequestParametersAdapter;
 import org.apache.wicket.request.request.Request;
 
 /**
@@ -54,16 +54,10 @@
                return new Request()
                {
                        @Override
-                       public RequestParameters getRequestParameters()
-                       {
-                               return new UrlRequestParameters(getUrl());
-                       }
-
-                       @Override
                        public Url getUrl()
                        {
                                return url;
-                       }
+                       }                       
                };
        }
 



Reply via email to