Author: simoneg
Date: Tue May  4 02:11:13 2010
New Revision: 940711

URL: http://svn.apache.org/viewvc?rev=940711&view=rev
Log:
Support for arrays in direct webhandler binding

Modified:
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/OnDemandBinder.java
    
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java
    
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/ConvertedSessionHandler.java

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/OnDemandBinder.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/OnDemandBinder.java?rev=940711&r1=940710&r2=940711&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/OnDemandBinder.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/OnDemandBinder.java
 Tue May  4 02:11:13 2010
@@ -156,19 +156,44 @@ public class OnDemandBinder {
        }
 
        private Object fetchParam(String rawname, Class type) {
+               boolean isarray = type.isArray();
+               if (isarray) {
+                       type = type.getComponentType();
+               }
                if (uploads != null) {
                        FileItem[] item = uploads.get(rawname);
                        if (item != null) {
-                               if (item[0].isFormField()) {
-                                       return 
convertFetch(item[0].getString(), type);
+                               if (!isarray) {
+                                       if (item[0].isFormField()) {
+                                               return 
convertFetch(item[0].getString(), type);
+                                       } else {
+                                               return item[0];
+                                       }
                                } else {
-                                       return item[0];
+                                       Object[] ret = new Object[item.length];
+                                       for (int i = 0; i < item.length; i++) {
+                                               if (item[i].isFormField()) {
+                                                       ret[i] = 
convertFetch(item[i].getString(), type);
+                                               } else {
+                                                       ret[i] = item[i];
+                                               }
+                                       }
+                                       return ret;
                                }
                        } else {
                                return null;
                        }
                } else {
-                       return convertFetch(req.getParameter(rawname), type);
+                       if (!isarray) {
+                               return convertFetch(req.getParameter(rawname), 
type);
+                       } else {
+                               String[] vals = req.getParameterValues(rawname);
+                               Object[] ret = new Object[vals.length];
+                               for (int i = 0; i < vals.length; i++) {
+                                       ret[i] = convertFetch(vals[i], type); 
+                               }
+                               return ret;
+                       }
                }
        }
 

Modified: 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java?rev=940711&r1=940710&r2=940711&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java
 Tue May  4 02:11:13 2010
@@ -20,6 +20,7 @@ import java.io.ByteArrayOutputStream;
 import java.util.Map;
 
 import org.apache.magma.website.producers.ProducerParameters;
+import org.apache.magma.website.teststuff.ConvertedSessionHandler;
 import org.apache.magma.website.teststuff.Person;
 import org.apache.magma.website.teststuff.FakeHtmlProducer;
 import org.apache.magma.website.teststuff.FakeHtmlProducer.CheckInside;
@@ -45,6 +46,29 @@ public class WebHandlerCycleTest {
        }
        
        @Test
+       public void arrayBinding() throws Exception {
+               final DefaultExpectations def = new DefaultExpectations() {{
+                       one(session).setAttribute("user", 
Person.class.getName() + ":Simone");
+                       one(req).getParameterValues("people"); 
will(returnValue(new String[] {"Foo", "Bar"}));
+               }};
+               def.setupDefaults("/testSession/setUser");
+               
+               FakeHtmlProducer.checks = new CheckInside() {
+                       public void check(FakeHtmlProducer prod) {
+                               WebHandler handler = prod.getCreatingHandler();
+                               ConvertedSessionHandler csh = 
(ConvertedSessionHandler) handler;
+                               Person[] people = csh.getParamPeople();
+                               assertEquals(2, people.length);
+                               assertEquals("Foo", people[0].getName());
+                               assertEquals("Bar", people[1].getName());
+                       }
+               };
+               
+               def.start();
+               
+       }
+       
+       @Test
        public void redirectURI() throws Exception {
                final DefaultExpectations def = new DefaultExpectations() {{
                        one(resp).sendRedirect("http://www.google.com/";);

Modified: 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/ConvertedSessionHandler.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/ConvertedSessionHandler.java?rev=940711&r1=940710&r2=940711&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/ConvertedSessionHandler.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/ConvertedSessionHandler.java
 Tue May  4 02:11:13 2010
@@ -23,6 +23,7 @@ import org.apache.magma.website.WebHandl
 public class ConvertedSessionHandler extends WebHandler {
 
        private Person sessionUser = null;
+       private Person[] paramPeople;
 
        public Person getSessionUser() {
                return sessionUser;
@@ -55,5 +56,9 @@ public class ConvertedSessionHandler ext
        public HtmlProducer doResendLink() {
                return root().handleAux().doCheckLinks();
        }
+
+       public Person[] getParamPeople() {
+               return paramPeople;
+       }
        
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to