メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年7月24日金曜日

[Apache Shindig][お勉強][OpenSocial] メモ85 DataRequest.newFetchActivitiesRequestのサーバ側実装をしてみる(3)

複数件activityIdを指定したnewFetchActivitiesRequestできた。

GadgetXMLで、表示のところのJavaScriptで間違えがあったので、ちょっとだけ修正。
修正したJavaScriptは、以下な感じ。

  1.       function getTwoData() {  
  2.         /*===================================================================*/  
  3.         /* OWNER IdSpec                                                      */  
  4.         /*===================================================================*/  
  5.         var idspec = new opensocial.IdSpec();  
  6.         idspec.setField(opensocial.IdSpec.Field.USER_ID,  opensocial.IdSpec.PersonId.OWNER);  
  7.         idspec.setField(opensocial.IdSpec.Field.GROUP_ID, opensocial.IdSpec.GroupId.SELF);  
  8.         var params = {};  
  9.         params['activityId'] = [  
  10.           'tjt0tt30k9f0hje01eu0emq0zr505bd0',  
  11.           'w920slc0ze20nmf0diq0cnk0mj71kbz0'  
  12.         ];  
  13.   
  14.         /*===================================================================*/  
  15.         /* DataRequestオブジェクトを作成し、                                 */  
  16.         /* そこにActivity取得リクエストを追加.                               */  
  17.         /* レスポンスを取得するときのキーは'get_activity'                    */  
  18.         /*===================================================================*/  
  19.   
  20.         var req = opensocial.newDataRequest();  
  21.         req.add(req.newFetchActivitiesRequest(idspec, params), 'get_activity');  
  22.         /*===================================================================*/  
  23.         /* 送信!                                                             */  
  24.         /*===================================================================*/  
  25.         req.send(function(response){  
  26.           var activity = response.get('get_activity')  
  27.           if (activity.hadError()) {  
  28.             document.getElementById('result').innerHTML  
  29.               = 'エラーだったよ:' + activity.getErrorMessage();  
  30.             return;  
  31.           }  
  32.           var out = document.createElement('ul');  
  33.           if (activity.getData().size() == 0) {  
  34.             var li = document.createElement('li');  
  35.             li.innerHTML = 'Activity0件';  
  36.             out.appendChild(li);  
  37.           }  
  38.           activity.getData().each(function(act) {  
  39.             var li = document.createElement('li');  
  40.             var title = act.getField(opensocial.Activity.Field.TITLE);  
  41.             var media = act.getField(opensocial.Activity.Field.MEDIA_ITEMS);  
  42.             if (media != undefined) {  
  43.               for (var ii=0, len = media.length; ii < len; ii++) {  
  44.                 if (media[ii].getField(opensocial.MediaItem.Field.TYPE) == opensocial.MediaItem.Type.IMAGE) {  
  45.                   title +=  
  46.                       '  
  47. <img src="'  
  48.                     + media[ii].getField(opensocial.MediaItem.Field.URL);  
  49.                     + '/>';  
  50.                 }  
  51.               }  
  52.             }  
  53.             li.innerHTML = title;  
  54.             out.appendChild(li);  
  55.           });  
  56.   
  57.           document.getElementById('result').appendChild(out);  
  58.   
  59.         });  
  60.       }  


で、jsonrpccontainer.jsは修正済みのものを使用っと。

で、メインのサーバ側ActivityServiceのgetActivities(activityId複数版)。
  1. public Future<RestfulCollection<Activity>> getActivities(UserId userId, GroupId groupId,  
  2.     String appId, Set<String> fields, CollectionOptions options, Set<String> activityIds, SecurityToken token)  
  3.     throws ProtocolException {  
  4.   if (logger.isDebugEnabled()) {  
  5.     logger.debug("userId:[" + userId + "]:");  
  6.     logger.debug("groupId:[" + groupId + "]:");  
  7.     logger.debug("appId:[" + appId + "]:");  
  8.     for (String field: fields) {  
  9.       logger.debug("field:[" + field + "]");  
  10.     }  
  11.     logger.debug("options:sortBy:[" + options.getSortBy() + "]");  
  12.     logger.debug("options:sortOrder:[" + options.getSortOrder() + "]");  
  13.     logger.debug("options:filter:[" + options.getFilter() + "]");  
  14.     logger.debug("options:filterOperation:[" + options.getFilterOperation() + "]");  
  15.     logger.debug("options:filterValue:[" + options.getFilterValue() + "]");  
  16.     logger.debug("options:first:[" + options.getFirst() + "]");  
  17.     logger.debug("options:max:[" + options.getMax() + "]");  
  18.     logger.debug("options:updatedSince:[" + options.getUpdatedSince() + "]");  
  19.     for (String activityId: activityIds) {  
  20.       logger.debug("activityId:[" + activityId + "]");  
  21.     }  
  22.   }  
  23.   return ImmediateFuture.newInstance(  
  24.     new RestfulCollection<Activity>(  
  25.       logic.getActivities(userId, activityIds, token, options.getFirst(), options.getMax())));  
  26. }  

logic.getActivitiesは、userIdとactivityIdsをキーにテーブルからデータを持ってくるだけ。


そんだけ。

次は最後のactivityIds指定なし版のnewFetchActivitiesRequestのサーバ側実装をやってみる。

.

0 コメント: