You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by do...@apache.org on 2008/03/07 15:16:00 UTC

svn commit: r634685 - in /incubator/shindig/trunk: features/opensocial-0.7/ java/gadgets/src/main/java/org/apache/shindig/social/ java/gadgets/src/main/java/org/apache/shindig/social/file/ java/gadgets/src/main/java/org/apache/shindig/social/http/

Author: doll
Date: Fri Mar  7 06:16:00 2008
New Revision: 634685

URL: http://svn.apache.org/viewvc?rev=634685&view=rev
Log:
The opensocial-0.7 feature now allows you to update data. 
Note: the error handling needs some work in a later change



Modified:
    incubator/shindig/trunk/features/opensocial-0.7/jsoncontainer.js
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/DataHandler.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/file/BasicDataHandler.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/http/SocialDataServlet.java

Modified: incubator/shindig/trunk/features/opensocial-0.7/jsoncontainer.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-0.7/jsoncontainer.js?rev=634685&r1=634684&r2=634685&view=diff
==============================================================================
--- incubator/shindig/trunk/features/opensocial-0.7/jsoncontainer.js (original)
+++ incubator/shindig/trunk/features/opensocial-0.7/jsoncontainer.js Fri Mar  7 06:16:00 2008
@@ -132,7 +132,7 @@
 
 JsonContainer.prototype.newUpdatePersonAppDataRequest = function(id, key,
     value) {
-  return new RequestItem({'type' : 'UPDATE_PERSON_APP_DATA', 'id' : id,
+  return new RequestItem({'type' : 'UPDATE_PERSON_APP_DATA', 'idSpec' : id,
     'key' : key, 'value' : value});
 };
 

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/DataHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/DataHandler.java?rev=634685&r1=634684&r2=634685&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/DataHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/DataHandler.java Fri Mar  7 06:16:00 2008
@@ -22,4 +22,15 @@
 
 public interface DataHandler {
   public Map<String, Map<String, String>> getPersonData(List<String> ids);
+
+  /**
+   * Updates the data key for the given person with the new value.
+   *
+   * @param id The person the data is for.
+   * @param key The key of the data.
+   * @param value The new value of the data.
+   * @return true if there was an error in updating the app data
+   */
+  // TODO: Somehow we need to generalize error handling
+  public boolean updatePersonData(String id, String key, String value);
 }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/file/BasicDataHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/file/BasicDataHandler.java?rev=634685&r1=634684&r2=634685&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/file/BasicDataHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/file/BasicDataHandler.java Fri Mar  7 06:16:00 2008
@@ -29,10 +29,17 @@
 import java.util.Map;
 
 public class BasicDataHandler implements DataHandler {
-  Map<String, Map<String, String>> allData
-      = new HashMap<String, Map<String, String>>();
+  // TODO: This obviously won't work on multiple servers
+  // If we care then we should do something about it
+  private static Map<String, Map<String, String>> allData;
 
   public BasicDataHandler() {
+    if (allData != null) {
+      return;
+    }
+
+    allData = new HashMap<String, Map<String, String>>();
+
     // TODO: Should use guice here for one global thingy and get url from web ui
     String stateFile = "http://localhost:8080/gadgets/files/samplecontainer/state-basicfriendlist.xml";
     XmlStateFileFetcher fetcher = new XmlStateFileFetcher(stateFile);
@@ -78,6 +85,21 @@
     return data;
   }
 
+  public boolean updatePersonData(String id, String key, String value) {
+    if (!isValidKey(key)) {
+      return false;
+    }
+
+    Map<String, String> personData = allData.get(id);
+    if (personData == null) {
+      personData = new HashMap<String, String>();
+      allData.put(id, personData);
+    }
+
+    personData.put(key, value);
+    return true;
+  }
+
   /**
    * Determines whether the input is a valid key. Valid keys match the regular
    * expression [\w\-\.]+. The logic is not done using java.util.regex.* as
@@ -86,7 +108,6 @@
    * @param key the key to validate.
    * @return true if the key is a valid appdata key, false otherwise.
    */
-  // TODO: Use this method
   public static boolean isValidKey(String key) {
     if (key == null || key.length() == 0) {
       return false;

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/http/SocialDataServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/http/SocialDataServlet.java?rev=634685&r1=634684&r2=634685&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/http/SocialDataServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/social/http/SocialDataServlet.java Fri Mar  7 06:16:00 2008
@@ -59,7 +59,6 @@
   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
       throws IOException {
     // TODO: Get the security token
-    // TODO: Allow saving data
     // TODO: Don't use string concatenation for json output
     // TODO: etc, etc, etc
 
@@ -100,9 +99,16 @@
           case FETCH_PERSON_APP_DATA :
             jsonData = handleFetchData(peopleIds);
             break;
+
+          case UPDATE_PERSON_APP_DATA:
+            jsonData = handleUpdateData(peopleIds, requestItem);
+            break;
         }
 
         jsonResponse += "{\"response\" : " + jsonData + "}";
+      } catch (JSONException e) {
+        jsonResponse += "{\"response\" : {}, \"error\" : \""
+            + ResponseError.BAD_REQUEST.toJson() + "\"}";
       } catch (IllegalArgumentException e) {
         jsonResponse += "{\"response\" : {}, \"error\" : \""
             + ResponseError.BAD_REQUEST.toJson() + "\"}";
@@ -139,6 +145,24 @@
     jsonData += "}";
 
     return jsonData;
+  }
+
+  private String handleUpdateData(List<String> peopleIds,
+      JSONObject requestItem) throws JSONException {
+
+    // We only support updating one person right now
+    String id = peopleIds.get(0);
+
+    String key = requestItem.getString("key");
+    String value = requestItem.getString("value");
+
+    // TODO: Clean this error handling up
+    boolean success = dataHandler.updatePersonData(id, key, value);
+    if (!success) {
+      throw new IllegalArgumentException();
+    } else {
+      return "{}";
+    }
   }
 
   private String handleFetchPeople(List<String> peopleIds) {