Author: [email protected]
Date: Mon Jan 23 15:55:16 2012
New Revision: 1972

Log:
[AMDATUOPENSOCIAL-183] Moved conversion to <String,String> map to 'just in 
time' location

Modified:
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/rest/BaseRESTServiceImpl.java
   
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/AppDataServiceImpl.java

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/rest/BaseRESTServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/rest/BaseRESTServiceImpl.java
      (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/rest/BaseRESTServiceImpl.java
      Mon Jan 23 15:55:16 2012
@@ -17,16 +17,6 @@
 
 import static 
org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer.APP_DATA;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.core.CacheControl;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-
 import org.amdatu.auth.tokenprovider.InvalidTokenException;
 import org.amdatu.auth.tokenprovider.TokenProvider;
 import org.amdatu.auth.tokenprovider.TokenProviderException;
@@ -40,6 +30,18 @@
 import org.amdatu.opensocial.gadgetmanagement.bean.Widget;
 import org.amdatu.opensocial.gadgetmanagement.osgi.Activator;
 import org.amdatu.web.rest.jaxrs.RESTService;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.CacheControl;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
 import org.apache.felix.dm.Component;
 import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.ServiceDependency;
@@ -257,14 +259,34 @@
             if (widgetId != null) {
                 userPrefsBytes = (byte[]) user.getProperties().get(APP_DATA + 
".userprefs." + widgetId);
                 if (userPrefsBytes != null) {
-                    Map<String, String> userPrefs =
-                        (Map<String, String>) 
ConversionUtil.byteArrayToObject(userPrefsBytes);
-                    return userPrefs;
+                    Map<String, Object> userPrefs =
+                        (Map<String, Object>) 
ConversionUtil.byteArrayToObject(userPrefsBytes);
+                    
+                    // Explicitly convert this to a String map. Although the 
Shindig AppData API
+                    // takes a Map<String, String> as input argument, it will 
pass values of other
+                    // types (i.e. Integer). The UserPref API assumes that 
each preference is 
+                    // stored as a String and so we must dot his conversion 
and choose to do it here
+                    return toStringMap(userPrefs);
                 }
             }
         }
         return null;
     }
+    
+    private Map<String, String> toStringMap(Map<String, Object> values) {
+        Map<String, String> map = new HashMap<String, String>();
+        for (String key : values.keySet()) {
+            Object value = values.get(key);
+            if (value instanceof String) {
+                map.put(key,  (String) value);
+            } else if (value instanceof Boolean) {
+                map.put(key, (Boolean) value ? "1" : "0");
+            } else if (value instanceof Integer) {
+                map.put(key, ((Integer) value).toString());
+            }
+        }
+        return map;
+    }
 
     protected User getUserFromViewer(final HttpServletRequest request) {
         String viewer = getOpenSocialContainer().getViewer(request);

Modified: 
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/AppDataServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/AppDataServiceImpl.java
  (original)
+++ 
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/AppDataServiceImpl.java
  Mon Jan 23 15:55:16 2012
@@ -111,18 +111,7 @@
         }
         Map<String, Object> currentValues = (Map<String, Object>) 
ConversionUtil.byteArrayToObject(currentProperties);
         for (String key : values.keySet()) {
-            // Despite the generic stuff, at runtime the posted AppData values 
might still contain Integers, Doubles
-            // and other primitive types. Therefore we explicitly invoke 
toString() on them.
             currentValues.put(key, values.get(key));
-            
-            if (!(values.get(key) instanceof String)) {
-                Object v = values.get(key);
-                if (v instanceof Boolean) {
-                    currentValues.put(key, (Boolean) v ? "1" : "0");
-                } else if (v instanceof Integer) {
-                    currentValues.put(key, ((Integer) v).toString());
-                }
-            }
         }
         return currentValues;
     }
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to