Author: lindner
Date: Wed Jan  7 14:32:47 2009
New Revision: 732542

URL: http://svn.apache.org/viewvc?rev=732542&view=rev
Log:
SHINDIG-668, SHINDIG-730 -- add activity paging support

Modified:
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ActivityHandler.java
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/spi/ActivityService.java
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ActivityHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ActivityHandler.java?rev=732542&r1=732541&r2=732542&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ActivityHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ActivityHandler.java
 Wed Jan  7 14:32:47 2009
@@ -21,6 +21,7 @@
 import org.apache.shindig.social.opensocial.spi.ActivityService;
 import org.apache.shindig.social.opensocial.spi.SocialSpiException;
 import org.apache.shindig.social.opensocial.spi.UserId;
+import org.apache.shindig.social.opensocial.spi.CollectionOptions;
 
 import com.google.common.collect.Sets;
 import com.google.inject.Inject;
@@ -108,6 +109,8 @@
     Set<UserId> userIds = request.getUsers();
     Set<String> optionalActivityIds = 
Sets.newLinkedHashSet(request.getListParameter("activityId"));
 
+    CollectionOptions options = new CollectionOptions(request);
+
     // Preconditions
     Preconditions.requireNotEmpty(userIds, "No userId specified");
     if (userIds.size() > 1 && !optionalActivityIds.isEmpty()) {
@@ -121,7 +124,7 @@
             request.getToken());
       } else {
         return service.getActivities(userIds.iterator().next(), 
request.getGroup(),
-            request.getAppId(), request.getFields(), optionalActivityIds, 
request.getToken());
+            request.getAppId(), request.getFields(), options, 
optionalActivityIds, request.getToken());
       }
     }
 
@@ -129,7 +132,7 @@
         request.getAppId(),
         // TODO: add pagination and sorting support
         // getSortBy(params), getFilterBy(params), getStartIndex(params), 
getCount(params),
-        request.getFields(), request.getToken());
+        request.getFields(), options, request.getToken());
   }
 
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/spi/ActivityService.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/spi/ActivityService.java?rev=732542&r1=732541&r2=732542&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/spi/ActivityService.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/spi/ActivityService.java
 Wed Jan  7 14:32:47 2009
@@ -40,11 +40,12 @@
    * @param groupId Indicates whether to fetch activities for a group.
    * @param appId   The app id.
    * @param fields  The fields to return. Empty set implies all
+   * @param options The sorting/filtering/pagination options
    * @param token   A valid SecurityToken
    * @return a response item with the list of activities.
    */
   Future<RestfulCollection<Activity>> getActivities(Set<UserId> userIds,
-      GroupId groupId, String appId, Set<String> fields, SecurityToken token)
+      GroupId groupId, String appId, Set<String> fields, CollectionOptions 
options, SecurityToken token)
       throws SocialSpiException;
 
   /**
@@ -55,18 +56,19 @@
    * @param groupId     Indicates whether to fetch activities for a group.
    * @param appId       The app id.
    * @param fields      The fields to return. Empty set implies all
+   * @param options The sorting/filtering/pagination options
    * @param activityIds The set of activity ids to fetch.
    * @param token       A valid SecurityToken
    * @return a response item with the list of activities.
    */
   Future<RestfulCollection<Activity>> getActivities(UserId userId, GroupId 
groupId,
-      String appId, Set<String> fields, Set<String> activityIds, SecurityToken 
token)
+      String appId, Set<String> fields, CollectionOptions options, Set<String> 
activityIds, SecurityToken token)
       throws SocialSpiException;
 
 
   /**
-   * Returns a set of activities for the passed in user and group that 
corresponds to a single of
-   * activityId
+   * Returns an activity for the passed in user and group that corresponds to 
a single
+   * activityId.
    *
    * @param userId     The set of ids of the people to fetch activities for.
    * @param groupId    Indicates whether to fetch activities for a group.

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java?rev=732542&r1=732541&r2=732542&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
 Wed Jan  7 14:32:47 2009
@@ -117,7 +117,7 @@
   }
 
   public Future<RestfulCollection<Activity>> getActivities(Set<UserId> userIds,
-      GroupId groupId, String appId, Set<String> fields, SecurityToken token)
+      GroupId groupId, String appId, Set<String> fields, CollectionOptions 
options, SecurityToken token)
       throws SocialSpiException  {
     List<Activity> result = Lists.newArrayList();
     try {
@@ -128,9 +128,9 @@
           for (int i = 0; i < activities.length(); i++) {
             JSONObject activity = activities.getJSONObject(i);
             if (appId == null || 
!activity.has(Activity.Field.APP_ID.toString())) {
-              result.add(convertToActivity(activity, fields));
+              result.add(filterFields(activity, fields, Activity.class));
             } else if 
(activity.get(Activity.Field.APP_ID.toString()).equals(appId)) {
-              result.add(convertToActivity(activity, fields));
+              result.add(filterFields(activity, fields, Activity.class));
             }
           }
         }
@@ -142,7 +142,7 @@
   }
 
   public Future<RestfulCollection<Activity>> getActivities(UserId userId,
-      GroupId groupId, String appId, Set<String> fields,
+      GroupId groupId, String appId, Set<String> fields, CollectionOptions 
options,
       Set<String> activityIds, SecurityToken token) throws SocialSpiException {
     List<Activity> result = Lists.newArrayList();
     try {
@@ -153,7 +153,7 @@
           JSONObject activity = activities.getJSONObject(i);
           if (activity.get(Activity.Field.USER_ID.toString()).equals(user)
               && 
activityIds.contains(activity.getString(Activity.Field.ID.toString()))) {
-            result.add(convertToActivity(activity, fields));
+            result.add(filterFields(activity, fields, Activity.class));
           }
         }
       }
@@ -174,7 +174,7 @@
           JSONObject activity = activities.getJSONObject(i);
           if (activity.get(Activity.Field.USER_ID.toString()).equals(user)
               && 
activity.get(Activity.Field.ID.toString()).equals(activityId)) {
-            return ImmediateFuture.newInstance(convertToActivity(activity, 
fields));
+            return ImmediateFuture.newInstance(filterFields(activity, fields, 
Activity.class));
           }
         }
       }
@@ -249,7 +249,7 @@
           continue;
         }
         // Add group support later
-        result.add(convertToPerson(person, fields));
+        result.add(filterFields(person, fields, Person.class));
       }
 
       // We can pretend that by default the people are in top friends order
@@ -284,7 +284,7 @@
         JSONObject person = people.getJSONObject(i);
         if (id != null && person.get(Person.Field.ID.toString())
             .equals(id.getUserId(token))) {
-          return ImmediateFuture.newInstance(convertToPerson(person, fields));
+          return ImmediateFuture.newInstance(filterFields(person, fields, 
Person.class));
         }
       }
       throw new SocialSpiException(ResponseError.BAD_REQUEST, "Person not 
found");
@@ -415,13 +415,6 @@
     return ids;
   }
 
-  private Activity convertToActivity(JSONObject object, Set<String> fields) 
throws JSONException {
-    if (!fields.isEmpty()) {
-      // Create a copy with just the specified fields
-      object = new JSONObject(object, fields.toArray(new 
String[fields.size()]));
-    }
-    return converter.convertToObject(object.toString(), Activity.class);
-  }
 
   private JSONObject convertFromActivity(Activity activity, Set<String> fields)
       throws JSONException {
@@ -429,11 +422,12 @@
     return new JSONObject(converter.convertToString(activity));
   }
 
-  private Person convertToPerson(JSONObject object, Set<String> fields) throws 
JSONException {
+
+  private <T> T filterFields(JSONObject object, Set<String> fields, Class<T> 
clz) throws JSONException {
     if (!fields.isEmpty()) {
       // Create a copy with just the specified fields
       object = new JSONObject(object, fields.toArray(new 
String[fields.size()]));
     }
-    return converter.convertToObject(object.toString(), Person.class);
+    return converter.convertToObject(object.toString(), clz);
   }
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java?rev=732542&r1=732541&r2=732542&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
 Wed Jan  7 14:32:47 2009
@@ -28,6 +28,7 @@
 import org.apache.shindig.social.core.util.BeanJsonConverter;
 import org.apache.shindig.social.opensocial.model.Activity;
 import org.apache.shindig.social.opensocial.spi.ActivityService;
+import org.apache.shindig.social.opensocial.spi.CollectionOptions;
 import org.apache.shindig.social.opensocial.spi.GroupId;
 import org.apache.shindig.social.opensocial.spi.RestfulCollection;
 import org.apache.shindig.social.opensocial.spi.SocialSpiException;
@@ -86,7 +87,7 @@
     List<Activity> activityList = ImmutableList.of();
     RestfulCollection<Activity> data = new 
RestfulCollection<Activity>(activityList);
     EasyMock.expect(activityService.getActivities(JOHN_DOE,
-        new GroupId(group, null), null, Sets.<String>newHashSet(), 
token)).andReturn(
+       new GroupId(group, null), null, Sets.<String>newHashSet(), new 
CollectionOptions(request), token)).andReturn(
         ImmediateFuture.newInstance(data));
 
     replay();
@@ -114,8 +115,8 @@
     Set<UserId> userIdSet = Sets.newLinkedHashSet(JOHN_DOE);
     userIdSet.add(new UserId(UserId.Type.userId, "jane.doe"));
     EasyMock.expect(activityService.getActivities(userIdSet,
-        new GroupId(GroupId.Type.self, null), "appId", 
Sets.<String>newHashSet(), token)).andReturn(
-        ImmediateFuture.newInstance(data));
+        new GroupId(GroupId.Type.self, null), "appId", 
Sets.<String>newHashSet(), new CollectionOptions(request), token)).andReturn(
+          ImmediateFuture.newInstance(data));
 
     replay();
     assertEquals(data, handler.handleGet(request).get());

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java?rev=732542&r1=732541&r2=732542&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java
 Wed Jan  7 14:32:47 2009
@@ -123,14 +123,14 @@
 
   public void testGetExpectedActivities() throws Exception {
     RestfulCollection<Activity> responseItem = db.getActivities(
-        Sets.newHashSet(CANON_USER), SELF_GROUP, APP_ID, 
Collections.<String>emptySet(),
+        Sets.newHashSet(CANON_USER), SELF_GROUP, APP_ID, 
Collections.<String>emptySet(), null,
         new FakeGadgetToken()).get();
     assertTrue(responseItem.getTotalResults() == 2);
   }
 
   public void testGetExpectedActivitiesForPlural() throws Exception {
     RestfulCollection<Activity> responseItem = db.getActivities(
-        Sets.newHashSet(CANON_USER, JOHN_DOE), SELF_GROUP, APP_ID, 
Collections.<String>emptySet(),
+        Sets.newHashSet(CANON_USER, JOHN_DOE), SELF_GROUP, APP_ID, 
Collections.<String>emptySet(), null,
         new FakeGadgetToken()).get();
     assertTrue(responseItem.getTotalResults() == 3);
   }


Reply via email to