Author: lryan
Date: Thu Aug 21 12:27:05 2008
New Revision: 687836

URL: http://svn.apache.org/viewvc?rev=687836&view=rev
Log:
Fix for parsing appdata from RPC response. Code cleanups

Modified:
    incubator/shindig/trunk/features/opensocial-current/jsonrpccontainer.js

Modified: 
incubator/shindig/trunk/features/opensocial-current/jsonrpccontainer.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-current/jsonrpccontainer.js?rev=687836&r1=687835&r2=687836&view=diff
==============================================================================
--- incubator/shindig/trunk/features/opensocial-current/jsonrpccontainer.js 
(original)
+++ incubator/shindig/trunk/features/opensocial-current/jsonrpccontainer.js Thu 
Aug 21 12:27:05 2008
@@ -45,8 +45,8 @@
   return this.environment_;
 };
 
-JsonRpcContainer.prototype.requestCreateActivity = function(activity,
-                                                            priority, 
opt_callback) {
+JsonRpcContainer.prototype.requestCreateActivity = function(activity, priority,
+    opt_callback) {
   opt_callback = opt_callback || {};
 
   var req = opensocial.newDataRequest();
@@ -69,25 +69,13 @@
   }
 
   var jsonBatchData = new Array(totalRequests);
-  var systemKeyIndex = 0;
 
   for (var j = 0; j < totalRequests; j++) {
     var requestObject = requestObjects[j];
 
-    if (!requestObject.key) {
-      requestObject.key = "systemKey" + systemKeyIndex;
-      while (jsonBatchData[requestObject.key]) {
-        // If the key exists, choose another and try again
-        systemKeyIndex++;
-        requestObject.key = "systemKey" + systemKeyIndex;
-      }
-    }
-
     jsonBatchData[j] = requestObject.request.rpc;
-    jsonBatchData[j].id = requestObject.key;
-
-    if (requestObject.request.postData) {
-      jsonBatchData[j].postData = requestObject.request.postData;
+    if (requestObject.key) {
+      jsonBatchData[j].id = requestObject.key;
     }
   }
 
@@ -109,7 +97,12 @@
 
     for (var k = 0; k < requestObjects.length; k++) {
       var request = requestObjects[k];
-      var response = result[request.key];
+      var response = result[k];
+
+      if (request.key && response.id != request.key) {
+        throw "Request key(" + request.key +
+            ") and response id(" + response.id + ") do not match";
+      }
 
       var rawData = response.data;
       var error = response.error;
@@ -122,7 +115,9 @@
       var processedData = request.request.processResponse(
           request.request, rawData, error, errorMessage);
       globalError = globalError || processedData.hadError();
-      responseMap[request.key] = processedData;
+      if (request.key) {
+        responseMap[request.key] = processedData;
+      }
     }
 
     var dataResponse = new opensocial.DataResponse(responseMap, globalError);
@@ -138,13 +133,17 @@
   };
 
   gadgets.io.makeNonProxiedRequest(
-      this.baseUrl_ + "/rpc?st=" + 
encodeURIComponent(shindig.auth.getSecurityToken()),
+      this.baseUrl_ + "/rpc?st=" +
+      encodeURIComponent(shindig.auth.getSecurityToken()),
       sendResponse, makeRequestParams, "application/json");
 };
 
-JsonRpcContainer.generateErrorResponse = function(result, requestObjects, 
callback) {
-  var globalErrorCode = JsonRpcContainer.translateHttpError(result.errors[0] 
|| result.data.error)
-      || opensocial.ResponseItem.Error.INTERNAL_ERROR;
+JsonRpcContainer.generateErrorResponse = function(result, requestObjects,
+    callback) {
+  var globalErrorCode =
+          JsonRpcContainer.translateHttpError(result.errors[0]
+                  || result.data.error)
+                  || opensocial.ResponseItem.Error.INTERNAL_ERROR;
 
   var errorResponseMap = {};
   for (var i = 0; i < requestObjects.length; i++) {
@@ -178,17 +177,19 @@
 };
 
 JsonRpcContainer.prototype.translateIdSpec = function(newIdSpec) {
-  var userId = newIdSpec.getField('userId');
+  var userIds = newIdSpec.getField('userId');
   var groupId = newIdSpec.getField('groupId');
 
-  if (userId == 'OWNER') {
-    userId = '@owner';
-  } else if (userId == 'VIEWER') {
-    userId = '@viewer';
-  } else if (opensocial.Container.isArray(newIdSpec)) {
-    for (var i = 0; i < newIdSpec.length; i++) {
-      // TODO: We will need multiple urls here....don't want to think about
-      // that yet
+  // Upconvert to array for convenience
+  if (!opensocial.Container.isArray(userIds)) {
+    userIds = [userIds];
+  }
+
+  for (var i = 0; i < userIds.length; i++) {
+    if (userIds[i] == 'OWNER') {
+      userIds[i] = '@owner';
+    } else if (userIds[i] == 'VIEWER') {
+      userIds[i] = '@viewer';
     }
   }
 
@@ -198,7 +199,7 @@
     groupId = "@self";
   }
 
-  return { userId : userId, groupId : groupId};
+  return { userId : userIds, groupId : groupId};
 };
 
 JsonRpcContainer.prototype.newFetchPersonRequest = function(id, opt_params) {
@@ -207,13 +208,13 @@
 
   var me = this;
   return new JsonRpcRequestItem(peopleRequest.rpc,
-      function(rawJson) {
-        return me.createPersonFromJson(rawJson);
-      });
+          function(rawJson) {
+            return me.createPersonFromJson(rawJson);
+          });
 };
 
 JsonRpcContainer.prototype.newFetchPeopleRequest = function(idSpec,
-                                                            opt_params) {
+    opt_params) {
   var rpc = { method : "people.get" };
   rpc.params = this.translateIdSpec(idSpec);
   if (opt_params['profileDetail']) {
@@ -279,8 +280,8 @@
   return key == "*";
 };
 
-JsonRpcContainer.prototype.newFetchPersonAppDataRequest = function(idSpec,
-                                                                   keys, 
opt_params) {
+JsonRpcContainer.prototype.newFetchPersonAppDataRequest = function(idSpec, 
keys,
+    opt_params) {
   var rpc = { method : "appdata.get" };
   rpc.params = this.translateIdSpec(idSpec);
   rpc.params.app = "@app";
@@ -291,12 +292,12 @@
 
   return new JsonRpcRequestItem(rpc,
       function (appData) {
-        return  opensocial.Container.escape(appData['data'], opt_params, true);
+        return opensocial.Container.escape(appData, opt_params, true);
       });
 };
 
 JsonRpcContainer.prototype.newUpdatePersonAppDataRequest = function(id, key,
-                                                                    value) {
+    value) {
   var rpc = { method : "appdata.update" };
   rpc.params = this.translateIdSpec(this.makeIdSpec(id));
   rpc.params.app = "@app";
@@ -315,7 +316,7 @@
 };
 
 JsonRpcContainer.prototype.newFetchActivitiesRequest = function(idSpec,
-                                                                opt_params) {
+    opt_params) {
   var rpc = { method : "activities.get" };
   rpc.params = this.translateIdSpec(idSpec);
   rpc.params.app = "@app";
@@ -346,7 +347,7 @@
 };
 
 JsonRpcContainer.prototype.newCreateActivityRequest = function(idSpec,
-                                                               activity) {
+    activity) {
   var rpc = { method : "activities.create" };
   rpc.params = this.translateIdSpec(idSpec);
   rpc.params.app = "@app";
@@ -366,7 +367,7 @@
                      };
 
   this.processResponse = function(originalDataRequest, rawJson, error,
-                                  errorMessage) {
+      errorMessage) {
     return new opensocial.ResponseItem(originalDataRequest,
         error ? null : this.processData(rawJson), error, errorMessage);
   }


Reply via email to