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