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 コメント:
コメントを投稿