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) {