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);
}