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