Author: etnu
Date: Mon Jan  5 16:13:06 2009
New Revision: 731780

URL: http://svn.apache.org/viewvc?rev=731780&view=rev
Log:
Applied patch for SHINDIG-780, from Bob Evans. This patch implements 
requestShareApp by delegating to gadgets.rpc.


Modified:
    incubator/shindig/trunk/features/opensocial-jsonrpc/feature.xml
    incubator/shindig/trunk/features/opensocial-jsonrpc/jsonrpccontainer.js

Modified: incubator/shindig/trunk/features/opensocial-jsonrpc/feature.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-jsonrpc/feature.xml?rev=731780&r1=731779&r2=731780&view=diff
==============================================================================
--- incubator/shindig/trunk/features/opensocial-jsonrpc/feature.xml (original)
+++ incubator/shindig/trunk/features/opensocial-jsonrpc/feature.xml Mon Jan  5 
16:13:06 2009
@@ -20,6 +20,7 @@
 <feature>
   <name>opensocial-jsonrpc</name>
   <dependency>opensocial-base</dependency>
+  <dependency>rpc</dependency>
   <gadget>   
     <script src="jsonrpccontainer.js"></script>
   </gadget>

Modified: 
incubator/shindig/trunk/features/opensocial-jsonrpc/jsonrpccontainer.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-jsonrpc/jsonrpccontainer.js?rev=731780&r1=731779&r2=731780&view=diff
==============================================================================
--- incubator/shindig/trunk/features/opensocial-jsonrpc/jsonrpccontainer.js 
(original)
+++ incubator/shindig/trunk/features/opensocial-jsonrpc/jsonrpccontainer.js Mon 
Jan  5 16:13:06 2009
@@ -38,338 +38,394 @@
   this.baseUrl_ = baseUrl;
 
   this.securityToken_ = shindig.auth.getSecurityToken();
-};
-JsonRpcContainer.inherits(opensocial.Container);
 
-JsonRpcContainer.prototype.getEnvironment = function() {
-  return this.environment_;
+  gadgets.rpc.register('shindig.requestShareApp_callback',
+      JsonRpcContainer.requestShareAppCallback_);
 };
 
-JsonRpcContainer.prototype.requestCreateActivity = function(activity, priority,
-    opt_callback) {
-  opt_callback = opt_callback || function(){};
-
-  var req = opensocial.newDataRequest();
-  var viewer = new opensocial.IdSpec({'userId' : 'VIEWER'});
-  req.add(this.newCreateActivityRequest(viewer, activity), 'key');
-  req.send(function(response) {
-    opt_callback(response.get('key'));
-  });
-};
+(function() {
+  var callbackIdStore = {};
 
-JsonRpcContainer.prototype.requestData = function(dataRequest, callback) {
-  callback = callback || function(){};
+  JsonRpcContainer.inherits(opensocial.Container);
 
-  var requestObjects = dataRequest.getRequestObjects();
-  var totalRequests = requestObjects.length;
+  JsonRpcContainer.prototype.getEnvironment = function() {
+    return this.environment_;
+  };
 
-  if (totalRequests == 0) {
-    window.setTimeout(function() {
-      callback(new opensocial.DataResponse({}, true));
-    }, 0);
-    return;
-  }
+  JsonRpcContainer.prototype.requestShareApp = function(recipientIds, reason,
+      opt_callback, opt_params) {
+    var callbackId = "cId_" + Math.random();
+    callbackIdStore[callbackId] = opt_callback;
+
+    var body = gadgets.util.unescapeString(reason.getField(
+        opensocial.Message.Field.BODY));
+
+    if (!body || body.length == 0) {
+      var bodyMsgKey = gadgets.util.unescapeString(reason.getField(
+        opensocial.Message.Field.BODY_ID));
+      body = gadgets.Prefs.getMsg(bodyMsgKey);
+    }
 
-  var jsonBatchData = new Array(totalRequests);
+    gadgets.rpc.call('..', 'shindig.requestShareApp',
+        null,
+        callbackId,
+        recipientIds,
+        body);
+  };
+  
 
-  for (var j = 0; j < totalRequests; j++) {
-    var requestObject = requestObjects[j];
+  /**
+   * Receives the returned results from the parent container.
+   *
+   * @param {boolean} success if false, the message will not be sent
+   * @param {string} opt_errorCode an error code if success is false
+   * @param {Array.<string>?} recipientIds an array of recipient IDs,
+   *     if success is true
+   * @private
+   */
+  JsonRpcContainer.requestShareAppCallback_ = function(callbackId,
+      success, opt_errorCode, recipientIds) {
+    callback = callbackIdStore[callbackId]
+    if (callback) {
+      callbackIdStore[callbackId] = null;
+      
+      var data = null;
+      if (recipientIds) {
+        data = {'recipientIds': recipientIds};
+      }
 
-    jsonBatchData[j] = requestObject.request.rpc;
-    if (requestObject.key) {
-      jsonBatchData[j].id = requestObject.key;
+      var responseItem = new opensocial.ResponseItem(null, data, 
opt_errorCode);
+      callback(responseItem);
     }
-  }
+  };
+
+
+  JsonRpcContainer.prototype.requestCreateActivity = function(activity, 
priority,
+      opt_callback) {
+    opt_callback = opt_callback || function(){};
+
+    var req = opensocial.newDataRequest();
+    var viewer = new opensocial.IdSpec({'userId' : 'VIEWER'});
+    req.add(this.newCreateActivityRequest(viewer, activity), 'key');
+    req.send(function(response) {
+      opt_callback(response.get('key'));
+    });
+  };
 
-  var sendResponse = function(result) {
-    if (result.errors[0]) {
-      JsonRpcContainer.generateErrorResponse(result, requestObjects, callback);
+  JsonRpcContainer.prototype.requestData = function(dataRequest, callback) {
+    callback = callback || function(){};
+
+    var requestObjects = dataRequest.getRequestObjects();
+    var totalRequests = requestObjects.length;
+
+    if (totalRequests == 0) {
+      window.setTimeout(function() {
+        callback(new opensocial.DataResponse({}, true));
+      }, 0);
       return;
     }
 
-    result = result.data;
+    var jsonBatchData = new Array(totalRequests);
 
-    var globalError = false;
-    var responseMap = {};
+    for (var j = 0; j < totalRequests; j++) {
+      var requestObject = requestObjects[j];
 
-    // Map from indices to ids.
-    for (var i = 0; i < result.length; i++) {
-      result[result[i].id] = result[i];
+      jsonBatchData[j] = requestObject.request.rpc;
+      if (requestObject.key) {
+        jsonBatchData[j].id = requestObject.key;
+      }
     }
 
-    for (var k = 0; k < requestObjects.length; k++) {
-      var request = requestObjects[k];
-      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 sendResponse = function(result) {
+      if (result.errors[0]) {
+        JsonRpcContainer.generateErrorResponse(result, requestObjects, 
callback);
+        return;
       }
 
-      var rawData = response.data;
-      var error = response.error;
-      var errorMessage = "";
+      result = result.data;
+
+      var globalError = false;
+      var responseMap = {};
 
-      if (error) {
-        errorMessage = error.message;
+      // Map from indices to ids.
+      for (var i = 0; i < result.length; i++) {
+        result[result[i].id] = result[i];
       }
 
-      var processedData = request.request.processResponse(
-          request.request, rawData, error, errorMessage);
-      globalError = globalError || processedData.hadError();
-      if (request.key) {
-        responseMap[request.key] = processedData;
+      for (var k = 0; k < requestObjects.length; k++) {
+        var request = requestObjects[k];
+        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;
+        var errorMessage = "";
+
+        if (error) {
+          errorMessage = error.message;
+        }
+
+        var processedData = request.request.processResponse(
+            request.request, rawData, error, errorMessage);
+        globalError = globalError || processedData.hadError();
+        if (request.key) {
+          responseMap[request.key] = processedData;
+        }
       }
+
+      var dataResponse = new opensocial.DataResponse(responseMap, globalError);
+      callback(dataResponse);
+    };
+
+    // TODO: get the jsonbatch url from the container config
+    var makeRequestParams = {
+      "CONTENT_TYPE" : "JSON",
+      "METHOD" : "POST",
+      "AUTHORIZATION" : "SIGNED",
+      "POST_DATA" : gadgets.json.stringify(jsonBatchData)
+    };
+
+    var url = [this.baseUrl_, "/rpc"];
+    var token = shindig.auth.getSecurityToken();
+    if (token) {
+      url.push("?st=", encodeURIComponent(token));
     }
 
-    var dataResponse = new opensocial.DataResponse(responseMap, globalError);
-    callback(dataResponse);
+    this.sendRequest(url.join(''), sendResponse, makeRequestParams,
+        "application/json");
   };
 
-  // TODO: get the jsonbatch url from the container config
-  var makeRequestParams = {
-    "CONTENT_TYPE" : "JSON",
-    "METHOD" : "POST",
-    "AUTHORIZATION" : "SIGNED",
-    "POST_DATA" : gadgets.json.stringify(jsonBatchData)
-  };
-
-  var url = [this.baseUrl_, "/rpc"];
-  var token = shindig.auth.getSecurityToken();
-  if (token) {
-    url.push("?st=", encodeURIComponent(token));
+  JsonRpcContainer.prototype.sendRequest = function(relativeUrl, callback, 
params, contentType) {
+    gadgets.io.makeNonProxiedRequest(relativeUrl, callback, params, 
contentType);
   }
 
-  this.sendRequest(url.join(''), sendResponse, makeRequestParams,
-      "application/json");
-};
-
-JsonRpcContainer.prototype.sendRequest = function(relativeUrl, callback, 
params, contentType) {
-  gadgets.io.makeNonProxiedRequest(relativeUrl, callback, params, contentType);
-}
-
-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++) {
-    errorResponseMap[requestObjects[i].key] = new opensocial.ResponseItem(
-        requestObjects[i].request, null, globalErrorCode);
-  }
-  callback(new opensocial.DataResponse(errorResponseMap, true));
-};
-
-JsonRpcContainer.translateHttpError = function(httpError) {
-  if (httpError == "Error 501") {
-    return opensocial.ResponseItem.Error.NOT_IMPLEMENTED;
-  } else if (httpError == "Error 401") {
-    return opensocial.ResponseItem.Error.UNAUTHORIZED;
-  } else if (httpError == "Error 403") {
-    return opensocial.ResponseItem.Error.FORBIDDEN;
-  } else if (httpError == "Error 400") {
-    return opensocial.ResponseItem.Error.BAD_REQUEST;
-  } else if (httpError == "Error 500") {
-    return opensocial.ResponseItem.Error.INTERNAL_ERROR;
-  } else if (httpError == "Error 404") {
-    return opensocial.ResponseItem.Error.BAD_REQUEST;
-  } else if (httpError == "Error 417") {
-    return opensocial.ResponseItem.Error.LIMIT_EXCEEDED;
-  }
-};
+  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++) {
+      errorResponseMap[requestObjects[i].key] = new opensocial.ResponseItem(
+          requestObjects[i].request, null, globalErrorCode);
+    }
+    callback(new opensocial.DataResponse(errorResponseMap, true));
+  };
 
-JsonRpcContainer.prototype.makeIdSpec = function(id) {
-  return new opensocial.IdSpec({'userId' : id});
-};
+  JsonRpcContainer.translateHttpError = function(httpError) {
+    if (httpError == "Error 501") {
+      return opensocial.ResponseItem.Error.NOT_IMPLEMENTED;
+    } else if (httpError == "Error 401") {
+      return opensocial.ResponseItem.Error.UNAUTHORIZED;
+    } else if (httpError == "Error 403") {
+      return opensocial.ResponseItem.Error.FORBIDDEN;
+    } else if (httpError == "Error 400") {
+      return opensocial.ResponseItem.Error.BAD_REQUEST;
+    } else if (httpError == "Error 500") {
+      return opensocial.ResponseItem.Error.INTERNAL_ERROR;
+    } else if (httpError == "Error 404") {
+      return opensocial.ResponseItem.Error.BAD_REQUEST;
+    } else if (httpError == "Error 417") {
+      return opensocial.ResponseItem.Error.LIMIT_EXCEEDED;
+    }
+  };
 
-JsonRpcContainer.prototype.translateIdSpec = function(newIdSpec) {
-  var userIds = newIdSpec.getField('userId');
-  var groupId = newIdSpec.getField('groupId');
-
-  // Upconvert to array for convenience
-  if (!opensocial.Container.isArray(userIds)) {
-    userIds = [userIds];
-  }
+  JsonRpcContainer.prototype.makeIdSpec = function(id) {
+    return new opensocial.IdSpec({'userId' : id});
+  };
 
-  for (var i = 0; i < userIds.length; i++) {
-    if (userIds[i] == 'OWNER') {
-      userIds[i] = '@owner';
-    } else if (userIds[i] == 'VIEWER') {
-      userIds[i] = '@viewer';
+  JsonRpcContainer.prototype.translateIdSpec = function(newIdSpec) {
+    var userIds = newIdSpec.getField('userId');
+    var groupId = newIdSpec.getField('groupId');
+
+    // Upconvert to array for convenience
+    if (!opensocial.Container.isArray(userIds)) {
+      userIds = [userIds];
     }
-  }
 
-  if (groupId == 'FRIENDS') {
-    groupId = "@friends";
-  } else if (groupId == 'SELF' || !groupId) {
-    groupId = "@self";
-  }
+    for (var i = 0; i < userIds.length; i++) {
+      if (userIds[i] == 'OWNER') {
+        userIds[i] = '@owner';
+      } else if (userIds[i] == 'VIEWER') {
+        userIds[i] = '@viewer';
+      }
+    }
 
-  return { userId : userIds, groupId : groupId};
-};
+    if (groupId == 'FRIENDS') {
+      groupId = "@friends";
+    } else if (groupId == 'SELF' || !groupId) {
+      groupId = "@self";
+    }
 
-JsonRpcContainer.prototype.newFetchPersonRequest = function(id, opt_params) {
-  var peopleRequest = this.newFetchPeopleRequest(
-      this.makeIdSpec(id), opt_params);
-
-  var me = this;
-  return new JsonRpcRequestItem(peopleRequest.rpc,
-          function(rawJson) {
-            return me.createPersonFromJson(rawJson);
-          });
-};
+    return { userId : userIds, groupId : groupId};
+  };
 
-JsonRpcContainer.prototype.newFetchPeopleRequest = function(idSpec,
-    opt_params) {
-  var rpc = { method : "people.get" };
-  rpc.params = this.translateIdSpec(idSpec);
-  if (opt_params['profileDetail']) {
-    
FieldTranslations.translateJsPersonFieldsToServerFields(opt_params['profileDetail']);
-    rpc.params.fields = opt_params['profileDetail'];
-  }
-  if (opt_params['first']) {
-    rpc.params.startIndex = opt_params['first'];
-  }
-  if (opt_params['max']) {
-    rpc.params.count = opt_params['max'];
-  }
-  if (opt_params['sortOrder']) {
-    rpc.params.sortBy = opt_params['sortOrder'];
-  }
-  if (opt_params['filter']) {
-    rpc.params.filterBy = opt_params['filter'];
-  }
-  if (idSpec.getField('networkDistance')) {
-    rpc.params.networkDistance = idSpec.getField('networkDistance');
-  }
+  JsonRpcContainer.prototype.newFetchPersonRequest = function(id, opt_params) {
+    var peopleRequest = this.newFetchPeopleRequest(
+        this.makeIdSpec(id), opt_params);
+
+    var me = this;
+    return new JsonRpcRequestItem(peopleRequest.rpc,
+            function(rawJson) {
+              return me.createPersonFromJson(rawJson);
+            });
+  };
 
-  var me = this;
-  return new JsonRpcRequestItem(rpc,
-      function(rawJson) {
-        var jsonPeople;
-        if (rawJson['list']) {
-          // For the array of people response
-          jsonPeople = rawJson['list'];
-        } else {
-          // For the single person response
-          jsonPeople = [rawJson];
-        }
+  JsonRpcContainer.prototype.newFetchPeopleRequest = function(idSpec,
+      opt_params) {
+    var rpc = { method : "people.get" };
+    rpc.params = this.translateIdSpec(idSpec);
+    if (opt_params['profileDetail']) {
+      
FieldTranslations.translateJsPersonFieldsToServerFields(opt_params['profileDetail']);
+      rpc.params.fields = opt_params['profileDetail'];
+    }
+    if (opt_params['first']) {
+      rpc.params.startIndex = opt_params['first'];
+    }
+    if (opt_params['max']) {
+      rpc.params.count = opt_params['max'];
+    }
+    if (opt_params['sortOrder']) {
+      rpc.params.sortBy = opt_params['sortOrder'];
+    }
+    if (opt_params['filter']) {
+      rpc.params.filterBy = opt_params['filter'];
+    }
+    if (idSpec.getField('networkDistance')) {
+      rpc.params.networkDistance = idSpec.getField('networkDistance');
+    }
 
-        var people = [];
-        for (var i = 0; i < jsonPeople.length; i++) {
-          people.push(me.createPersonFromJson(jsonPeople[i]));
-        }
-        return new opensocial.Collection(people,
-            rawJson['startIndex'], rawJson['totalResults']);
-      });
-};
+    var me = this;
+    return new JsonRpcRequestItem(rpc,
+        function(rawJson) {
+          var jsonPeople;
+          if (rawJson['list']) {
+            // For the array of people response
+            jsonPeople = rawJson['list'];
+          } else {
+            // For the single person response
+            jsonPeople = [rawJson];
+          }
+
+          var people = [];
+          for (var i = 0; i < jsonPeople.length; i++) {
+            people.push(me.createPersonFromJson(jsonPeople[i]));
+          }
+          return new opensocial.Collection(people,
+              rawJson['startIndex'], rawJson['totalResults']);
+        });
+  };
 
-JsonRpcContainer.prototype.createPersonFromJson = function(serverJson) {
-  FieldTranslations.translateServerPersonToJsPerson(serverJson);
-  return new JsonPerson(serverJson);
-};
+  JsonRpcContainer.prototype.createPersonFromJson = function(serverJson) {
+    FieldTranslations.translateServerPersonToJsPerson(serverJson);
+    return new JsonPerson(serverJson);
+  };
 
-JsonRpcContainer.prototype.getFieldsList = function(keys) {
-  // datarequest.js guarantees that keys is an array
-  if (this.hasNoKeys(keys) || this.isWildcardKey(keys[0])) {
-    return [];
-  } else {
-    return keys;
-  }
-};
+  JsonRpcContainer.prototype.getFieldsList = function(keys) {
+    // datarequest.js guarantees that keys is an array
+    if (this.hasNoKeys(keys) || this.isWildcardKey(keys[0])) {
+      return [];
+    } else {
+      return keys;
+    }
+  };
 
-JsonRpcContainer.prototype.hasNoKeys = function(keys) {
-  return !keys || keys.length == 0;
-};
+  JsonRpcContainer.prototype.hasNoKeys = function(keys) {
+    return !keys || keys.length == 0;
+  };
 
-JsonRpcContainer.prototype.isWildcardKey = function(key) {
-  // Some containers support * to mean all keys in the js apis.
-  // This allows the RESTful apis to be compatible with them.
-  return key == "*";
-};
+  JsonRpcContainer.prototype.isWildcardKey = function(key) {
+    // Some containers support * to mean all keys in the js apis.
+    // This allows the RESTful apis to be compatible with them.
+    return key == "*";
+  };
 
-JsonRpcContainer.prototype.newFetchPersonAppDataRequest = function(idSpec, 
keys,
-    opt_params) {
-  var rpc = { method : "appdata.get" };
-  rpc.params = this.translateIdSpec(idSpec);
-  rpc.params.appId = "@app";
-  rpc.params.fields = this.getFieldsList(keys);
-  if (idSpec.getField('networkDistance')) {
-    rpc.params.networkDistance = idSpec.getField('networkDistance');
-  }
+  JsonRpcContainer.prototype.newFetchPersonAppDataRequest = function(idSpec, 
keys,
+      opt_params) {
+    var rpc = { method : "appdata.get" };
+    rpc.params = this.translateIdSpec(idSpec);
+    rpc.params.appId = "@app";
+    rpc.params.fields = this.getFieldsList(keys);
+    if (idSpec.getField('networkDistance')) {
+      rpc.params.networkDistance = idSpec.getField('networkDistance');
+    }
 
-  return new JsonRpcRequestItem(rpc,
-      function (appData) {
-        return opensocial.Container.escape(appData, opt_params, true);
-      });
-};
+    return new JsonRpcRequestItem(rpc,
+        function (appData) {
+          return opensocial.Container.escape(appData, opt_params, true);
+        });
+  };
 
-JsonRpcContainer.prototype.newUpdatePersonAppDataRequest = function(id, key,
-    value) {
-  var rpc = { method : "appdata.update" };
-  rpc.params = this.translateIdSpec(this.makeIdSpec(id));
-  rpc.params.appId = "@app";
-  rpc.params.data = {};
-  rpc.params.data[key] = value;
-  rpc.params.fields = key;
-  return new JsonRpcRequestItem(rpc);
-};
+  JsonRpcContainer.prototype.newUpdatePersonAppDataRequest = function(id, key,
+      value) {
+    var rpc = { method : "appdata.update" };
+    rpc.params = this.translateIdSpec(this.makeIdSpec(id));
+    rpc.params.appId = "@app";
+    rpc.params.data = {};
+    rpc.params.data[key] = value;
+    rpc.params.fields = key;
+    return new JsonRpcRequestItem(rpc);
+  };
 
-JsonRpcContainer.prototype.newRemovePersonAppDataRequest = function(id, keys) {
-  var rpc = { method : "appdata.delete" };
-  rpc.params = this.translateIdSpec(this.makeIdSpec(id));
-  rpc.params.appId = "@app";
-  rpc.params.fields = this.getFieldsList(keys);
+  JsonRpcContainer.prototype.newRemovePersonAppDataRequest = function(id, 
keys) {
+    var rpc = { method : "appdata.delete" };
+    rpc.params = this.translateIdSpec(this.makeIdSpec(id));
+    rpc.params.appId = "@app";
+    rpc.params.fields = this.getFieldsList(keys);
 
-  return new JsonRpcRequestItem(rpc);
-};
+    return new JsonRpcRequestItem(rpc);
+  };
 
-JsonRpcContainer.prototype.newFetchActivitiesRequest = function(idSpec,
-    opt_params) {
-  var rpc = { method : "activities.get" };
-  rpc.params = this.translateIdSpec(idSpec);
-  rpc.params.appId = "@app";
-  if (idSpec.getField('networkDistance')) {
-    rpc.params.networkDistance = idSpec.getField('networkDistance');
-  }
+  JsonRpcContainer.prototype.newFetchActivitiesRequest = function(idSpec,
+      opt_params) {
+    var rpc = { method : "activities.get" };
+    rpc.params = this.translateIdSpec(idSpec);
+    rpc.params.appId = "@app";
+    if (idSpec.getField('networkDistance')) {
+      rpc.params.networkDistance = idSpec.getField('networkDistance');
+    }
 
-  return new JsonRpcRequestItem(rpc,
-      function(rawJson) {
-        rawJson = rawJson['list'];
-        var activities = [];
-        for (var i = 0; i < rawJson.length; i++) {
-          activities.push(new JsonActivity(rawJson[i]));
-        }
-        return new opensocial.Collection(activities);
-      });
-};
+    return new JsonRpcRequestItem(rpc,
+        function(rawJson) {
+          rawJson = rawJson['list'];
+          var activities = [];
+          for (var i = 0; i < rawJson.length; i++) {
+            activities.push(new JsonActivity(rawJson[i]));
+          }
+          return new opensocial.Collection(activities);
+        });
+  };
 
-JsonRpcContainer.prototype.newActivity = function(opt_params) {
-  return new JsonActivity(opt_params, true);
-};
+  JsonRpcContainer.prototype.newActivity = function(opt_params) {
+    return new JsonActivity(opt_params, true);
+  };
 
-JsonRpcContainer.prototype.newMediaItem = function(mimeType, url, opt_params) {
-  opt_params = opt_params || {};
-  opt_params['mimeType'] = mimeType;
-  opt_params['url'] = url;
-  return new JsonMediaItem(opt_params);
-};
+  JsonRpcContainer.prototype.newMediaItem = function(mimeType, url, 
opt_params) {
+    opt_params = opt_params || {};
+    opt_params['mimeType'] = mimeType;
+    opt_params['url'] = url;
+    return new JsonMediaItem(opt_params);
+  };
 
-JsonRpcContainer.prototype.newCreateActivityRequest = function(idSpec,
-    activity) {
-  var rpc = { method : "activities.create" };
-  rpc.params = this.translateIdSpec(idSpec);
-  rpc.params.appId = "@app";
-  if (idSpec.getField('networkDistance')) {
-    rpc.params.networkDistance = idSpec.getField('networkDistance');
-  }
-  rpc.params.activity = activity.toJsonObject();
+  JsonRpcContainer.prototype.newCreateActivityRequest = function(idSpec,
+      activity) {
+    var rpc = { method : "activities.create" };
+    rpc.params = this.translateIdSpec(idSpec);
+    rpc.params.appId = "@app";
+    if (idSpec.getField('networkDistance')) {
+      rpc.params.networkDistance = idSpec.getField('networkDistance');
+    }
+    rpc.params.activity = activity.toJsonObject();
 
-  return new JsonRpcRequestItem(rpc);
-};
+    return new JsonRpcRequestItem(rpc);
+  };
+})();
 
 var JsonRpcRequestItem = function(rpc, opt_processData) {
   this.rpc = rpc;


Reply via email to