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