Author: simoneg
Date: Fri Dec 11 15:26:10 2009
New Revision: 889651

URL: http://svn.apache.org/viewvc?rev=889651&view=rev
Log:
LABS-235 : Better checks for data types now that there is a bean converter

Modified:
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/OnDemandBinder.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=889651&r1=889650&r2=889651&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
 Fri Dec 11 15:26:10 2009
@@ -151,7 +151,7 @@
                
                for (Cookie cookie : cookies) {
                        if (cookie.getName().equals(rawname)) {
-                               return convertFetch(cookie.getValue(), type);
+                               return convertFetch(cookie.getValue(), type, 
true);
                        }
                }
                return null;
@@ -164,7 +164,7 @@
                if (session == null) return null;
                Object ret = unconvertedSession.get(rawname);
                if (ret != null) return ret;
-               ret = convertFetch(session.getAttribute(rawname), type);
+               ret = convertFetch(session.getAttribute(rawname), type, true);
                unconvertedSession.put(rawname, ret);
                return ret;
        }
@@ -185,6 +185,23 @@
                }               
                return value;
        }
+
+       private Object convertFetch(Object value, Class type, boolean 
parseType) {
+               if (value != null && value instanceof String) {
+                       String strval = (String) value;
+                       int iop = strval.indexOf(':');
+                       if (iop == -1) return convertFetch(value, type);
+                       String classname = strval.substring(0, iop);
+                       try {
+                               Class ntype = Class.forName(classname);
+                               String nvalue = strval.substring(iop + 1);
+                               return convertFetch(nvalue, ntype);
+                       } catch (Exception e) {
+                               return convertFetch(value, type);
+                       }
+               }               
+               return convertFetch(value, type);
+       }
        
        public String fromJavaName(String jn, int prefix, String unique) {
                jn = jn.substring(prefix);
@@ -254,7 +271,7 @@
                }
                if (newCookies == null) newCookies = new HashMap<String, 
String>();
                if (value != null) {
-                       String nval = (String) convertStore(value);
+                       String nval = (String) convertStore(value, true);
                        Cookie ncookie = new Cookie(rawname, nval);
                        ncookie.setMaxAge(2592000);
                        ncookie.setPath("/");
@@ -280,7 +297,7 @@
                        session.removeAttribute(rawname);
                } else {
                        unconvertedSession.put(rawname, value);
-                       session.setAttribute(rawname, convertStore(value));
+                       session.setAttribute(rawname, convertStore(value, 
true));
                }
        }
        
@@ -294,6 +311,13 @@
                return value;
        }
        
+       private Object convertStore(Object value, boolean withtype) {
+               Object ret = convertStore(value);
+               if (ret != null && ret instanceof String) {
+                       ret = value.getClass().getName() + ":" + ret;
+               }
+               return ret;
+       }
        
        
 }



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

Reply via email to