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

2009年7月24日金曜日

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

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

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


function getTwoData() {
/*===================================================================*/
/* OWNER IdSpec */
/*===================================================================*/
var idspec = new opensocial.IdSpec();
idspec.setField(opensocial.IdSpec.Field.USER_ID, opensocial.IdSpec.PersonId.OWNER);
idspec.setField(opensocial.IdSpec.Field.GROUP_ID, opensocial.IdSpec.GroupId.SELF);
var params = {};
params['activityId'] = [
'tjt0tt30k9f0hje01eu0emq0zr505bd0',
'w920slc0ze20nmf0diq0cnk0mj71kbz0'
];

/*===================================================================*/
/* DataRequestオブジェクトを作成し、 */
/* そこにActivity取得リクエストを追加. */
/* レスポンスを取得するときのキーは'get_activity' */
/*===================================================================*/

var req = opensocial.newDataRequest();
req.add(req.newFetchActivitiesRequest(idspec, params), 'get_activity');
/*===================================================================*/
/* 送信! */
/*===================================================================*/
req.send(function(response){
var activity = response.get('get_activity')
if (activity.hadError()) {
document.getElementById('result').innerHTML
= 'エラーだったよ:' + activity.getErrorMessage();
return;
}
var out = document.createElement('ul');
if (activity.getData().size() == 0) {
var li = document.createElement('li');
li.innerHTML = 'Activity0件';
out.appendChild(li);
}
activity.getData().each(function(act) {
var li = document.createElement('li');
var title = act.getField(opensocial.Activity.Field.TITLE);
var media = act.getField(opensocial.Activity.Field.MEDIA_ITEMS);
if (media != undefined) {
for (var ii=0, len = media.length; ii < len; ii++) {
if (media[ii].getField(opensocial.MediaItem.Field.TYPE) == opensocial.MediaItem.Type.IMAGE) {
title +=
'<br /><img src="'
+ media[ii].getField(opensocial.MediaItem.Field.URL);
+ '/>';
}
}
}
li.innerHTML = title;
out.appendChild(li);
});

document.getElementById('result').appendChild(out);

});
}



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

で、メインのサーバ側ActivityServiceのgetActivities(activityId複数版)。

public Future<RestfulCollection<Activity>> getActivities(UserId userId, GroupId groupId,
String appId, Set<String> fields, CollectionOptions options, Set<String> activityIds, SecurityToken token)
throws ProtocolException {
if (logger.isDebugEnabled()) {
logger.debug("userId:[" + userId + "]:");
logger.debug("groupId:[" + groupId + "]:");
logger.debug("appId:[" + appId + "]:");
for (String field: fields) {
logger.debug("field:[" + field + "]");
}
logger.debug("options:sortBy:[" + options.getSortBy() + "]");
logger.debug("options:sortOrder:[" + options.getSortOrder() + "]");
logger.debug("options:filter:[" + options.getFilter() + "]");
logger.debug("options:filterOperation:[" + options.getFilterOperation() + "]");
logger.debug("options:filterValue:[" + options.getFilterValue() + "]");
logger.debug("options:first:[" + options.getFirst() + "]");
logger.debug("options:max:[" + options.getMax() + "]");
logger.debug("options:updatedSince:[" + options.getUpdatedSince() + "]");
for (String activityId: activityIds) {
logger.debug("activityId:[" + activityId + "]");
}
}
return ImmediateFuture.newInstance(
new RestfulCollection<Activity>(
logic.getActivities(userId, activityIds, token, options.getFirst(), options.getMax())));
}


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


そんだけ。

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

.

0 コメント: