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

2009年7月24日金曜日

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

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

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

  1. Future<Activity> getActivity(UserId userId, GroupId groupId, String appId,  
  2.       Set<String> fields, String activityId, SecurityToken token)  
  3.       throws ProtocolException;  
  4. Future<RestfulCollection<Activity>> getActivities(UserId userId, GroupId groupId,  
  5.       String appId, Set<String> fields, CollectionOptions options, Set<String> activityIds, SecurityToken token)  
  6.       throws ProtocolException;  
  7. Future<RestfulCollection<Activity>> getActivities(Set<UserId> userIds,  
  8.       GroupId groupId, String appId, Set<String> fields, CollectionOptions options, SecurityToken token)  
  9.       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を見てみる。

  1. @Operation(httpMethods="GET")  
  2.  public Future<?> get(SocialRequestItem request)  
  3.      throws ProtocolException {  
  4.    Set<UserId> userIds = request.getUsers();  
  5.    Set<String> optionalActivityIds = ImmutableSet.copyOf(request.getListParameter("activityId"));  
  6.   
  7.    CollectionOptions options = new CollectionOptions(request);  
  8.   
  9.    // Preconditions  
  10.    HandlerPreconditions.requireNotEmpty(userIds, "No userId specified");  
  11.    if (userIds.size() > 1 && !optionalActivityIds.isEmpty()) {  
  12.      throw new IllegalArgumentException("Cannot fetch same activityIds for multiple userIds");  
  13.    }  
  14.   
  15.    if (!optionalActivityIds.isEmpty()) {  
  16.      if (optionalActivityIds.size() == 1) {  
  17.        return service.getActivity(userIds.iterator().next(), request.getGroup(),  
  18.            request.getAppId(), request.getFields(), optionalActivityIds.iterator().next(),  
  19.            request.getToken());  
  20.      } else {  
  21.        return service.getActivities(userIds.iterator().next(), request.getGroup(),  
  22.            request.getAppId(), request.getFields(), options, optionalActivityIds, request.getToken());  
  23.      }  
  24.    }  
  25.   
  26.    return service.getActivities(userIds, request.getGroup(),  
  27.        request.getAppId(),  
  28.        // TODO: add pagination and sorting support  
  29.        // getSortBy(params), getFilterBy(params), getStartIndex(params), getCount(params),  
  30.        request.getFields(), options, request.getToken());  
  31.  }  

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

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

.

0 コメント: