Author: [email protected]
Date: Fri Aug 12 09:47:53 2011
New Revision: 1311

Log:
[AMDATUOPENSOCIAL-84] Fixed by retrieving appdata before overwriting it. Also 
made gadgets/mine REST service more robust when there is no registeredgadgets 
property yet available in the user properties.

Modified:
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.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/service/GadgetManagementServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
   (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
   Fri Aug 12 09:47:53 2011
@@ -109,13 +109,15 @@
             byte[] bytesValue = (byte[]) user.getProperties().get(APP_DATA);
             if (bytesValue != null) {
                 Map<String, String> values = (Map<String, String>) 
ConversionUtil.byteArrayToObject(bytesValue);
-                String gadgetValue = values.get(REGISTERED_GADGETS).trim();
-                while (gadgetValue.indexOf("  ") != -1) {
-                    // Replace double spaces with single space, occurs when 
removing gadget URLs
-                    gadgetValue = gadgetValue.replace("  ", " ");
+                if (values.get(REGISTERED_GADGETS) != null) {
+                    String gadgetValue = values.get(REGISTERED_GADGETS).trim();
+                    while (gadgetValue.indexOf("  ") != -1) {
+                        // Replace double spaces with single space, occurs 
when removing gadget URLs
+                        gadgetValue = gadgetValue.replace("  ", " ");
+                    }
+                    String[] gadgetUrls = gadgetValue.split(" ");
+                    return gadgetUrls;
                 }
-                String[] gadgetUrls = gadgetValue.split(" ");
-                return gadgetUrls;
             }
             return null;
         }

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
  Fri Aug 12 09:47:53 2011
@@ -15,32 +15,32 @@
  */
 package org.amdatu.opensocial.shindig.persistence;
 
-import static 
org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer.APP_DATA;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Future;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.amdatu.libraries.utilities.ConversionUtil;
-import 
org.amdatu.opensocial.shindig.service.TenantHostnameDispatchExtenderFilter;
-import org.apache.shindig.auth.SecurityToken;
-import org.apache.shindig.common.util.ImmediateFuture;
-import org.apache.shindig.protocol.DataCollection;
-import org.apache.shindig.protocol.ProtocolException;
-import org.apache.shindig.social.opensocial.spi.AppDataService;
-import org.apache.shindig.social.opensocial.spi.GroupId;
-import org.apache.shindig.social.opensocial.spi.UserId;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.log.LogService;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
-
-import com.google.common.collect.Maps;
+import static 
org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer.APP_DATA;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Future;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.amdatu.libraries.utilities.ConversionUtil;
+import 
org.amdatu.opensocial.shindig.service.TenantHostnameDispatchExtenderFilter;
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.common.util.ImmediateFuture;
+import org.apache.shindig.protocol.DataCollection;
+import org.apache.shindig.protocol.ProtocolException;
+import org.apache.shindig.social.opensocial.spi.AppDataService;
+import org.apache.shindig.social.opensocial.spi.GroupId;
+import org.apache.shindig.social.opensocial.spi.UserId;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.log.LogService;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+import com.google.common.collect.Maps;
 
 /**
  * This class is responsible for storage of the OpenSocial content called 
"AppData". It is not tenant aware itself,
@@ -66,14 +66,19 @@
             User user = getUser(userId, token);
             if (user != null) {
                 // Convert the String Map to a byte array and write it to 
UserAdmin
-                try {
-                    byte[] bytesValue = 
ConversionUtil.objectToByteArray(values);
+                try {
+                    Map<String, String> newValues = addValues(user, values);
+                    byte[] bytesValue = 
ConversionUtil.objectToByteArray(newValues);
                     user.getProperties().put(APP_DATA, bytesValue);
                     return ImmediateFuture.newInstance(null);
                 }
                 catch (IOException e) {
                     throw new 
ProtocolException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                         "Could not update AppData for user with id '" + 
userId.getUserId() + "'.", e);
+                }
+                catch (ClassNotFoundException e) {
+                    throw new 
ProtocolException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                        "Could not update AppData for user with id '" + 
userId.getUserId() + "'.", e);
                 }
             }
         }
@@ -85,7 +90,17 @@
         // If no user is known, ignore this update person data request
         return ImmediateFuture.newInstance(null);
     }
-
+
+    // Append/overwrite values to the current APP_DATA properties of the user
+    private Map<String, String> addValues(User user, Map<String, String> 
values) throws ClassNotFoundException, IOException {
+        byte[] currentProperties = (byte[]) user.getProperties().get(APP_DATA);
+        Map<String, String> currentValues = (Map<String, String>) 
ConversionUtil.byteArrayToObject(currentProperties);
+        for (String key : values.keySet()) {
+            currentValues.put(key, values.get(key));
+        }
+        return currentValues;
+    }
+    
     @SuppressWarnings("unchecked")
     public Future<DataCollection> getPersonData(final Set<UserId> userIds, 
final GroupId groupId, final String appId,
         final Set<String> fields,
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to