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

2009年7月25日土曜日

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

DataRequest.newFetchActivitiesRequestのactivityId指定しない版できた。

まず、GadgetXMLのJavaScriptは、


function getData() {
/*===================================================================*/
/* 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);
/*===================================================================*/
/* DataRequestオブジェクトを作成し、 */
/* そこにActivity取得リクエストを追加. */
/* レスポンスを取得するときのキーは'get_activity' */
/*===================================================================*/

var req = opensocial.newDataRequest();
req.add(req.newFetchActivitiesRequest(idspec), '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);

});
}


と、こんな感じ。
newFetchActivitiesRequestの第二引数はactivityIdを指定しないので、必要なし。

で、このリクエストに対応するサーバ側の処理は、
まずAcitivityServiceのjava、

public Future<RestfulCollection<Activity>> getActivities(Set<UserId> userIds,
GroupId groupId, String appId, Set<String> fields, CollectionOptions options, SecurityToken token)
throws ProtocolException {
return ImmediateFuture.newInstance(
new RestfulCollection<Activity>(logic.getActivities(userIds,groupId,appId,fields,options,token)));

}


な感じ。
とりあえずパラメータはそのままlogicの方に渡す。
で、そのlogic。

public List<Activity> getActivities(Set<UserId> userIds, GroupId groupId, String appId, Set<String> fields, CollectionOptions options, SecurityToken token)
throws ProtocolException {
GmsPerson viewer = getUser();
List<Activity> activities = new ArrayList<Activity>();
logger.info("アクティビティ取得(userId複数指定)開始:");
if (viewer == null) {
if (logger.isDebugEnabled()) {
logger.debug("Guestは取得できない:");
}
throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
"Guestのため、取得できない:loginid:[" + viewer.getLoginId() + "]");
}
if (! isInstalledGadget(viewer, token.getModuleId())) {
if (logger.isDebugEnabled()) {
logger.debug("ガジェット未インストール:"
+ "viewerId:[" + viewer.getLoginId() + "]:"
+ "ガジェットID:[" + token.getModuleId() + "]"
);
}
throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
"未インストールのため、取得できない:loginid:[" + viewer.getLoginId() + "]");
}
List<String> userLoginIds = getUserList(userIds, token);
ExtendedGmsPerson[] gmsPersons = null;
List<String> personIds = new ArrayList<String>();
int first = 0;
int max = 20;
for (;;) {
gmsPersons = gmsPersonDao.peopleGet(
userLoginIds,
groupId.getType().toString(),
groupId.getGroupId(),
null,
null,
null,
null,
null,
first,
max,
null);
if (logger.isDebugEnabled()) {
logger.debug("count:[" + gmsPersons.length + "]");
}
int length = gmsPersons.length;
for (int ii=0; ii<length; ii++) {
personIds.add(gmsPersons[ii].getId());
}
if (length < max) {
break;
}
first += max;
}
ExtendedGmsActivity[] gmsActivities = gmsActivityDao.selectByGmsPersonIds(personIds, options.getFirst(), options.getMax());
for (int ii=0,len = gmsActivities.length; ii<len; ii++) {
activities.add(mapToActivity(gmsActivities[ii], gmsActivities[ii].getGmsPerson().getLoginId()));
}
logger.info("アクティビティ取得(userId複数指定)終了:");
return activities;
}


大したことはしていない。
まずパーミッションをチェックして、
userIdとgroupIdからUserIdのリストを取得と。
そしたら、そのUserIdとひもづくactivityを取得する。

そんだけ。

.

0 コメント: