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

2009年7月24日金曜日

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

DataRequest.newFetchActivitiesRequestに対応するサーバ側処理を実装してみる。

ActivityServiceインタフェースに定義されているメソッドを実装すればよいんだけど、
newFetchActivitiesRequestに対応しそうなメソッドが3つある。


Future<Activity> getActivity(UserId userId, GroupId groupId, String appId,
Set<String> fields, String activityId, SecurityToken token)
throws ProtocolException;
Future<RestfulCollection<Activity>> getActivities(UserId userId, GroupId groupId,
String appId, Set<String> fields, CollectionOptions options, Set<String> activityIds, SecurityToken token)
throws ProtocolException;
Future<RestfulCollection<Activity>> getActivities(Set<UserId> userIds,
GroupId groupId, String appId, Set<String> fields, CollectionOptions options, SecurityToken token)
throws ProtocolException;


の3つ。

最初のgetActivityはactivityId指定の一件のActivityを取得するメソッドっぽい。
で、次の2つは、、UserIdが複数指定できるどうかとactivityIdsが指定できるかどうか。

newFetchActivitiesRequestでのJSON-RPC自体にいろいろなバリエーションがありそう。
ということで、

./java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ActivityHandler.java

のActivityHandler.javaを見てみる。


@Operation(httpMethods="GET")
public Future<?> get(SocialRequestItem request)
throws ProtocolException {
Set<UserId> userIds = request.getUsers();
Set<String> optionalActivityIds = ImmutableSet.copyOf(request.getListParameter("activityId"));

CollectionOptions options = new CollectionOptions(request);

// Preconditions
HandlerPreconditions.requireNotEmpty(userIds, "No userId specified");
if (userIds.size() > 1 && !optionalActivityIds.isEmpty()) {
throw new IllegalArgumentException("Cannot fetch same activityIds for multiple userIds");
}

if (!optionalActivityIds.isEmpty()) {
if (optionalActivityIds.size() == 1) {
return service.getActivity(userIds.iterator().next(), request.getGroup(),
request.getAppId(), request.getFields(), optionalActivityIds.iterator().next(),
request.getToken());
} else {
return service.getActivities(userIds.iterator().next(), request.getGroup(),
request.getAppId(), request.getFields(), options, optionalActivityIds, request.getToken());
}
}

return service.getActivities(userIds, request.getGroup(),
request.getAppId(),
// TODO: add pagination and sorting support
// getSortBy(params), getFilterBy(params), getStartIndex(params), getCount(params),
request.getFields(), options, request.getToken());
}


activityIdパラメータがあるかどうか、あるなら1件かどうかで処理が分岐するらしい。

最後のreturn文にTODO:と書いてあるのが気になるが、、
これで実装できる、かな。

.

0 コメント: